1

わかりました、私はすでに次のような別の関数にパラメータとして関数を渡します:

someFunction(..., passFunc);
passFunc(){ MessageBox.Show("Message"); }
private void someFunction(..., Func<int> f) { f(); }

これは問題なく機能します。「passFunc」を「someFunction」にパラメーターとして渡し、このパラメーター(「f()」)を呼び出します。次に、「メッセージ」というテキストのメッセージボックスを取得しました。Ok。

それ以降のバージョンのプログラムでは、特定のボタンをクリックすると関数「passFunc」が呼び出されます...次にテキストを取得したいと思います。私は通常これを行います:((Button)sender).Text;。しかし、この場合、この「passFunc」にパラメーターがないため、これを行うことはできません。

これどうやってするの?したがって、その「passFunc」は次のようになります。passFunc(object sender, EventArgs e)

その後、私はこれを行うことができます:

passFunc(object sender, EventArgs e)
{
    MessageBox.Show(((Button)sender).Text);
}

ここにコードがあります:http://pastie.org/6079188

4

2 に答える 2

1

関数に入力を渡したい場合は、次のジェネリック型のオーバーロードを使用します。

Func<string, int> passFunc

編集:

passFuncあなたはこのように呼びます

passFunc("some input");

EDIT2:

passFunc(object sender, EventArgs e)Funcは、おそらくvoid returnタイプであるため、使用できません。次に、を使用する必要がありますAction<object, EventArgs>

于 2013-02-06T13:08:50.173 に答える
0

そのボタンのイベント ハンドラに passFunc をサブスクライブしませんか? これは次のように button1.Click += new EventHandler(passFunc) なり、passFunc は次のようになります。

void passFunc(object sender, EventArgs e)
{
     MessageBox.Show((sender as Button).Text); 
}

これがまさにあなたが達成したいことかどうかはわかりませんが、うまくいくかもしれません。

于 2013-02-06T13:01:49.640 に答える