2013-03-20 17 views
5

VS2012デザイナーに問題があります。私は設計したユーザコントロールを持っており、その中には、ユーザがIPv4、IPv6、またはDNSを入力するためのテキストボックス(とりわけ)があります。そのテキストを有効なもの(TextChangedイベント)として主プログラムに報告する必要がありました。次のコードを考えてみましょう:C#カスタムユーザーコントロールでカスタムイベントを認識できません

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を介して通信しようとしていますか? (私はちょうど不思議です) –

+0

はい、私は思います。 Modbus RTU over TCP/IP –

答えて

7

あなたがイベントとして宣言されていない変更

:へ

public EventHandler ErrorChanged; 

public event EventHandler ErrorChanged; 
+2

ダニエルが正しいです。あなたがしていることは、eventキーワードを使用しないことによって、パブリックフィールドであるEventHandlerデリゲートのインスタンスを作成することです。これはC#コードでも同じように動作しますが、+ =または - =を使用してサブスクライブまたはサブスクライブしない場合は、サブスクライブしているすべてのイベントハンドラをオーバーライドできます。イベントキーワードは、イベント自体にのみ追加(+ =)または削除( - =)することができます。 –

+1

ah facepalm。どうもありがとうございます。 –

関連する問題