Во-первых, событие Click
элемента управления TabPage
срабатывает, когда пользователь нажимает внутри TabPage
не в заголовке, поэтому ваше событие SelectedIndexChanged
- это то, которое вы хотите использовать.
Я только что протестировал код, очень похожий на ваш:
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControl1.SelectedTab == tabPage2)
{
textBox4.Focus();
}
}
И все работало нормально.
Текстовое поле пароля не включено или что-то в этом роде?
Если вы попытаетесь вызвать Focus()
на другом элементе управления, это тоже не сработает?
Если вы установите точку останова в коде SelectedIndexChanged
, она попадет?
Обновление: Интересно. Если точка останова не была достигнута (до if
), я бы дважды проверил, правильно ли подключен ваш обработчик событий. Поищите в файле designer.cs что-то вроде:
this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged);
Обновление: Я поместил свой рабочий пример на http://www.ccswe.com/temp/SO_TextBoxFocus.zip, возможно, просмотр его поможет вам выяснить, в чем проблема.
Обновление: Более простой способ присоединить обработчик событий к элементу управления в вашей форме:
1: выберите Control
, к которому нужно прикрепить обработчик событий, и щелкните значок Events
(молния) в окне Properties
.
альтернативный текст http://www.ccswe.com/temp/Attach_EventHandler_1.png
2: найдите событие, которое вы хотите прикрепить, и дважды щелкните вправо.
альтернативный текст http://www.ccswe.com/temp/Attach_EventHandler_2.png
3: для вас будет автоматически сгенерирована заглушка кода, а событие будет прикреплено в конструкторе.
альтернативный текст http://www.ccswe.com/temp/Attach_EventHandler_3.png
Если вы снова посмотрите в окно свойств, то увидите имя сгенерированного метода.