Winform作為桌面應(yīng)用程序的一個(gè)代表,可以說(shuō)是C#初學(xué)者快速入門最好的一種方式,然而隨著我們的開(kāi)發(fā)能力的提升,我們對(duì)UI界面的要求變得越來(lái)越高,于是我們開(kāi)始不斷優(yōu)化、升級(jí)我們的UI界面。
Winform無(wú)邊框設(shè)計(jì)是我們開(kāi)發(fā)漂亮的UI界面非常常用的一種方式,無(wú)邊框設(shè)計(jì)意味著沒(méi)有了應(yīng)用程序的標(biāo)題欄,也就無(wú)法直接拖動(dòng),今天主要給大家介紹兩種實(shí)現(xiàn)窗體無(wú)邊框拖動(dòng)的方式。
第一種方式:通過(guò)編寫代碼實(shí)現(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);
}
}
這種方式使用的是自己寫代碼實(shí)現(xiàn),將這段代碼復(fù)制到界面代碼中,然后選擇窗體中的一個(gè)控件,比如Panel或者Label,將它們的MouseDown事件綁定代碼中的MouseDown事件,MouseMove事件綁定代碼中的MouseMove事件,即可。
第二種方式:通過(guò)Windows API實(shí)現(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ù)制到界面代碼中,然后選擇窗體中的一個(gè)控件,比如Panel或者Label,將它們的MouseDown事件綁定代碼中的MouseDown事件,即可。