Динамически созданный TextBox не имеет фокуса с MinimumSize и измененным шрифтом - PullRequest
2 голосов
/ 30 октября 2009

У меня странный.

Создать новую форму. Затем добавьте следующую функцию:

    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 равно true, поэтому мы устанавливаем минимальный размер и меняем шрифт, когда форма открыта, фокус нигде не видно!

Что, черт возьми, происходит? Почему это может повлиять на фокус? Я что-то здесь упускаю?

Это в .Net 2.0.5

Спасибо

Ответы [ 4 ]

2 голосов
/ 30 октября 2009

При неправильной установке минимальный размер формы крадет фокус (переходит к форме). Изменение шрифта не имеет никакого эффекта. Это странно, однако ...

UPDATE:

Настройка фокуса в OnLoad работает, хотя (box.Select ()).

1 голос
/ 01 февраля 2011

Пожалуйста, попробуйте и используйте следующий метод. Вам необходимо переопределить метод OnShown, если вы не уверены, какая функция минимизации влияет на вас.

protected override void OnShown( EventArgs e ) 
{
    textbox1.Focus();
    base.OnShown( e ); 
}
1 голос
/ 30 октября 2009

Хорошо, я попробовал это и выдвинул несколько замечаний:

  • Виновным является набор свойств MinimumSize
  • Код работает нормально, когда TextBox помещается в форму напрямую, а не создается динамически
  • Код работает, если TextBox создан до , установлен MinimumSize

Я не могу объяснить, почему это происходит (я думал, что это может быть проблема с порядком вкладок - это не так), но это должно дать представление об обходном пути.

0 голосов
/ 30 октября 2009

Сделайте это (, если я правильно прочитал вашу проблему ):

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.
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...