我有一个包含NumericUpDown
的控件。只有当容器具有焦点时才会显示updown,因此容器必须是可选择的(否则它永远不会获得焦点)。我希望控件在Tab键顺序方面表现为单个实体;也就是说,当用户选中控件时,它会显示updown并且会关注updown;当用户远离updown时,就好像他们已经远离控件一样。
实现第一部分很容易:在容器的OnEnter中,我关注了updown。如果用户在没有移位的情况下标记离开,它也可以正常工作,因为Tab键顺序中的下一个控件是正确的。但是,Tab键顺序中的上一个控件是updown,因为它必须是可选的;所以当用户shift-tabs远离updown时,会选择容器,因此会再次选择updown。
当用户shift-tabs远离updown时,如何选择容器控件的上一个控件?
更新:
我的问题是没有检测到我何时需要这样做 - 它正在找到将焦点发送到的控件。
更新:
SelectNextControl
似乎只在容器的父控件中起作用;如果容器是其父级的唯一控件,则它不会更改焦点,即使层次结构中的其他位置还有其他控件应该通过制表符接收焦点。
答案 0 :(得分:2)
如果您知道标签的方向,可以使用SendKeys.Send("+{TAB}");
和SendKeys.Send("{TAB}");
或者您可以使用Control.SelectNextControl()
答案 1 :(得分:1)
void UserControl1_Leave(object sender, EventArgs e)
{
this.numericUpDown1.Visible = false;
Control c = Parent.Controls[this.Name];
int i = Parent.Controls.IndexOf(c);
Parent.Controls[i - 1].Focus();
}
我已将此离开事件添加到自定义控件中,并且它为我工作。基本上,当用户将标签移开时,此事件将焦点设置为父窗体的控件集合中的上一个控件。不知道它是否正是你正在寻找的东西,但希望它会把你带到正确的方向。
答案 2 :(得分:0)
这是一个hack,但你可以使用OnEnter事件和一个布尔变量。如果变量设置为true,那么您已经在容器中并转到上一个控件(可能是容器控件的属性,因此您可以知道要去哪里)。
如果变量为false,则只需转到自定义控件并专注于向上/向下。
在容器的出口处,将变量设置为false。
我确信那里有更简单的东西,但是这是我能想到的最快的事情。
答案 3 :(得分:0)
实际上这似乎是我的默认行为?