代码之家  ›  专栏  ›  技术社区  ›  Mongus Pong

动态创建的文本框没有焦点,最小大小和字体已更改

  •  2
  • Mongus Pong  · 技术社区  · 15 年前

    创建一个新表单。然后添加以下函数:

        protected override void OnLoad ( EventArgs e )
        {
    
            if ( _goWrong )
            {
                this.MinimumSize = new System.Drawing.Size ( 420, 161 );
                this.Font = new Font ( "Tahoma", this.Font.Size, this.Font.Style );
            }
    
            TextBox box = new TextBox ();
            this.Controls.Add ( box );
    
        }
    
    • 如果_goError是真的,那么我们会设置最小大小并更改字体,当表单打开时,焦点将不可见!

    到底怎么回事?为什么这会对焦点产生任何影响?我是不是遗漏了什么?

    这是在.NET2.0.5中

    谢谢

    4 回复  |  直到 15 年前
        1
  •  1
  •   Jon Seigel    15 年前

    好吧,我试过了,得出了一些观察结果:

    • 罪魁祸首是MinimumSize属性集
    • 当文本框直接放置在表单上而不是动态创建时,代码工作正常
    • 如果创建了文本框,则该代码有效 之前 已设置最小大小

        2
  •  2
  •   Sorin Comanescu    15 年前

    出错时,设置最小表单大小会窃取焦点(转到表单)。更改字体无效。这很奇怪,但是。。。

    更新:

        3
  •  1
  •   Pops Atula    14 年前

    OnShown 方法,如果您不确定哪项功能影响您。

    protected override void OnShown( EventArgs e ) 
    {
        textbox1.Focus();
        base.OnShown( e ); 
    }
    
        4
  •  0
  •   Sergio Tapia    15 年前

    这样做( 如果我没看错你的问题

    protected override void OnLoad ( EventArgs e )
            {
    
                    if ( _goWrong )
                    {
                            this.MinimumSize = new System.Drawing.Size ( 420, 161 );
                            this.Font = new Font ( "Tahoma", this.Font.Size, this.Font.Style );
                    }
    
                    TextBox box = new TextBox ();                    
                    this.Controls.Add ( box );
                    box.Focus();//<----Add this line here and the textbox will get focus.
            }