2012-01-14 8 views
0

私は複数のコンポーネントを持つC#でGUIを作成しました。各コンポーネントには1つのボタンがあります。クリックされたボタンがどのコンポーネントであったのかを知りたい。私は最初からコンポーネントの数が分からないので、ユーザーが必要な場合に追加することができるので、名前を付けたり、名前を付けたりすることはできません。ありがとう!ボタンをクリックしたコンポーネントをトレースする方法

+1

WPFまたはWinForms? – StaWho

答えて

1

「コンポーネント」ごとに、ボタンのClickイベントに接続されている可能性があります。

この場合、イベントハンドラで "sender"パラメータを使用し、既知のコントロールツリー構造に基づいてそこから解決します。

void button_Clicked(object sender, EventArgs e) 
{ 
    var button = sender as Button; 
    var ownerControl = button.Parent as MyControl; // But you may need to walk up more levels if need be... Depends on your UI structure. 

    // Do stuff with button and owner control 
} 

いっそ、「バブル」あなたの「コンポーネント」からのイベント、それが独自のイベントですがありますように:

public event EventHandler ButtonClicked; 

protected virtual void OnButtonClicked() 
{ 
    var handler = ButtonClicked; 
    if (handler != null) 
    { 
     handler(this, EventArgs.Empty); 
    } 
} 

void button_Clicked(object sender, EventArgs e) 
{ 
    OnButtonClicked(); // Bubble the event 
} 

次に(すべての「コンポーネント」と)あなたの主制御します各生成されたアイテムのButtonClickedイベントにフックし、ハンドラのsenderパラメータからアイテムを直接見つけることができます。

0

イベントの作成を提案します。 Button各コンポーネントをクリックし、イベントハンドラ内の引数としてobject sender引数として使用します。

関連する問題