我已经创建了一个WinForms用户控件。我读了几个关于GotFocus()
和LostFocus()
事件的地方,但我的用户控件没有在“属性”窗口的“事件”部分中提供这些事件。
我甚至尝试输入override
来查看这些事件处理程序是否会出现但是却没有。我无法在任何地方找到它们。
所以我使用这些名称创建了自己的方法,然后出现以下错误:
警告1'myspacespace.mycontrol.GotFocus()'隐藏继承的成员'System.Windows.Forms.Control.GotFocus'。如果想要隐藏,请使用new关键字。
这里到底发生了什么事。如果GotFocus()
已经存在,为什么我找不到并使用它?
答案 0 :(得分:8)
从MSDN Documentation看起来它们是从Control继承的,但不鼓励使用它们。他们希望您使用Enter和Leave Events。
注意GotFocus和LostFocus事件是与WM_KILLFOCUS和WM_SETFOCUS Windows消息相关联的低级焦点事件。通常,GotFocus和LostFocus事件仅在更新UICues或编写自定义控件时使用。相反,Enter和Leave事件应该用于除Form类之外的所有控件,它使用Activated和Deactivate事件。
也就是说,你可以通过+ =建议用户1718294建议访问它们,或者你可以覆盖OnGotFocus
和OnLostFocus
事件。
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
}
答案 1 :(得分:3)
GotFocus是一个已经存在的事件。 您要做的是创建一个名为“GotFocus”的方法,因为已经存在具有相同名称的事件,您无法使用此名称创建方法。
为了“使用”一个事件,你必须向它注册一个函数,如下所示:
mycontrol.GotFocus += mycontrol_GotFocus;
现在只需添加此方法即可处理事件:
private void mycontrol_GotFocus(object sender, EventArgs e)
{
MessageBox.Show("Got focus.");
}
答案 2 :(得分:0)
当你从一个类继承并且你不确定它包含哪些方法/属性时,你可以简单地查看基础对象
输入'base'。在方法体内,自动完成将显示基本方法。
答案 3 :(得分:0)
使用Visual Studio 2010
在获得焦点时使用激活事件,在焦点丢失时使用停用事件。 以下示例代码在获得焦点时更改“表单名称”。 (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";
}