繁体   English   中英

我如何把以前的控件select改成容器控件?

[英]How do I select the previous control to a container control?

我有一个包含NumericUpDown的控件。 updown 仅在容器具有焦点时显示,因此容器必须是可选择的(否则它永远无法获得焦点)。 我希望控件在 Tab 键顺序方面表现得像一个实体; 也就是说,当用户切换到控件时,它会显示 updown 并且 updown 是焦点; 当用户离开 updown 选项卡时,就好像他们离开了控件一样。

实现第一部分很容易:在容器的 OnEnter 中,我关注 updown。 如果用户在没有换档的情况下跳出,它也可以正常工作,因为 Tab 键顺序中的下一个控件是正确的。 但是,在 tab 顺序中的上一个控件是容器,因为它必须是可选的; 因此,当用户将制表符移离 updown 时,容器将被选中,因此 updown 将再次被选中。

select 当用户将制表符从 updown 移开时,如何将以前的控件转换为容器控件?

更新:

我的问题不是检测何时需要执行此操作——而是找到要将焦点发送到的控件。

更新:

SelectNextControl似乎只能在容器的父控件中工作; 如果容器是其父级上的唯一控件,则它不会更改焦点,即使层次结构中其他地方的其他控件应该通过选项卡接收焦点。

如果您知道标签的方向,您可以使用SendKeys.Send("+{TAB}"); SendKeys.Send("{TAB}");

或者你可以使用Control.SelectNextControl()

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();
    }

我已将此休假事件添加到自定义控件中并为我工作。 基本上,当用户将选项卡移开时,此事件会将焦点设置到父窗体控件集合中的上一个控件。 不知道它是否正是您要找的东西,但希望它能为您指明正确的方向。

这是一个 hack,但您可以将 OnEnter 事件与 boolean 变量结合使用。 如果该变量设置为 true,那么您已经在您的容器中,并且 go 指向上一个控件(这可能是您的容器控件的一个属性,因此您知道您要去哪里)。

如果该变量为 false,您只需进入自定义控件并专注于向上/向下。

在容器退出时,将变量设置回 false。

我敢肯定那里有更简单的东西,但这是我能想到的最快的事情。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM