Динамически созданный TextBox не имеет фокуса с MinimumSize и измененным шрифтом

2

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

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

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

  • Если _goWrong истинно, поэтому мы устанавливаем минимальный размер и меняем шрифт, когда форма открыта, фокус нигде не видно!

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

Это в .Net 2.0.5

Спасибо

  • 0
    Вы пытались добавить вызов, чтобы установить фокус в случае _goWrong ?
  • 0
    Да уж. Это не имеет значения.
Показать ещё 1 комментарий
Теги:
winforms

4 ответа

1
Лучший ответ

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

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

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

2

Если вы ошибаетесь, установка минимального размера формы перечеркивает фокус (идет в форму). Изменение шрифта не влияет. Это странно, однако...

UPDATE:

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

  • 0
    Слей это. Да, с помощью Select работает в этом небольшом тестовом приложении, но не делает это в нашем основном приложении, которое намного сложнее.
  • 0
    Поэтому мне все еще нужно полностью понять, что происходит, прежде чем я смогу двигаться вперед!
1

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

protected override void OnShown( EventArgs e ) 
{
    textbox1.Focus();
    base.OnShown( e ); 
}
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.
        }
  • 0
    Я попробовал это. Это не имеет значения. Как я уже говорил, я могу поставить на форму таймер и вызвать «Фокус» на отметке «Таймер». Это исправляет это. Но это не удовлетворительное решение, и я хочу знать, почему это пошло бы не так ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню