パネルには 10 個のラベルがあり、10 個の同一の ClickEvents (BackColor を変更) があります。
どうすればコードを減らすことができますか、つまり、一般的な手順を書くことができますか?
何かのようなもの:
foreach (Control c in panelA.Controls)
if (c.Tag == "abc" && c.is clicked)
c.BackColor = Color.Crimson;
各ボタンを同じイベント ハンドラーに配線できませんか?
button1.Click += ChangeBackColor;
button2.Click += ChangeBackColor;
...
button10.Click += ChangeBackColor;
private void ChangeBackColor(object sender, EventArgs e)
{
Control control = (Control)sender;
control.BackColor = Color.Crimson;
}
各ラベルのクリック イベントを同じイベント ハンドラーに割り当ててから、イベント ハンドラーで送信者オブジェクトを調べることができます。どのラベルがクリックされたかがわかります。
private void OnLabelClick(object sender, EventArgs e)
{
var label = sender as Label;
if(label != null)
label.BackColor = Color.Crimson;
}
ラベルを反復処理し、ハンドラーを Click イベントに接続します。
foreach (Control c in panelA.Controls)
{
c.Click += HandleClick;
}
次に、クリック ハンドラーでsender
、クリックが行われたラベルを含むパラメーターを使用して背景色を変更できます。
private void HandleClick(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Crimson;
}
送信者を使用して:
次のようなことを試してください:
private void label_Click(object sender, EventArg e){
((Label)sender) = ..your code
}