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 сможет полностью загрузить и отобразить вашу форму (и в процессе, выполняющем стандартную процедуру фокусировки по умолчанию) до выполнения кода переопределения фокуса.
Лучший способ решить эту проблему - попытаться спроектировать форму таким образом, чтобы текстовое поле было первым фокусируемым элементом. По умолчанию форма будет перебирать свое дочернее дерево элементов управления в глубину, и как только она находит элемент управления, который можно сфокусировать, она фокусирует его и запускает.
Если вы посмотрите на файл кода конструктора для вашей формы, попробуйте вручную изменить его, чтобы убедиться, что:
- текстовое поле является первым элементом управления, добавленным на вкладку
- вкладка является первым элементом управления, добавленным к элементу управления вкладкой
- что tabcontrol является первым элементом управления, добавленным в форму.
Когда эти три вещи верны, текстовое поле будет сначала сфокусировано по умолчанию, и вам не придется запускать какой-либо другой код, чтобы переопределить это.
Надеюсь это поможет.