2015/1/5

【C#】讓控制元件可在視窗中自由移動,以按鈕為例

  想讓控制元件(Control Component,如:按鈕、標籤...等)可以在視窗中自由移動只需要註冊MouseDown與MouseMove兩個事件並加入一些程式碼即可達成:
  1. 首先在Form中加入一個按鈕,在此範例名稱設定為button1
  2. 在Form類別中增加一個成員屬性
    private Point mouse_offset;
    
  3. 註冊button1的MouseDown事件,加入下面程式碼記錄滑鼠點擊位置(此位置是以按鈕左上角為原點的座標)
    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        mouse_offset = new Point(-e.X, -e.Y);
    }
    
  4. 註冊button1的MouseMove事件,加入下面程式碼
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    private void button1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            Button btn = (Button)sender;
            Point mousePos = PointToClient(Control.MousePosition);
            mousePos.Offset(mouse_offset.X, mouse_offset.Y);
            btn.Location = mousePos;
        }
    }
    
    Control.MousePosition可以取得滑鼠在螢幕中的座標值,但因按鈕是附著於Form視窗,因此必須使用PointToClient方法把螢幕做標值轉換為Form視窗中的座標值。
    使用者可能是點擊按鈕左上角以外的位置,因此需使用第七行做Offset修正,否則移動放開後按鈕總會落在滑鼠的右下方。

1 則留言:

  1. 請問 如果我今天只想控制單位只能 平移 應該怎麼做

    回覆刪除