web-dev-qa-db-ja.com

textbox.Focus()がC#で機能しない

このコードがテキストボックスのフォーカスに失敗する理由を疑問に思っています...?

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();
    }
}
42
Dark Knight

代わりにSelect()を使用してください:

recipientEmail_tbx.Select();

フォーカスは、主にカスタムコントロールの作成者を対象とした低レベルの方法です。代わりに、アプリケーションプログラマはSelectメソッドまたは子コントロールのActiveControlプロパティ、またはフォームのActivateメソッドを使用する必要があります。

http://msdn.Microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

101
Daniel Peñalba

遅延miliSecを追加します。遅延してからFocus()を呼び出し、Dispatcherの中に入れることを忘れないでください。

Task.Delay(100).ContinueWith(_ =>
     {
         Application.Current.Dispatcher.Invoke(new Action(() =>
         {
             TextBoxNAme.Focus();
         }));
     });
5
Abhishek Maurya

上記の多くの解決策を試してみましたが、ページの読み込みに焦点を合わせようとしていたので、それらのいずれも機能しませんでした。最終的に私はこの解決策を得て、それはうまくいきました。

private void txtBox_LayoutUpdated(object sender, EventArgs e)
{
    txtBox.Focus();
}
3
Balasubramani M

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();
        }

    }
0
JGFMK