C#Designed无法识别自定义用户控件中的自定义事件

5 c# designer visual-studio-2012

我遇到了VS2012设计师的麻烦.我有一个我设计的用户控件,其中包含用户输入IPv4,IPv6或DNS的文本框(以及其他内容).我需要将该文本验证为有效(TextChanged事件)报告回主程序.请考虑以下代码:

private bool addressError;

public EventHandler ErrorChanged;

public bool Error
{
    get
    {
       return addressError;
    }
    set
    {
        if (this.Error != value)
        { 
            addressError = value;
            OnErrorChanged(this, EventArgs.Empty);
        }
    }
}

protected virtual void OnErrorChanged(object sender, EventArgs e)
{
    if (ErrorChanged != null)
    {
        ErrorChanged(sender, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将事件处理程序添加到主程序设计器(控件名称为"Com"):

this.Com.ErrorChanged += new System.EventHandler(this.Com_ErrorChanged);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,虽然代码完全符合我的要求,但设计师认为没有ErrorChanged事件.它报告的确切消息是

"类型'ModbusCom.Communications'没有名为'ErrorChanged'的事件."

我可以忽略错误,设计师显示表单确定.我可以运行程序,一切都很好,但不得不一直告诉它忽略这个问题有点烦人.有什么办法可以解决这个问题吗?感谢帮助!

Dan*_*ite 6

你没有宣布它是一个事件

更改:

public EventHandler ErrorChanged;
Run Code Online (Sandbox Code Playgroud)

成:

public event EventHandler ErrorChanged;
Run Code Online (Sandbox Code Playgroud)

  • 丹尼尔是对的.通过不使用event关键字,您正在做的是创建一个公共字段的EventHandler委托的实例.这在C#代码中几乎可以使用相同的方式,但如果您不使用+ =或 - =来订阅或取消订阅,它将允许您覆盖订阅它的所有事件处理程序.event关键字只允许您在事件本身上添加(+ =)或删除( - =). (2认同)