Compact Framework 3.5 текстовое поле не работает

Я использую код ниже, чтобы установить фокус на текстовое поле:

public void setFieldInFocus(TabPage tabPage)
    {
        foreach (Control t in tabPage.Controls)
        {
            if (t is TextBox)
            {
                if (t.Name == fieldInFocus)
                {
                    t.Focus();              

                }
            }

        }

    }

Курсор отображается в текстовом поле, однако, когда я пытаюсь ввести текст с помощью мобильной клавиатуры, ничего не происходит, пока я не нажму на текстовое поле, даже если курсор уже был в текстовом поле. Затем я нажимаю на текстовое поле и пытаюсь ввести текст, используя мобильную клавиатуру, и это работает. Почему я все еще должен щелкнуть текстовое поле, чтобы ввести текст? Что я могу сделать, чтобы решить эту проблему?

обратите внимание, что я использую компактный фреймворк 3.5 и textField.Select(); не доступен.

Спасибо

1 ответ

Когда выполняется фрагмент кода, который вы опубликовали? Перед тем, как форма отобразится? Если это так, среда выполнения.NET переопределит настройку ручной фокусировки и изменит ее на первый фокусируемый элемент управления в форме.

Даже если курсор появляется внутри текстового поля, это может быть не тот элемент управления, который имеет фокус.

Одним из решений, которое я бы посчитал нереальным, было бы сбросить на форму таймер с очень коротким интервалом (скажем, 10), который включается при срабатывании события загрузки формы. В обработчике timer_tick отключите таймер (убедитесь, что он запускается только один раз), а затем выполните свой фрагмент кода. Выполнение кода таким образом гарантирует, что насос сообщений Windows сможет полностью загрузить и отобразить вашу форму (и в процессе, выполняющем стандартную процедуру фокусировки по умолчанию) до выполнения кода переопределения фокуса.

Лучший способ решить эту проблему - попытаться спроектировать форму таким образом, чтобы текстовое поле было первым фокусируемым элементом. По умолчанию форма будет перебирать свое дочернее дерево элементов управления в глубину, и как только она находит элемент управления, который можно сфокусировать, она фокусирует его и запускает.

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

  1. текстовое поле является первым элементом управления, добавленным на вкладку
  2. вкладка является первым элементом управления, добавленным к элементу управления вкладкой
  3. что tabcontrol является первым элементом управления, добавленным в форму.

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

Надеюсь это поможет.

Другие вопросы по тегам