代码之家  ›  专栏  ›  技术社区  ›  Ran Sagy

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

  •  1
  • Ran Sagy  · 技术社区  · 16 年前

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

    我有一个表单,它包含几个用户控件,这些控件依次包含其他用户控件或其他基本控件,如文本框、RichTextBox等。

    在编辑文本框时,作为逻辑的一部分,我通过编程创建另一个控件并通知表单。表单上的其他控件可能会依次响应并创建更多控件。

    问题是,这些控件在创建并添加到窗体/其他控件时会从我的控件中窃取焦点。

    有没有一种方法可以防止我的控制在这种情况下失去焦点?

    2 回复  |  直到 16 年前
        1
  •  0
  •   cmsjr    16 年前

    除非控件可见并启用,否则无法接受(窃取)焦点。是否尝试使用其中一个或两个选项创建控件,并在适当时将其打开?

        2
  •  2
  •   t0mm13b    16 年前

    也许您应该在逻辑中首先包含选项卡索引,当您添加控件时,将选项卡索引设置为最后一个选项卡索引+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++;
    }
    

    您可以从示例中看到选项卡索引是如何递增的,这样,它将阻止 从窃取焦点的控制…

    希望这有帮助, 最好的问候, 汤姆。

    推荐文章