动态创建的TextBox没有焦点,MinimumSize和Font已更改

时间:2009-10-30 11:36:23

标签: c# winforms

我有一个奇怪的。

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

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

    }
  • 如果_goWrong为false,那么我们不设置最小大小或更改字体,当我打开表单时焦点位于新创建的TextBox上。然后,用户可以愉快地输入..

  • 如果_goWrong为真,那么我们设置最小尺寸并更改字体,当打开表单时,焦点无处可见!

到底是怎么回事?为什么这会对焦点产生影响?我在这里错过了什么吗?

这是在.Net 2.0.5

由于

4 个答案:

答案 0 :(得分:2)

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

<强>更新

在OnLoad中设置焦点虽然有效(box.Select())。

答案 1 :(得分:1)

好的,我尝试了这个,并提出了一些意见:

  • 这是罪魁祸首
  • 的MinimumSize属性集
  • 当TextBox直接放在表单上而不是动态创建时,代码可以正常工作
  • 如果在设置MinimumSize之前创建了TextBox,则代码可以正常工作

我无法解释为什么会发生这种情况(我认为它可能是Tab键顺序的一个问题 - 它不是),但这应该为解决方法提供一个想法。

答案 2 :(得分:1)

请尝试使用以下方法。如果您不确定哪个最小化函数对您有影响,则需要覆盖OnShown方法。

protected override void OnShown( EventArgs e ) 
{
    textbox1.Focus();
    base.OnShown( e ); 
}

答案 3 :(得分:0)

这样做(如果我正确地读了你的问题):

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.
        }