龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

ASP.NET编写组件控件实例:多列下拉框和鼠标相关组件(3)

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
该组件需要处理的鼠标事件有鼠标移入、鼠标按下、鼠标移动和鼠标离开,实现代码如下: Code /// summary /// 鼠标离开事件 /// /summary /// paramname="sender"/par

该组件需要处理的鼠标事件有鼠标移入、鼠标按下、鼠标移动和鼠标离开,实现代码如下:


        /// <summary>
        
/// 鼠标离开事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        void HandleControl_MouseLeave(object sender, EventArgs e)
        {
            
if (this.m_Enable)
                
this.HandleControl.Cursor = Cursors.Default;
        }

        
/// <summary>
        
/// 鼠标进入事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        void HandleControl_MouseEnter(object sender, EventArgs e)
        {
            
if (this.m_Enable)
            {
                
switch (this.m_MovableDirection)
                {
                    
case DirectionEnum.All:
                        
this.HandleControl.Cursor = Cursors.SizeAll;
                        
break;
                    
case DirectionEnum.Horizontal:
                        
this.HandleControl.Cursor = Cursors.SizeWE;
                        
break;
                    
case DirectionEnum.Vertical:
                        
this.HandleControl.Cursor = Cursors.SizeNS;
                        
break;
                    
default:
                        
break;
                }
            }
        }

        
/// <summary>
        
/// 之前的鼠标位置
        
/// </summary>
        private Point m_PreviousLocation;

        
/// <summary>
        
/// 鼠标按下事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        void HandleControl_MouseDown(object sender, MouseEventArgs e)
        {
            
if (this.m_Enable)
                m_PreviousLocation 
= Control.MousePosition;
        }

        
/// <summary>
        
/// 鼠标移动事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        void HandleControl_MouseMove(object sender, MouseEventArgs e)
        {
            
if (this.m_Enable && e.Button == MouseButtons.Left && this.m_MovableControl != null)
            {
                Point PositionOffset 
= Control.MousePosition;
                PositionOffset.Offset(
-this.m_PreviousLocation.X, -this.m_PreviousLocation.Y);
                
int intNewX = this.m_MovableControl.Location.X + PositionOffset.X;
                
int intNewY = this.m_MovableControl.Location.Y + PositionOffset.Y;

                
switch (this.m_MovableDirection)
                {
                    
case DirectionEnum.All:
                        
this.m_MovableControl.Location = new Point(intNewX, intNewY);
                        
break;
                    
case DirectionEnum.Horizontal:
                        
this.m_MovableControl.Location = new Point(intNewX, this.m_MovableControl.Location.Y);
                        
break;
                    
case DirectionEnum.Vertical:
                        
this.m_MovableControl.Location = new Point(this.m_MovableControl.Location.X, intNewY);
                        
break;
                    
default:
                        
break;
                }

                m_PreviousLocation 
= Control.MousePosition;
            }
        }

另外为了实现扩展属性,必须实现IExtenderProvider接口,关于IExtenderProvider接口的详细介绍请参考MSDN。这里默认允许内部控件响应鼠标操作,只记录不响应操作的内部控件。实现该接口后还要在组件上添加特性,格式为[ProvideProperty("HandleMove", typeof(Control))]。将组件放到窗体上,设置好HandleControl之后,就可以看到HandleControl的内部控件都会增加一个movableComponent1 上的 HandleMove属性,和ToolTip控件类似。


精彩图集

赞助商链接