Winform作為桌面應(yīng)用程序的一個代表,可以說是C#初學(xué)者快速入門最好的一種方式,然而隨著我們的開發(fā)能力的提升,我們對UI界面的要求變得越來越高,于是我們開始不斷優(yōu)化、升級我們的UI界面。
Winform無邊框設(shè)計是我們開發(fā)漂亮的UI界面非常常用的一種方式,無邊框設(shè)計意味著沒有了應(yīng)用程序的標(biāo)題欄,也就無法直接拖動,今天主要給大家介紹兩種實現(xiàn)窗體無邊框拖動的方式。
第一種方式:通過編寫代碼實現(xiàn)
private Point mPoint;
private void Panel_MouseDown(object sender, MouseEventArgs e)
{
mPoint = new Point(e.X, e.Y);
}
private void Panel_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
}
}
這種方式使用的是自己寫代碼實現(xiàn),將這段代碼復(fù)制到界面代碼中,然后選擇窗體中的一個控件,比如Panel或者Label,將它們的MouseDown事件綁定代碼中的MouseDown事件,MouseMove事件綁定代碼中的MouseMove事件,即可。
第二種方式:通過Windows API實現(xiàn)
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
private void TopPanel_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
這種方式使用的是Windows底層的API函數(shù),同樣將這段代碼復(fù)制到界面代碼中,然后選擇窗體中的一個控件,比如Panel或者Label,將它們的MouseDown事件綁定代碼中的MouseDown事件,即可。