我正面临一个我似乎无法解决的问题。 问题出在一个WinForm我有几个容器(TabControls,Panels,...)。
控件中的Tab顺序工作正常(当然)。但现在客户要求更改taborder以从第一个容器(当前tabindex 0,0,1)中的文本框跳转到另一个容器中的控件(当前tabindex 0,1,0,1)。
我的第一种方法是将第二个的tabindex设置为0,0,1,1,但没有效果。标签从0,0,1跳到0,0,2。
我也尝试了其他一些组合但没有结果。
有人能提供我如何解决这个问题的提示吗?
PS:0,0,0表示包含控件的容器,以防万一
答案 0 :(得分:3)
您可以使用该控件的Leave event,并在后面的代码中手动设置焦点来执行此操作。
private void textBox1_Leave(object sender, System.EventArgs e)
{
textBox2.Focus();
}
答案 1 :(得分:0)
如果您想使用TAB键,最好不要使用Leave event
例如,如果您使用鼠标进行更改,则会产生一些错误的重定向。
更好地覆盖ProcessCmdKey
这是一个很好的解决方案:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool baseResult = base.ProcessCmdKey(ref msg, keyData);
//if key is tab and TextBox1 is focused then jump to TextBox2
if (keyData == Keys.Tab && TextBox1.Focused)
{
TextBox2.Focus();
return true;
}
else if (keyData == Keys.Tab && TexBox2.Focused)
{
TextBox3.Focus();
return true;
}
return baseResult;
}
希望它有所帮助。