本文實(shí)例為大家分享了WinForm實(shí)現(xiàn)鼠標(biāo)拖動(dòng)控件跟隨效果的具體代碼,供大家參考,具體內(nèi)容如下
1. 運(yùn)行初始窗口如下:
2. 拖動(dòng)后效果如下:
3. 代碼如下:
public partial class Form1 : Form{ /* * 理解了下面的幾個(gè)概念,就能完全明白相對(duì)坐標(biāo)的變化. * MouseEventArgs e 為事件鼠標(biāo)參數(shù),因此,e.Location 指示了位于事件源上的光標(biāo)坐標(biāo) * Cursor.Position 獲取的是相對(duì)于用戶屏幕的光標(biāo)坐標(biāo) * PointToClient() 方法可將屏幕坐標(biāo) Cursor.Position 換算成工作區(qū)的坐標(biāo) * 因此,換算后的 Cursor.Position 減去 e.Location 得到的始終是事件源的 Location */ /// <summary> /// 鼠標(biāo)按下為true /// </summary> private bool Mousedown; /// <summary> /// 鼠標(biāo)在事件源的位置 /// </summary> private int CurX = 0; private int CurY = 0; public Form1() { InitializeComponent(); } private void Controls_MouseDown(object sender, MouseEventArgs e) { CurX = e.X; CurY = e.Y; Mousedown = true; if (sender is TextBox) { ((TextBox)sender).Cursor = Cursors.Arrow; } } private void Controls_MouseMove(object sender, MouseEventArgs e) { if (Mousedown) { // 獲取當(dāng)前屏幕的光標(biāo)坐標(biāo) Point pTemp = new Point(Cursor.Position.X, Cursor.Position.Y); // 轉(zhuǎn)換成工作區(qū)坐標(biāo) pTemp = this.PointToClient(pTemp); // 定位事件源的 Location Control control = sender as Control; control.Location = new Point(pTemp.X - CurX, pTemp.Y - CurY); } } private void Controls_MouseUp(object sender, MouseEventArgs e) { Mousedown = false; if (sender is TextBox) { ((TextBox)sender).Cursor = Cursors.IBeam; } }}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注