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

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

我该怎么做呢?

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

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

我想说最好的方法是创建一个inheritance自TextBox的用户控件,然后重写OnKeyPress方法以捕获输入并发送一个选项卡。 然后,焦点将被赋予表单上的下一个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事件处理程序中添加类似的代码,但这样可以节省大量重复的代码和不必要的事件处理程序。

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

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

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

是的,这取决于你

对于示例,您可以在表单上放置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(); } } 

它可能对你有所帮助。

快乐的编码……

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

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

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

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

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

http://sofzh.miximages.com/c%23/nZWLO.png

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

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

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

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

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

我认为最好的方法是:

1)递增地分配每个文本框的TabIndex属性(第一个是x,下一个是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); } } 

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