按Enter键对焦所选控件

时间:2017-10-17 15:10:50

标签: c# winforms

在C#windows应用程序中导航表单的所有控件(使用Enter键)我使用以下代码:

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

N.B。:表格属性KeyPreview = True;

以上代码运行正常,但当我要在两个dateTimePickerdateTimePicker1dateTimePicker2)之间导航时,按Enter键。 当Form打开Focus 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();
    }
}

任何人请帮助我。

1 个答案:

答案 0 :(得分: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事件的值,以指向此事件。