我想知道为什么这段代码无法关注文本框......?
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();
}
}
答案 0 :(得分:97)
改为使用Select()
:
recipientEmail_tbx.Select();
Focus是一种低级方法,主要用于自定义控件作者。相反,应用程序员应该对子控件使用选择方法或ActiveControl属性,或者为表单使用Activate方法。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx
答案 1 :(得分:4)
将延迟添加一些miliSec
。延迟然后调用Focus()
并且不要忘记放入Dispatcher
。
Task.Delay(100).ContinueWith(_ =>
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
TextBoxNAme.Focus();
}));
});
答案 2 :(得分:2)
即使我尝试了很多上述解决方案,但是当我试图专注于页面加载时,它们都没有为我工作。最后我得到了这个解决方案并且有效。
private void txtBox_LayoutUpdated(object sender, EventArgs e)
{
txtBox.Focus();
}
答案 3 :(得分:0)
将 Form_Activated 事件处理程序与firstActivation
布尔值结合使用。
private bool firstActivation = 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();
}
}