2010-09-16 112 views
4

我創建了一個新的Windows窗體應用程序。我將一個按鈕拖到窗體上。 我需要在運行時將此按鈕拖放到此表單中的另一個位置。 任何代碼片段或鏈接表示讚賞。拖放Windows窗體按鈕

在來這裏之前我花了半個小時尋找。

+0

你怎麼會知道什麼時候該「點擊」按鈕,如果你也可以將它? – msergeant 2010-09-16 18:12:23

+0

我不需要點擊事件。我只需要用戶能夠重新排列窗體上顯示的控件。不需要其他功能 – CodingJoy 2010-09-16 18:57:04

回答

9

你可以像這樣開始:

bool isDragged = false; 
    Point ptOffset; 
    private void button1_MouseDown(object sender, MouseEventArgs e) 
    { 
    if (e.Button == MouseButtons.Left) 
    { 
     isDragged = true; 
     Point ptStartPosition = button1.PointToScreen(new Point(e.X, e.Y)); 

     ptOffset = new Point(); 
     ptOffset.X = button1.Location.X - ptStartPosition.X; 
     ptOffset.Y = button1.Location.Y - ptStartPosition.Y; 
    } 
    else 
    { 
     isDragged = false; 
    } 
    } 

    private void button1_MouseMove(object sender, MouseEventArgs e) 
    { 
    if (isDragged) 
    { 
     Point newPoint = button1.PointToScreen(new Point(e.X, e.Y)); 
     newPoint.Offset(ptOffset); 
     button1.Location = newPoint; 
    } 
    } 

    private void button1_MouseUp(object sender, MouseEventArgs e) 
    { 
    isDragged = false; 
    } 
+0

感謝您的回覆。我嘗試過,但按鈕仍然在原來的位置。我在MouseUp處理程序中的MouseMove處理程序中移動了代碼,現在該按鈕移動到新的位置。新的位置有點不穩定。需要弄清楚那部分。但再次感謝您的幫助 – CodingJoy 2010-09-16 19:00:47

+0

不穩定的位置可能是由於偏移。您以與該位置的屏幕座標不同的格式獲取鼠標座標。這就是調用PointToScreen的原因。 – msergeant 2010-09-17 11:26:56

+0

@msergeant很好的例子,效果很棒!不過,當我拖動按鈕時,我正在經歷一個閃爍的尾巴。任何想法可能是什麼原因造成的? – Maritim 2013-11-19 10:56:46