1

パネルには 10 個のラベルがあり、10 個の同一の ClickEvents (BackColor を変更) があります。
どうすればコードを減らすことができますか、つまり、一般的な手順を書くことができますか?
何かのようなもの:

foreach (Control c in panelA.Controls)
if (c.Tag == "abc" && c.is clicked)
c.BackColor = Color.Crimson;
4

4 に答える 4

3

各ボタンを同じイベント ハンドラーに配線できませんか?

button1.Click += ChangeBackColor;
button2.Click += ChangeBackColor;
...
button10.Click += ChangeBackColor;

private void ChangeBackColor(object sender, EventArgs e)
{
    Control control = (Control)sender;
    control.BackColor = Color.Crimson;
}
于 2012-06-22T17:17:53.220 に答える
3

各ラベルのクリック イベントを同じイベント ハンドラーに割り当ててから、イベント ハンドラーで送信者オブジェクトを調べることができます。どのラベルがクリックされたかがわかります。

private void OnLabelClick(object sender, EventArgs e)
{
    var label = sender as Label;
    if(label != null)
        label.BackColor = Color.Crimson;
}
于 2012-06-22T17:18:40.467 に答える
3

ラベルを反復処理し、ハンドラーを Click イベントに接続します。

foreach (Control c in panelA.Controls)
{
    c.Click += HandleClick;
}

次に、クリック ハンドラーでsender、クリックが行われたラベルを含むパラメーターを使用して背景色を変更できます。

private void HandleClick(object sender, EventArgs e)
{
    ((Control)sender).BackColor = Color.Crimson;
}
于 2012-06-22T17:21:14.430 に答える
2

送信者を使用して:

次のようなことを試してください:

private void label_Click(object sender, EventArg e){
  ((Label)sender) = ..your code
}
于 2012-06-22T17:19:15.303 に答える