ASP.NET编写组件控件实例:多列下拉框和鼠标相关组件(3)
该组件需要处理的鼠标事件有鼠标移入、鼠标按下、鼠标移动和鼠标离开,实现代码如下: 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控件类似。
精彩图集
精彩文章