使用回车键在Windows窗体中导航

时间:2011-04-09 14:17:53

标签: c# .net winforms uinavigationcontroller

我的Windows窗体应用程序中有文本框,我希望当用户按下ENTER键时,光标会转到下一个文本框。

我该怎么做?

这是一个好习惯还是我应该避免?实际上,用户非常容易使用并且习惯性地按下ENTER键以在文本框和按钮之间导航。所以,对他们来说,我需要这样做。

请使用两个文本框作为示例帮助我完整的代码。

6 个答案:

答案 0 :(得分:6)

我想说最好的方法是创建一个继承自TextBox的用户控件,然后覆盖OnKeyPress方法来捕获enter并发送一个tab。然后,焦点将被赋予表单上的下一个TabIndex,就像实际输入了一个选项卡一样。

以下代码就是这样:

public partial class CustomTextbox : TextBox
{
    public CustomTextbox()
    {
        InitializeComponent();            
    }

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        if (e.KeyChar == '\r')
        {
            e.Handled = true;
            SendKeys.Send("{TAB}");
        }

    }
} 

您还可以在控件的KeyPress事件处理程序中添加类似的代码,但这会节省大量重复代码和不必要的事件处理程序。

至于这是否是好的做法 - 我会说,一般来说,不,改变表格的默认行为绝不是一个好主意,当然,如果这是你的用户想要和期望的,那么这是他们的决定

答案 1 :(得分:5)

这是一个坏主意。标准UI用于TAB在输入字段之间移动。当您选择不遵循众所周知的标准时,您的应用程序可用性较差。这些标准使UI变得直观。

答案 2 :(得分:1)

例如,您可以捕获 OnKeyUp 事件,检查它是否为RETURN并处理源控制以使用 Focus()进行下一次控制......

答案 3 :(得分:1)

是的,这取决于你

对于示例,您可以在表单上放置4个文本框并使用以下代码

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

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

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

它可能对你有帮助。

快乐的编码......

答案 4 :(得分:0)

是的,您可以在TextBox上触发KeyDown或KeyUp事件。要检查它是否是回车键,您可以执行以下操作:

//e is the KeyEventArgs from the event.
e.KeyCode == Keys.Enter

然后,如果他按下了回车键,你可以这样做:

System.Windows.Forms.Control.SelectNextControl();

要设置控件的顺序,请在Visual Studio中查找此小图标:

http://i.stack.imgur.com/nZWLO.png

点击它,你将进入标签订购模式,因为我喜欢称之为。只需按照您希望的顺序单击控件,完成后,再次单击小图标。的Presto!

现在,这是否是一个好主意,完全取决于你的最终用户使用的方式。如果他们总是像这样使用它,并且你给他们一些不适合他们心智模型的东西,他们会说你的软件坏了。

始终始终尝试模拟用户已经掌握的流程。

如果你有时间,请阅读本文,这是一个非常轻松和非常好的阅读:

http://www.joelonsoftware.com/uibook/fog0000000249.html

答案 5 :(得分:0)

我认为最好的方法是:

1)逐步分配每个文本框的TabIndex属性(首先是x,next是x + 1等)。

2)捕获整个表单上的OnKeyUp事件,检查参数以查看该键是否为RETURN

3)使用TabIndex聚焦下一个文本框。或者模拟TAB键。

此代码应该有效:

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        GetNextControl((TextBox)sender, true);
    }
}

这样你最终只能编写一个函数,你可以拥有任意数量的文本框。