首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# WinForms 按鈕移動邊界檢測完整邏輯:座標計算與邊界限制

     編輯:程式設計疑難解答

座標系統基礎

  • Left、Top:控件左上角相對**父容器客戶區**的 X、Y 座標。
  • Width、Height:控件自身寬高。
  • 父容器可用區域:ClientRectangle.Width、ClientRectangle.Height。

四個方向移動邏輯

const int STEP = 10; // 每次移動像素

// 向上:Top 減小,最小 0
if (btn.Top > 0) btn.Top -= STEP;

// 向下:Top 增大,最大 = 容器高 - 控件高
if (btn.Top < this.ClientRectangle.Height - btn.Height) btn.Top += STEP;

// 向左:Left 減小,最小 0
if (btn.Left > 0) btn.Left -= STEP;

// 向右:Left 增大,最大 = 容器寬 - 控件寬
if (btn.Left < this.ClientRectangle.Width - btn.Width) btn.Left += STEP;

為什麼是 10?

STEP 為**自定義移動步長**,可改為 5、20 或綁定 TrackBar 讓使用者調整。數值越大移動越快但越「跳躍」。

完整事件綁定範例

private void Form1_KeyDown(object sender, KeyEventArgs e) {
    switch (e.KeyCode) {
        case Keys.Up:    MoveUp();    break;
        case Keys.Down:  MoveDown();  break;
        case Keys.Left:  MoveLeft();  break;
        case Keys.Right: MoveRight(); break;
    }
}

private void MoveUp() { if (btn.Top > 0) btn.Top -= 10; }
// ... 其他方向同理

記得設定表單 KeyPreview = true 以接收鍵盤事件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved