2012-12-13 101 views
0

我已經採取了鏈接按鈕我的形式和KeyDown事件中,我寫如下移動的鏈接按鈕到左Form1_KeyDown不工作按要求

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Left) 
     { 
      linkLabel1.Left = linkLabel1.Left + 5; 
     } 
    } 

但按照要求,這是不動的LinkLabel可有人告訴我哪裏錯了

這也沒有工作

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.Left: 
       linkLabel1.Left = linkLabel1.Left + 5; 
       break; 
      default: 
       return; 
     } 

    } 
+0

它在做什麼? –

+0

什麼也沒有發生,但如果我拿一個文本框或一些東西,並且我寫了相同的事件,我的控件正按照要求移動 – Dotnet

+0

如果您完全刪除'if' - 是否有任何按鍵移動linkbutton? –

回答

0

我認爲它與事件由LinkLabel的攔截做。通過表單上顯示的鏈接標籤,關鍵事件不會被提升到表單。

將KeyPreview設置爲true(在窗體上)可以進行修復。然後,您應該舉辦活動,儘管您可能仍然有方向鍵問題。

更新:

確定,這應該工作,補充一點:

protected override bool ProcessDialogKey(Keys keyData) 
    { 
     if (keyData == Keys.Left) 
     { 
      linkLabel1.Left = linkLabel1.Left + 5; 
     } 
     return base.ProcessDialogKey(keyData); 
    } 
+0

感謝'賈斯汀哈維'我怎麼能確保控件停止移動時,它達到了表格的末尾 – Dotnet

+0

只需檢查linkLabel1.Left(加上它的寬度)對錶格寬度加上keyData檢查。 –

0

當你想移動控制,你必須重新配置它的Control.Location財產。 因此,只需添加或刪除一些點形式的位置。[X/Y]。屬性和這一切!

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Left) 
     { 
      // have we space? 
      if(linkLabel1.Location.X >= 4) 
       // 5 dots to the left side 
       linkLabel1.Location = new Point(linkLabel1.Location.X - 5, linkLabel1.Location.Y); 
     } 
    } 

編輯: msdn

位置是有一個(X,Y) - 協調。

+0

這是什麼'X' – Dotnet

+0

錯誤我正在使用ur代碼'無法修改'System.Windows.Forms.Control.Location'的返回值,因爲它不是一個變量' – Dotnet

2

set form1`s KeyPreview = true。它的工作原理是 。

0

保護覆蓋BOOL ProcessCmdKey(參考消息MSG,鑰匙KEYDATA) { 如果(e.KeyCode == Keys.Left) { linkLabel1.Left = linkLabel1.Left + 5; } return base.ProcessCmdKey(ref msg,keyData); }