このコードがテキストボックスのフォーカスに失敗する理由を疑問に思っています...?
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();
}
}
代わりにSelect()
を使用してください:
recipientEmail_tbx.Select();
フォーカスは、主にカスタムコントロールの作成者を対象とした低レベルの方法です。代わりに、アプリケーションプログラマはSelectメソッドまたは子コントロールのActiveControlプロパティ、またはフォームのActivateメソッドを使用する必要があります。
http://msdn.Microsoft.com/en-us/library/system.windows.forms.control.focus.aspx
遅延miliSec
を追加します。遅延してからFocus()
を呼び出し、Dispatcher
の中に入れることを忘れないでください。
Task.Delay(100).ContinueWith(_ =>
{
Application.Current.Dispatcher.Invoke(new Action(() =>
{
TextBoxNAme.Focus();
}));
});
上記の多くの解決策を試してみましたが、ページの読み込みに焦点を合わせようとしていたので、それらのいずれも機能しませんでした。最終的に私はこの解決策を得て、それはうまくいきました。
private void txtBox_LayoutUpdated(object sender, EventArgs e)
{
txtBox.Focus();
}
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();
}
}