无法在我的用户控件中找到GotFocus()/ LostFocus()

我已经创建了一个WinForms用户控件。 我读了几个关于GotFocus()LostFocus()事件的地方,但我的用户控件没有在Properties窗口的Events部分提供这些事件。

我甚至尝试键入override ,看看这些事件处理程序是否会出现,但他们没有。 我无法在任何地方找到它们。

所以我用这些名称创建了自己的方法,然后我收到以下错误:

警告1’myspacespace.mycontrol.GotFocus()’隐藏inheritance的成员’System.Windows.Forms.Control.GotFocus’。 如果要隐藏,请使用new关键字。

到底发生了什么事。 如果GotFocus()已经存在,为什么我找不到并使用它?

从MSDN文档看起来它们是从Controlinheritance的,但不鼓励使用它们。 他们希望您使用Enter和Leave事件。

注意GotFocus和LostFocus事件是与WM_KILLFOCUS和WM_SETFOCUS Windows消息关联的低级别焦点事件。 通常,GotFocus和LostFocus事件仅在更新UICues或编写自定义控件时使用。 相反,Enter和Leave事件应该用于除Form类之外的所有控件,该类使用Activated和Deactivate事件。

也就是说,你可以通过+ =建议User1718294访问它们,或者你可以覆盖OnGotFocusOnLostFocus事件。

 protected override void OnLostFocus(EventArgs e) { base.OnLostFocus(e); } protected override void OnGotFocus(EventArgs e) { base.OnGotFocus(e); } 

GotFocus是一个已经存在的事件。 您要做的是创建一个名为“GotFocus”的方法,因为已存在具有相同名称的事件,您无法使用此名称创建方法。

为了“使用”一个事件,你必须向它注册一个函数,如下所示:

 mycontrol.GotFocus += mycontrol_GotFocus; 

现在只需添加此方法来处理事件:

 private void mycontrol_GotFocus(object sender, EventArgs e) { MessageBox.Show("Got focus."); } 

当您从一个类inheritance并且您不确定它包含哪些方法/属性时,您只需查看基础对象即可

输入“base”。 在方法体内,自动完成将显示基本方法。

使用Visual Studio 2010

获得焦点时使用Activated事件,当焦点丢失时使用Deactivate事件。 以下示例代码在获得焦点时更改“表单名称”。 (filename是Form1类的字符串成员,它扩展了Form类)

 private void Form1_Activated(object sender, EventArgs e) { if (fileName == "Untitled") this.Text = fileName + "- Text Editor"; else this.Text = fileName + "- Text Editor"; }