Textbox.Focus() не работает в С#
Мне интересно, почему этот код не может сфокусировать текстовое поле...?
private void sendEmail_btn_Click(object sender, EventArgs e)
{
String sendTo = recipientEmail_tbx.Text.Trim();
if (!IsValidEmailAddress(sendTo))
{
MessageBox.Show("Please Enter valid Email address","Cognex" MessageBoxButtons.OK, MessageBoxIcon.Error);
recipientEmail_tbx.Focus();
}
}
Ответы
Ответ 1
Вместо этого используйте Select()
:
recipientEmail_tbx.Select();
Фокус - это низкоуровневый метод, предназначенный в первую очередь для авторов пользовательского контроля. Вместо этого программисты приложений должны использовать метод Выбрать или свойство ActiveControl для дочерних элементов управления или метод активации для форм.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx
Ответ 2
Добавить задержку miliSec
. Задержка затем вызовите Focus()
и не забудьте поместить внутри Dispatcher
.
Task.Delay(100).ContinueWith(_ =>
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
TextBoxNAme.Focus();
}));
});
Ответ 3
Даже я пробовал много решений, но ни один из них не работал у меня, когда я пытаюсь сосредоточиться на загрузке страницы. Наконец, я получил это решение, и оно сработало.
private void txtBox_LayoutUpdated(object sender, EventArgs e)
{
txtBox.Focus();
}
Ответ 4
Используйте обработчик события Form_Activation, добавив логическое значение firstactivation.
private bool firstActivation = true;
private bool firstControl = true;
private Control firstWindowsControl = null;
...
private void DynamicForm_Activated(object sender, EventArgs e)
{
if (firstActivation)
{
firstActivation = false;
bool fwcPresent = (firstWindowsControl != null);
Console.WriteLine($"DynamicForm_Activated: firstWindowControl present: {fwcPresent}");
if (fwcPresent)
{
firstWindowsControl.Focus();
}
}