C# 按Enter键对选定控件进行对焦

C# 按Enter键对选定控件进行对焦,c#,winforms,C#,Winforms,在C windows应用程序中,要使用Enter键导航窗体的所有控件,我使用以下代码: private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == System.Windows.Forms.Keys.Enter) { SendKeys.Send("{TAB}"); } } 注意:表单属性KeyPreview=True 上面的代码工作正常,但当我要在两个DateT

在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();
    }
}

任何人都可以帮助我。

您可以将两个DateTimePicker订阅到同一个事件处理程序,而不是使用两个事件,并使用对象:


只是不要忘记在两个DateTimePicker的属性窗口中更改KeyDown事件的值以指向此事件。

使用第一个解决方案在所有控件之间导航就足够了。有什么问题吗?我也没看到问题。这是一个坏习惯,Enter键在GUI中起着完全不同的作用。它用于操作窗口的默认按钮,即Form.AcceptButton属性选择的按钮。以及向RichTextBox和多行文本框添加行。偶尔,为了解决用户体验问题,例如浏览器的地址框。用户可以使用Tab键和光标键进行导航。
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();
    }
}