我的Windows窗体应用程序中有文本框,我希望当用户按下ENTER键时,光标会转到下一个文本框。
我该怎么做?
这是一个好习惯还是我应该避免?实际上,用户非常容易使用并且习惯性地按下ENTER键以在文本框和按钮之间导航。所以,对他们来说,我需要这样做。
请使用两个文本框作为示例帮助我完整的代码。
答案 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!
现在,这是否是一个好主意,完全取决于你的最终用户使用的方式。如果他们总是像这样使用它,并且你给他们一些不适合他们心智模型的东西,他们会说你的软件坏了。
始终始终尝试模拟用户已经掌握的流程。
如果你有时间,请阅读本文,这是一个非常轻松和非常好的阅读:
答案 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);
}
}
这样你最终只能编写一个函数,你可以拥有任意数量的文本框。