【问题标题】:Difference Between LostFocus Event and Leave Event of TextBoxTextBox的LostFocus事件和Leave事件的区别
【发布时间】:2012-10-12 06:30:15
【问题描述】:

LostFocusTextBoxLeave事件有什么区别?

【问题讨论】:

标签: c#-4.0


【解决方案1】:

查看这些链接上的注释部分:

根据 MSDN,更改控件的焦点时会有所不同。 Leave 事件发生在验证之前,LostFocus 发生在验证之后。


更新日期:2019 年 2 月 14 日

我发现我几年前发布的答案仍在获得意见和支持。现在,我必须在上面的 MSDN 链接中包含一个(相当重要的)引用以避免新程序员之间的混淆(注意顺序的差异,尤其是在使用鼠标或调用 Focus 方法聚焦的情况下) :

当您使用键盘更改焦点(TAB、SHIFT+TAB 和 依此类推),通过调用 Select 或 SelectNextControl 方法,或通过 将 ContainerControl.ActiveControl 属性设置为当前 窗体中,焦点事件按以下顺序发生:

Enter

GotFocus

Leave              <--- before validation

Validating      --
                  |<--- validation
Validated       --

LostFocus          <--- after validation

当您使用鼠标或调用 Focus 来更改焦点时 方法,焦点事件按以下顺序发生:

Enter

GotFocus

LostFocus          <--- before validation

Leave              <--- before validation

Validating      --
                  |<--- validation
Validated       --

注意:强调我添加的报价中的文字和指标

【讨论】:

    【解决方案2】:

    它们发生在控件生命周期的不同点。根据使用的方法,验证发生在Leave 之后和LostFocus 之前。

    参见 MSDN:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx

    【讨论】:

      【解决方案3】:

      Leave()事件表示先执行键盘事件再执行鼠标事件,而Lost()事件表示先执行鼠标事件再执行键盘事件。

      【讨论】:

        【解决方案4】:

        总而言之,它要么不适用于键盘,要么不适用于鼠标。考虑到您无法预测将使用哪种输入法,这不是很有帮助。

        但是,这不是我的意思。 LostFocus 会在表单加载时发生,Leave 不会。

        这会在表单加载时将文本框变为黄色。

        Private Sub txtBox_LostFocus(sender As Object, e As EventArgs) Handles TextBox.LostFocus
            txtBox.BackColor = Color.Yellow
        End Sub
        

        这不会。

        Private Sub txtBox_TextLeave(sender As Object, e As EventArgs) Handles TextBox.Leave
            txtBox.BackColor = Color.Yellow
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-16
          相关资源
          最近更新 更多