|
■No75929 (よぽん さん) に返信
> ちなみに、今調べてたんですけど、以下の1行でできるみたいな
それは別の情報かと。
> ContentRendered += (s, e) => { MessageBox.Show("ContentRendered", "TEST"); };
ContentRendered は、WPF で用いられるイベントの一つですね。
右辺の (s, e) 以降は『ラムダ式』と呼ばれる記述です。
> 使い方教えてくださぁい。
以下に、『Form1 の Click イベント』を記述する例を 8 パターン挙げておきます。
よぽんさんが書かれたコードは、下記の「パターンC2」に相当する記述ですね。
// パターンA1:EventHandler デリゲートのインスタンスを割り当てる
private void Form1_Load(object sender, EventArgs e)
{
this.Click += new EventHandler(Form1_Click);
}
void Form1_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
// パターンA2:デリゲート型の指定を省略
private void Form1_Load(object sender, EventArgs e)
{
this.Click += this.Form1_Click;
}
void Form1_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
// パターンB1:匿名メソッドを割り当てる
private void Form1_Load(object sender, EventArgs e)
{
this.Click += delegate(object o, EventArgs arg)
{
MessageBox.Show("Test");
};
}
// パターンB2:匿名メソッドで引数指定を省く
private void Form1_Load(object sender, EventArgs e)
{
this.Click += delegate
{
MessageBox.Show("Test");
};
}
// パターンC1:単一行ラムダ式を割り当てる
private void Form1_Load(object sender, EventArgs e)
{
this.Click += (object o, EventArgs arg) => MessageBox.Show("Test");
}
// パターンC2:単一行ラムダ式で型推論を用いる
private void Form1_Load(object sender, EventArgs e)
{
this.Click += (o, arg) => MessageBox.Show("Test");
}
// パターンD1:複数行ラムダ式を割り当てる
private void Form1_Load(object sender, EventArgs e)
{
this.Click += (object o, EventArgs arg) =>
{
var s = "Test";
MessageBox.Show(s);
};
}
// パターンD2:複数行ラムダ式で型推論を用いる
private void Form1_Load(object sender, EventArgs e)
{
this.Click += (o, arg) =>
{
var s = "Test";
MessageBox.Show(s);
};
}
|