2017-02-03 3 views
-1

У меня есть одно приложение, построенное с помощью WinForms с большим количеством форм на нем (приблизительно 90 форм), и теперь есть требование, чтобы при открытии любой формы первый вход должен был сфокусироваться, чтобы он был готов к вводу в ,Как установить фокус на первый вход во всех формах в проекте WinForms?

Я представляю, как это сделать для одной формы. Мы могли бы выполнить следующее:

var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault(); 
if (firstInput != null) 
    firstInput.Focus(); 

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

Я хотел сделать это для всех форм сразу. В этом случае я создал базовый класс:

public class BaseForm : Form 
{ 
    public void SetFoucsOnFirstInput() 
    { 
     var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault(); 
     if (firstInput != null) 
      firstInput.Focus(); 
    } 
} 

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

Как это сделать в Windows Forms? Есть ли способ использовать мой подход базового класса без необходимости изменять все 90 форм? Есть ли лучший способ? Или просто нет никакого способа сделать это без изменения самой формы?

+0

Вы знакомы с таможней? При создании пользовательских интерфейсов вы всегда должны устанавливать правильный порядок табуляции. Это также помогает читателям экрана, чтобы пользователь знал метку, связанную с элементом управления. –

+0

Настройка фокуса автоматически на первом элементе управления 'Collections' не является хорошей идеей, поскольку элементы управления будут добавлены в' Коллекции' вашей формы в том порядке, в котором вы добавите их в форму, и, возможно, вы переместите их в разные местоположения, для Например, первый «TextBox» вашей формы может быть внизу формы. Вы должны установить вкладки «Заказы» вручную во время разработки. –

ответ

0

Вы можете переопределить OnShown(...) в базовой форме:

public class BaseForm : Form 
{ 

    public void override OnShown() 
    { 
     base.OnShown(); 
     SetFoucsOnFirstInput(); 
    } 

    public void SetFoucsOnFirstInput() 
    { 
     var firstInput = this.Controls.OfType<TextBox>().FirstOrDefault(); 
     if (firstInput != null) 
      firstInput.Focus(); 
    } 
} 

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

0

Вы можете использовать форму Нагрузка Событие для установки фокуса.

help in msdn

 Смежные вопросы

  • Нет связанных вопросов^_^