2016-05-28 19 views
-1

私は、フォームに複数のユーザーコントロールを持つフォームを持っています。C#メソッドを呼び出す

私は次のように割り当てた

Switch.armySwitchCloseButton.Click += armySwitchClose; 

それらのインスタンスのいずれかが押されたときに、私は次のメソッドを呼び出す:

void armySwitchClose(object sender, EventArgs e) 

を上記の方法は、追加のコードの束を持っていますそれはここでは必要ない。

ここで私がする必要があるのは、すべてのインスタンスからこの機能を呼び出す別のボタンです。

どうすればいいですか?

多くのおかげ

+0

ユーザコントロールの1つをクリックしたときに 'armySwitchClose'関数を実行するだけでいいですか? – whymatter

+0

usercontrolには3つのボタンがあります。その閉じるボタンは私が模倣しようとしている。 閉じるボタンをクリックすると、タブコントロール内のタブページを閉じる関数が実行されます。 –

+0

すべての閉じるボタンでこのメソッドを実行できますか?閉じるボタンはどのように作成されますか?あなたはrumtimeでそれらを作成しますか? – whymatter

答えて

0

は、各ユーザーコントロールのコンストラクタでは、あなたが呼び出し、次にこの方法 無効armySwitchClose(オブジェクト送信者、EventArgsの電子に)

を実行する方法を知っているいくつかのオブジェクトの同じインスタンスを渡すことができますこのメソッドは、各イベントメソッド内では、例:

Public Class UserControl(){ 
    private MakeEvent makeEvent; 
    Public MyClass(MakeEvent makeEvent) 
    { 
     this.makeEvent = makeEvent; 
     Switch.armySwitchCloseButton.Click += armySwitchClose; 
    } 

    void armySwitchClose(object sender, EventArgs e) 
    { 
     makeEvent.armySwitchClose(sender,e); 
    } 
} 

Public Class MakeEvent() { 

    void armySwitchClose(object sender, EventArgs e) 
    { 
     //the real implementation 
    } 
} 

これはあなたの問題を解決します。


ああ、私はあなたの問題の間違ったを取得すると思う...あなたが1つのボタンでクリックすると他のUC内の他のすべてのイベントがトリガされなければならない、右?この問題は、ボタンUCでObserverパターン

Public Interface IObserver 
{ 
    void armySwitchClose(object sender, EventArgs e); 
} 

Public UserControl1: Observer 
{ 
    void armySwitchClose(object sender, EventArgs e) 
    { 
     //implementation UC1 
    } 
} 

Public UserControl2: Observer 
{ 
    void armySwitchClose(object sender, EventArgs e) 
    { 
     //implementation UC2 
    } 
} 

で解決することができます。フォームで

Public UserControlButton 
{ 
    private List<IObserver> observers; 
    public void addObserver(IObserver observer) 
    { 
     observers.Add(observer); 
    } 
    public void button_clickedEvent(object sender, EventArgs e) 
    { 
     foreach(IObserver observer in observers) 
     { 
      observer.armySwitchClose(object sender, EventArgs e); 
     } 
    } 
} 

あなたはaddObserverは、各ユーザーコントロールを追加呼び出すすべてのボタンと。

関連する問題