У меня есть одно приложение, построенное с помощью 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 форм? Есть ли лучший способ? Или просто нет никакого способа сделать это без изменения самой формы?
Вы знакомы с таможней? При создании пользовательских интерфейсов вы всегда должны устанавливать правильный порядок табуляции. Это также помогает читателям экрана, чтобы пользователь знал метку, связанную с элементом управления. –
Настройка фокуса автоматически на первом элементе управления 'Collections' не является хорошей идеей, поскольку элементы управления будут добавлены в' Коллекции' вашей формы в том порядке, в котором вы добавите их в форму, и, возможно, вы переместите их в разные местоположения, для Например, первый «TextBox» вашей формы может быть внизу формы. Вы должны установить вкладки «Заказы» вручную во время разработки. –