C# WinForm控件的拖动和缩放是个很有用的功能。实现起来其实很简单的,主要是设计控件的MouseDown、MouseLeave、MouseMove事件,下面的几个步骤将逐步实现C# WinForm控件的拖动和缩放的功能。
1、定义一个枚举类型,描述光标状态
private enum EnumMousePointPosition
{
MouseSizeNone = 0, //'无
MouseSizeRight = 1, //'拉伸右边框
MouseSizeLeft = 2, //'拉伸左边框
MouseSizeBottom = 3, //'拉伸下边框
MouseSizeTop = 4, //'拉伸上边框
MouseSizeTopLeft = 5, //'拉伸左上角
MouseSizeTopRight = 6, //'拉伸右上角
MouseSizeBottomLeft = 7, //'拉伸左下角
MouseSizeBottomRight= 8, //'拉伸右下角
MouseDrag = 9 // '鼠标拖动
}
2、定义几个变量
const int Band = 5;
const int MinWidth=10;
const int MinHeight=10;
private EnumMousePointPosition m_MousePointPosition;
private Point p,p1;
3、定义自己的MyMouseDown事件
private void MyMouseDown(object sender,System.Windows.Forms.MouseEventArgs e)
{
p.X=e.X;
p.Y=e.Y;
p1.X=e.X;
p1.Y=e.Y;
}
4、定义自己的MyMouseLeave事件
private void MyMouseLeave(object sender, System.EventArgs e)
{
m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;
this.Cursor=Cursors.Arrow;
}
5、设计一个函数,确定光标在控件不同位置的样式
private EnumMousePointPosition MousePointPosition(Size size,System.Windows.Forms.MouseEventArgs e)
{
if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height))
{
if (e.X < Band)
{
if (e.Y < Band) {return EnumMousePointPosition.MouseSizeTopLeft;}
else
{
if (e.Y > -1 * Band + size.Height)
{return EnumMousePointPosition.MouseSizeBottomLeft;}
else
{return EnumMousePointPosition.MouseSizeLeft;}
}
}
else
{
if (e.X > -1 * Band + size.Width)
{
if (e.Y < Band)
{return EnumMousePointPosition.MouseSizeTopRight;}
else
{
if (e.Y > -1 * Band + size.Height)
{return EnumMousePointPosition.MouseSizeBottomRight;}
else
{return EnumMousePointPosition.MouseSizeRight;}
}
}
else
{
if (e.Y < Band)
{return EnumMousePointPosition.MouseSizeTop;}
else
{
if (e.Y > -1 * Band + size.Height)
{return EnumMousePointPosition.MouseSizeBottom;}
else
{return EnumMousePointPosition.MouseDrag;}
}
}
}
}
else
{return EnumMousePointPosition.MouseSizeNone;}
}
6、定义自己的MyMouseMove事件,在这个事件里,会使用上面设计的函数










