2016-12-09 9 views
0

これは実現したいコードです。 (たぶん、それは正しくないのですか???実現することはできません)HOW:パラメータを持たないSystem.Actionに変数を渡してください

var buttons = this.buttons; 
for (int i = 0; i < buttons.Length; ++i) 
{ 
    var button = buttons[i]; 
    // I want to pass current button to onClick, 
    // but onClick is a delegate with no param just like System.Action. 
    button.onClick += OnClick; 
} 

void OnClick(Button button) 
{ 
    // Do something 
} 

答えて

2

あなたはラムダを使用してイベントを転送することができます。これは世界で最も美しいものではありません。 () => OnClick(button);を使用して、ボタンのonClickイベントに登録することができます。このラムダは、0のパラメータを持つvoidデリゲートであり、アクションと同様に、onClickイベントの購読に使用できます。

ローカル変数buttonの値をとり、イベントが呼び出されたときにのみ呼び出されるラムダで使用します。

あなたの行は次のようになります。あなたの答えのためのbutton.onClick +=() => OnClick(button);

+0

感謝を。しかし、ラムダを使うと、** onClick **イベントからラムダを取り除く方法がわかりません。実際には、私はこの問題を解決する最良の解決策があるかどうかを見極めています。 – Lukye

関連する問題