C#Winforms - 以编程方式添加时防止控件窃取焦点

时间:2010-01-27 13:53:00

标签: c# winforms user-controls controls focus

我有一个奇怪的问题。 我的情况如下:

我有一个表单,它包含几个用户控件,这些控件又包含其他用户控件或其他基本控件,如TextBox,RichTextBox等。

作为编辑文本框时逻辑的一部分,我以编程方式创建另一个控件并通知表单。表单上的其他控件可能会反过来产生更多控件。

麻烦的是,这些控件在创建时会从我的控件中窃取焦点,并将其添加到表单/其他控件中。

有没有办法阻止我的控件在发生时失去焦点?

2 个答案:

答案 0 :(得分:2)

也许你应该首先在逻辑中包含选项卡索引,当你添加控件时,将选项卡索引设置为最后一个选项卡索引+ 1,如果你先设置选项卡顺序,你的工作会更容易。控件,并在设计时将常量设置为最后一个选项卡索引,请参见此处:

private const int LAST_TAB_INDEX = 5; // an Example
private int lastTabIndex = LAST_TAB_INDEX; 

private void AddControl(){
   // Set up your control
   Control ctl = new Control();
   // ....
   ctl.TabIndex = lastTabIndex;   
   this.Add(ctl);
   this.lastTabIndex++;
}

您可以从示例中看到选项卡索引如何递增,这样就可以防止 窃取焦点的控制......

希望这有帮助, 最好的祝福, 汤姆。

答案 1 :(得分:0)

除非可见并启用,否则控件无法接受(窃取)焦点。您是否尝试使用其中一个或两个创建控件为false,然后在适当的时候打开它们?