Control.LostFocus 事件

定义

在控件失去焦点时发生。

C#
[System.ComponentModel.Browsable(false)]
public event EventHandler LostFocus;
C#
[System.ComponentModel.Browsable(false)]
public event EventHandler? LostFocus;

事件类型

属性

示例

下面的代码示例演示如何验证 TextBox1 的文本。 它还演示了通过将 属性设置为 FileDialog.InitialDirectory TextBox1 中的文本来处理LostFocus事件。 代码示例使用 ErrorProvider.GetError 方法在打开文件对话框之前检查错误。 若要运行此示例,请将以下代码粘贴到包含TextBox名为 、名为 TextBox1OpenFileDialog1ButtonOpenFileDialog名为 Button1ErrorProvider 的窗体中ErrorProvider1。 确保所有事件都与其事件处理程序相关联。

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

注解

通过使用键盘 (TAB、SHIFT+TAB 等) 、调用 SelectSelectNextControl 方法或将 属性设置为 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 设置为 falseValidating 则取消和 Validated 事件。

Cancel如果在事件委托中Validating将 的 CancelEventArgs 属性设置为 true ,则通常会在事件后Validating发生的所有事件都会被禁止显示。

备注

GotFocusLostFocus 事件是低级别焦点事件,与WM_KILLFOCUS和WM_SETFOCUS Windows 消息相关联。 通常, GotFocusLostFocus 事件仅在更新 UICues 或编写自定义控件时使用。 相反, EnterLeave 事件应用于除 类之外 Form 的所有控件,该类使用 ActivatedDeactivate 事件。 有关 和 LostFocus 事件的详细信息GotFocus,请参阅WM_KILLFOCUSWM_KILLFOCUS主题。

注意

不要尝试从 、、GotFocusValidatingLeaveLostFocus、 或 Validated 事件处理程序中Enter设置焦点。 这样做可能会导致应用程序或操作系统停止响应。 有关详细信息,请参阅 WM_KILLFOCUS 主题。

有关处理事件的详细信息,请参阅 处理和引发事件

适用于

产品 版本
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9

另请参阅