2013-03-20 98 views
5

我在VS2012设计器遇到问题。我有一个我设计的用户控件,它是一个文本框(其中包括)用户输入IPv4,IPv6或DNS的位置。我需要验证该文本是否有效(TextChanged事件)报告回主程序。请看下面的代码:C#Designed不能识别自定义用户控件中的自定义事件

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

然后我的事件处理程序添加到主程序设计师(控制名称为“COM”):

this.Com.ErrorChanged += new System.EventHandler(this.Com_ErrorChanged); 

我的问题是,虽然该代码的工作原理完全正如我想要的那样,设计师认为没有ErrorChanged事件。它报告的确切消息是

“类型‘ModbusCom.Communications’没有名为 ‘ErrorChanged’事件。”

我可以忽略错误并且设计器显示窗体ok。我可以运行这个程序,一切都很好,但是不得不一直告诉它忽略这个问题。有什么我可以解决这个问题吗?帮助表示赞赏!

+0

你实际上是试图通过Modbus通信? (我只是想知道) – 2013-03-20 14:49:03

+0

是的,我是。通过TCP/IP的Modbus RTU – 2013-03-20 14:53:25

回答

7

您还没有宣布它作为一个事件

变化:

public EventHandler ErrorChanged; 

到:

public event EventHandler ErrorChanged; 
+2

丹尼尔是正确的。通过不使用event关键字,您正在创建一个公共字段的EventHandler委托实例。这与C#代码中的方法几乎一样,但如果您不使用+ =或 - =来订阅或取消订阅,它将允许您覆盖所有订阅它的事件处理程序。事件关键字只允许您在事件本身上添加(+ =)或删除( - =)。 – 2013-03-20 14:44:54

+1

啊facepalm。非常感谢。 – 2013-03-20 14:49:26