2016-07-25 74 views
1

我使用keyup事件來添加通過按enter鍵移動到下一個控件的功能。這個事件可以工作,但我在TextBox中鍵入了一些內容,然後按下Enter鍵移動到下一個控件,但我在前一個控件中鍵入的字母是清晰的。我沒有在我的代碼中的任何地方添加清除功能。 下面是代碼:C#keyup事件問題

private void nametextBox_KeyUp(object sender, KeyEventArgs e) 
    { 
     if(e.KeyCode == Keys.Enter) 
     { 
      this.SelectNextControl(nametextBox, true, true, true, true); 
     } 
    } 

    private void emailtextBox_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      this.SelectNextControl(agetextBox, true, true, true, true); 
     } 

    } 
+0

,你能否告訴我們在SelectNextControl方法的代碼:你可以通過發件人爲Control,而不是手動每個控制做到這一點? –

+1

'SelectNextControl'是[框架方法](https://msdn.microsoft.com/en-us/library/system.windows.forms.control.selectnextcontrol(v = vs.110).aspx) – dlatikay

+1

是因爲你的nameTextBox_KeyUp傳遞nameTextBox到SelectNextControl?你應該通過一個不同的控制? – Tom

回答

4

設置e.Handled標誌true防止我懷疑添加了一個新的生產線,以你的控制和隱藏文本默認鍵動作:

if(e.KeyCode == Keys.Enter) 
    { 
     this.SelectNextControl(nametextBox, true, true, true, true); 
     e.Handled = true; 
    } 

您需要要覆蓋ProcessCmdKey以防止輸入新行並隱藏文本。 (或者你可以設置你的文本框爲單行,如果這對你有用)。否則,將其添加到您的Window邏輯中:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.Enter) 
     return true; 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

返回true將標記不應執行默認命令。這會影響窗口中的所有控件,這意味着如果需要,您需要手動添加換行功能。

我還可以建議您對每個關鍵事件都使用相同的處理程序,除非您有任何不同之處才能添加到每個關鍵事件中。

private void Control_KeyUp(object sender, KeyEventArgs e) 
{ 
    if(e.KeyCode == Keys.Enter) 
     if(sender is Control) 
      this.SelectNextControl((Control)sender, true, true, true, true); 
} 
+0

它不工作盧。 –

+0

我創建了一個演示應用程序,它適用於我。我使用了兩個TextBox控件。你在使用文本框嗎? – Lew

+0

我忘了將我的文本框設置爲多行。我很抱歉。我找到了一個解決方案。請在幾分鐘內查看我編輯的答案。 – Lew