【发布时间】:2009-06-03 14:32:01
【问题描述】:
在标准的 WinForms 应用程序中,是否有可能出现以下情况以及我将如何做到这一点:
具有四个文本框控件的表单,在表单上从上到下排列:
- 文本框1
- 文本框2
- 文本框3
- 文本框4
所需的行为是,当表单加载时,焦点位于 TextBox3 上,但在跳出时,焦点转到顶部并正常通过所有控件,方式如下:
- TextBox3
- 文本框1
- 文本框2
- TextBox3
- 文本框4
【问题讨论】:
在标准的 WinForms 应用程序中,是否有可能出现以下情况以及我将如何做到这一点:
具有四个文本框控件的表单,在表单上从上到下排列:
所需的行为是,当表单加载时,焦点位于 TextBox3 上,但在跳出时,焦点转到顶部并正常通过所有控件,方式如下:
【问题讨论】:
这将是您需要编写的代码,并且需要正确使用事件。根据需要设置标签顺序,然后编写以下代码:
private bool OnLoad = True;
Form_OnLoad(...) {
TextBox3.SetFocus();
}
TextBox3_LostFocus(...) {
if (OnLoad) {
TextBox1.SetFocus();
OnLoad = false;
} // The else falls through to the default tab order
}
【讨论】:
LFSR 是对的:
您必须在 textBox3 LostFocus 事件上编码,这是一个 VB 示例
static notFirstTime as boolean
if notFirstTime then exit sub
textbox1.setFocus
notfirstTime=true
【讨论】:
简短的回答:绝对!
表单上的布局与 Tab 顺序无关。您只需通过设置 TabIndex 属性即可指定选项卡遍历和起点。启动控件应为 0,下一个为 1,依此类推。此外,TabStop 属性可以方便地指定哪些控件可以通过 Tab 键访问。
【讨论】:
您也许可以使用 TabIndex 属性的以下配置来欺骗它进行购买。
您必须将标签设置为 TabStop="True"。但我认为这可能有效。请记住,我对此不是 100% 确定...
【讨论】:
在您的构造函数(或设计器)中 像这样(或类似的东西)设置表索引。
this.textBox1.TabIndex = 1;
this.textBox2.TabIndex = 2;
this.textBox3.TabIndex = 0;
this.textBox4.TabIndex = 4;
然后设置一个事件将文本框 3 的 tabIndex 设置为新值:
private void textBox3_Leave(object sender, EventArgs e)
{
textBox3.TabIndex = 3;
}
【讨论】: