如何选择容器控件的上一个控件?

时间:2009-06-17 12:51:00

标签: c# .net winforms focus

我有一个包含NumericUpDown的控件。只有当容器具有焦点时才会显示updown,因此容器必须是可选择的(否则它永远不会获得焦点)。我希望控件在Tab键顺序方面表现为单个实体;也就是说,当用户选中控件时,它会显示updown并且会关注updown;当用户远离updown时,就好像他们已经远离控件一样。

实现第一部分很容易:在容器的OnEnter中,我关注了updown。如果用户在没有移位的情况下标记离开,它也可以正常工作,因为Tab键顺序中的下一个控件是正确的。但是,Tab键顺序中的上一个控件是updown,因为它必须是可选的;所以当用户shift-tabs远离updown时,会选择容器,因此会再次选择updown。

当用户shift-tabs远离updown时,如何选择容器控件的上一个控件?

更新:

我的问题是没有检测到我何时需要这样做 - 它正在找到将焦点发送到的控件。

更新:

SelectNextControl似乎只在容器的父控件中起作用;如果容器是其父级的唯一控件,则它不会更改焦点,即使层次结构中的其他位置还有其他控件应该通过制表符接收焦点。

4 个答案:

答案 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)

实际上这似乎是我的默认行为?