#region 窗体大小调整的方法
public bool isMouseDown = false;
///
/// 调整大小时,鼠标感应的边框宽度
///
private int ResizeBorderWidth = 6;
///
/// 位置类型
///
private MouseLocationStyle loactionStyle = MouseLocationStyle.S22_MiddelCenter;
///
/// 上一次鼠标坐标
///
private Point LastMoustLocation;
///
/// 根据鼠标坐标,返回鼠标位置类型
///
/// 鼠标距窗体左上角的坐标
///
private MouseLocationStyle GetLocationStyle(Point mouseLocation)
{
//左上
if (mouseLocation.X <= ResizeBorderWidth &&
mouseLocation.Y <= ResizeBorderWidth)
{
return MouseLocationStyle.S11_LeftTop;
}
//中上
if (mouseLocation.X > ResizeBorderWidth &&
mouseLocation.X <= this.Width - ResizeBorderWidth &&
mouseLocation.Y <= ResizeBorderWidth)
{
return MouseLocationStyle.S12_CenterTop;
}
//右上
if (mouseLocation.X > this.Width - ResizeBorderWidth &&
mouseLocation.Y <= ResizeBorderWidth)
{
return MouseLocationStyle.S13_RightTop;
}
//左中
if (mouseLocation.X <= ResizeBorderWidth &&
mouseLocation.Y > ResizeBorderWidth &&
mouseLocation.Y <= this.Height - ResizeBorderWidth)
{
return MouseLocationStyle.S21_MiddleLeft;
}
//中中
if (mouseLocation.X > ResizeBorderWidth &&
mouseLocation.X <= this.Width - ResizeBorderWidth &&
mouseLocation.Y > ResizeBorderWidth &&
mouseLocation.Y <= this.Height - ResizeBorderWidth)
{
return MouseLocationStyle.S22_MiddelCenter;
}
//右中
if (mouseLocation.X > this.Width - ResizeBorderWidth &&
mouseLocation.Y > ResizeBorderWidth &&
mouseLocation.Y <= this.Height - ResizeBorderWidth)
{
return MouseLocationStyle.S23_RightMiddel;
}
//左下
if (mouseLocation.X <= ResizeBorderWidth
&& mouseLocation.Y > this.Height - ResizeBorderWidth)
{
return MouseLocationStyle.S31_LeftBottom;
}
//中下
if (mouseLocation.X > ResizeBorderWidth &&
mouseLocation.X <= this.Width - ResizeBorderWidth &&
mouseLocation.Y > this.Height - ResizeBorderWidth)
{
return MouseLocationStyle.S32_CenterBottom;
}
//右下
if (mouseLocation.X > this.Width - ResizeBorderWidth &&
mouseLocation.Y > this.Height - ResizeBorderWidth)
{
return MouseLocationStyle.S33_RightBottom;
}
throw new Exception("未知区域");
}
///
/// 根据鼠标位置类型,返回鼠标光标类型
///
/// 鼠标位置类型
///
private Cursor GetCursorByMouseLocationStyle(MouseLocationStyle mouseStyle)
{
switch (mouseStyle)
{
case MouseLocationStyle.S11_LeftTop:
return Cursors.SizeNWSE;
case MouseLocationStyle.S12_CenterTop:
return Cursors.SizeNS;
case MouseLocationStyle.S13_RightTop:
return Cursors.SizeNESW;
case MouseLocationStyle.S21_MiddleLeft:
return Cursors.SizeWE;
case MouseLocationStyle.S22_MiddelCenter:
return Cursors.Default;
case MouseLocationStyle.S23_RightMiddel:
return Cursors.SizeWE;
case MouseLocationStyle.S31_LeftBottom:
return Cursors.SizeNESW;
case MouseLocationStyle.S32_CenterBottom:
return Cursors.SizeNS;
case MouseLocationStyle.S33_RightBottom:
return Cursors.SizeNWSE;
default:
return Cursors.Default;
}
}
///
/// 根据鼠标坐标和鼠标坐标类型调整窗体大小
///
/// 鼠标坐标
/// 鼠标位置类型
private void ChangeSize(Point mouseLocation, MouseLocationStyle mouseStyle)
{
Size newSize = new Size(this.Width, this.Height);
switch (mouseStyle)
{
case MouseLocationStyle.S11_LeftTop:
//左上
newSize.Width -= mouseLocation.X;
newSize.Height -= mouseLocation.Y;
this.Location = new Point(this.Location.X + mouseLocation.X, this.Location.Y + mouseLocation.Y);
break;
case MouseLocationStyle.S12_CenterTop:
//中上
newSize.Height -= mouseLocation.Y;
this.Location = new Point(this.Location.X, this.Location.Y + mouseLocation.Y);
break;
case MouseLocationStyle.S13_RightTop:
//右上
newSize.Width = mouseLocation.X;
newSize.Height -= mouseLocation.Y;
this.Location = new Point(this.Location.X, this.Location.Y + mouseLocation.Y);
break;
case MouseLocationStyle.S21_MiddleLeft:
//左中
newSize.Width -= mouseLocation.X;
this.Location = new Point(this.Location.X + mouseLocation.X, this.Location.Y);
break;
case MouseLocationStyle.S22_MiddelCenter:
//中中【无需调整】
break;
case MouseLocationStyle.S23_RightMiddel:
//中右
newSize.Width = mouseLocation.X;
break;
case MouseLocationStyle.S31_LeftBottom:
//左下
newSize.Width -= mouseLocation.X;
newSize.Height = mouseLocation.Y;
this.Location = new Point(this.Location.X + mouseLocation.X, this.Location.Y);
break;
case MouseLocationStyle.S32_CenterBottom:
//中下
newSize.Height = mouseLocation.Y;
break;
case MouseLocationStyle.S33_RightBottom:
//右下
newSize.Width = mouseLocation.X;
newSize.Height = mouseLocation.Y;
break;
}
if (newSize.Width>250&&newSize.Height>200)
this.Size = newSize;
}
///
/// 鼠标坐标类型枚举
/// 【用于调整窗体大小】
/// 【对应九宫格】
///
public enum MouseLocationStyle
{
S11_LeftTop,
S12_CenterTop,
S13_RightTop,
S21_MiddleLeft,
S22_MiddelCenter,
S23_RightMiddel,
S31_LeftBottom,
S32_CenterBottom,
S33_RightBottom
}
private void Test_MouseMove(object sender, MouseEventArgs e)
{
//鼠标距界面左上角的坐标
Point mouseLocation = new Point(Control.MousePosition.X - this.Location.X, Control.MousePosition.Y - this.Location.Y);
//如果允许调整大小
if (this.isMouseDown && this.loactionStyle != MouseLocationStyle.S22_MiddelCenter)
{
//调整大小
if (this.LastMoustLocation == null || Math.Abs(this.LastMoustLocation.X - mouseLocation.X) >= 5 || Math.Abs(this.LastMoustLocation.Y - mouseLocation.Y) >= 5)
{
this.ChangeSize(mouseLocation, this.loactionStyle);
this.LastMoustLocation = new Point(mouseLocation.X, mouseLocation.Y);
//this.Text = string.Format("X: {0} Y:{1}", mouseLocation.X, mouseLocation.Y);
}
}
else
{
//鼠标位置
this.loactionStyle = this.GetLocationStyle(mouseLocation);
this.Cursor = this.GetCursorByMouseLocationStyle(this.loactionStyle);
}
}
private void Test_MouseDown(object sender, MouseEventArgs e)
{
isMouseDown = true;
}
private void Test_MouseUp(object sender, MouseEventArgs e)
{
//调用窗体移动的方法
isMouseDown = false;
this.Cursor = Cursors.Default;
}
#endregion