次の方法で共有


Control.LostFocus イベント

コントロールにフォーカスがなくなると発生します。

Public Event LostFocus As EventHandler
[C#]
public event EventHandler LostFocus;
[C++]
public: __event EventHandler* LostFocus;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが EventArgs 型の引数を受け取りました。

解説

キーボード (Tab、Shift+Tab など) を使用するか、 Select メソッドまたは SelectNextControl メソッドを呼び出すか、 ContainerControl.ActiveControl プロパティを現在のフォームに設定してフォーカスを変更するとき、次の順序でフォーカス イベントが発生します。

  1. Enter
  2. GotFocus
  3. Leave
  4. Validating
  5. Validated
  6. LostFocus

マウスを使用するか Focus メソッドを呼び出してフォーカスを変更するとき、フォーカス イベントは次の順序で発生します。

  1. Enter
  2. GotFocus
  3. LostFocus
  4. Leave
  5. Validating
  6. Validated

CausesValidation プロパティが false に設定されている場合、 Validating イベントおよび Validated イベントは発生しません。

Validating イベント デリゲートで CancelEventArgs オブジェクトの Cancel プロパティが true に設定されると、通常は Validating イベントの後に発生するすべてのイベントが発生しなくなります。

メモ    GotFocus イベントおよび LostFocus イベントは、WM_KILLFOCUS Windows メッセージおよび WM_SETFOCUS Windows メッセージに結び付けられた、低水準のフォーカス イベントです。一般的に、 GotFocus イベントおよび LostFocus イベントは、 UICues を更新するときにだけ使用されます。 Activated イベントおよび Deactivate イベントを使用する Form クラス以外のすべてのコントロールに対して、 Enter イベントおよび Leave イベントを使用する必要があります。 GotFocus イベントおよび LostFocus イベントの詳細については、MSDN ライブラリにある『Platform SDK』ドキュメントの「Keyboard Input Reference」で、 WM_SETFOCUS および WM_KILLFOCUS のトピックを参照してください。

注意    LostFocus イベント ハンドラの中からフォーカスを設定しないでください。フォーカスを設定すると、アプリケーションやオペレーティング システムが応答を停止することがあります。 LostFocus イベントの詳細については、MSDN ライブラリの『Platform SDK』ドキュメントの「Keyboard Input Reference」で WM_KILLFOCUS 、および「Messages and Message Queues」で Message Deadlocks を参照してください。

イベント処理の詳細については、「 イベントの利用 」を参照してください。

使用例

[Visual Basic, C#] TextBox1 オブジェクトのテキストを検証する方法を次のコード例に示します。この例では、ファイル ダイアログの InitialDirectory プロパティを TextBox1 のテキストに設定して、テキスト ボックスの System.Drawing.Control.LostFocus イベントを処理する方法も示しています。このコード例では、ErrorProvider.GetError メソッドを使用して、ファイル ダイアログを開く前にエラーがあるかどうかを調べました。この例を実行するには、TextBox1 という名前の TextBox、OpenFileDialog1 という名前の OpenFileDialog、Button1 という名前のボタン、および ErrorProvider1 という名前の ErrorProvider が配置されているフォームに、次のコードを貼り付けます。

 
Private Sub TextBox1_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles TextBox1.Validating

    ' If nothing is entered,
    ' an ArgumentException is caught; if an invalid directory is entered, 
    ' a DirectoryNotFoundException is caught. An appropriate error message 
    ' is displayed in either case.
    Try
        Dim directory As New System.IO.DirectoryInfo(TextBox1.Text)
        directory.GetFiles()
        ErrorProvider1.SetError(TextBox1, "")

    Catch ex1 As System.ArgumentException
        ErrorProvider1.SetError(TextBox1, "Please enter a directory")

    Catch ex2 As System.IO.DirectoryNotFoundException
        ErrorProvider1.SetError(TextBox1, _
        "The directory does not exist." & _
        "Try again with a different directory.")
    End Try

End Sub

' This method handles the LostFocus event for TextBox1 by setting the 
' dialog's InitialDirectory property to the text in TextBox1.
Private Sub TextBox1_LostFocus(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles TextBox1.LostFocus
    OpenFileDialog1.InitialDirectory = TextBox1.Text
End Sub


' This method demonstrates using the ErrorProvider.GetError method 
' to check for an error before opening the dialog box.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

    'If there is no error, then open the dialog box.
    If ErrorProvider1.GetError(TextBox1) = "" Then
        Dim dialogResult As DialogResult = OpenFileDialog1.ShowDialog()
    End If

End Sub

[C#] 
private void TextBox1_Validating(object sender, 
    System.ComponentModel.CancelEventArgs e)
{
    // If nothing is entered,
    // an ArgumentException is caught; if an invalid directory is entered, 
    // a DirectoryNotFoundException is caught. An appropriate error message 
    // is displayed in either case.
    try
    {
        System.IO.DirectoryInfo directory = 
            new System.IO.DirectoryInfo(TextBox1.Text);
        directory.GetFiles();
        ErrorProvider1.SetError(TextBox1, "");

    }
    catch(System.ArgumentException ex1)
    {
        ErrorProvider1.SetError(TextBox1, "Please enter a directory");

    }
    catch(System.IO.DirectoryNotFoundException ex2)
    {
        ErrorProvider1.SetError(TextBox1, "The directory does not exist." +
            "Try again with a different directory.");
    }

}

// This method handles the LostFocus event for TextBox1 by setting the 
// dialog's InitialDirectory property to the text in TextBox1.
private void TextBox1_LostFocus(object sender, System.EventArgs e)
{
    OpenFileDialog1.InitialDirectory = TextBox1.Text;
}

// This method demonstrates using the ErrorProvider.GetError method 
// to check for an error before opening the dialog box.
private void Button1_Click(System.Object sender, System.EventArgs e)
{
    //If there is no error, then open the dialog box.
    if (ErrorProvider1.GetError(TextBox1)=="")
    {
        DialogResult dialogResult = OpenFileDialog1.ShowDialog();
    }
}

[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

Control クラス | Control メンバ | System.Windows.Forms 名前空間 | OnLostFocus