2017-10-17 21 views
0

在C#中的Windows應用程序來瀏覽表格的所有控制(使用回車鍵)我使用下面的代碼:對焦選定的控件Enter鍵

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == System.Windows.Forms.Keys.Enter) 
    { 
     SendKeys.Send("{TAB}"); 
    } 
} 

注:表格屬性KeyPreview = True;

的上面的代碼工作正常,但是當我要在兩個dateTimePickerdateTimePicker1,dateTimePicker2)之間導航時,請按Enter鍵。 當窗體打開對焦dateTimePicker1並按Enter鍵然後按焦點dateTimePicker2並按Enter鍵焦點dateTimePicker1

下面的代碼工作正常,沒有上述代碼。使用上述代碼或任何其他方式導航兩個dateTimePicker的最佳方式是什麼?

private void dateTimePicker1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) { 
     dateTimePicker2.Focus(); 
    } 
} 

private void dateTimePicker2_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) { 
     dateTimePicker1.Focus(); 
    } 
} 

有人請幫幫我。

+0

使用第一種解決方案在所有控件之間導航就足夠了。有什麼問題? –

+0

我也沒有看到任何問題。這是一個不好的習慣,Enter鍵在GUI中扮演着非常不同的角色。它用於操作窗口的默認按鈕,即由Form.AcceptButton屬性選擇的窗口。並將行添加到RichTextBox和多行TextBox。例如,偶爾會解決UX問題,例如瀏覽器的地址欄。用戶可以使用Tab鍵和光標鍵進行導航。 –

回答

1

您可以訂閱你的兩個DateTimePickers相同的事件處理程序,而不是使用兩個事件,並使用sender對象:

private void dateTimePicker_KeyDown(object sender, KeyEventArgs e) 
{ 
    var dtp = sender as DateTimePicker; 
    if (e.KeyCode == Keys.Enter) 
    { 
     if (dtp?.Name[dtp.Name.Length - 1] == '1') 
      dateTimePicker2.Focus(); 
     else dateTimePicker1.Focus(); 
    } 
} 

只是不要忘了更改屬性KeyDown事件的價值DateTimePickrs指向此事件的窗口。

相關問題