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

时间:2012-11-13 03:21:02

标签: c# winforms user-controls

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

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

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

  

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

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

4 个答案:

答案 0 :(得分:8)

MSDN Documentation看起来它们是从Control继承的,但不鼓励使用它们。他们希望您使用Enter和Leave Events。

  

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

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

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";
    }