web-dev-qa-db-ja.com

送信者名イベントハンドラーを取得する

名前が私の質問に正義を与えることを願っています...それで、私はちょうど記憶ゲームを作り始めました、そして私がアイテムを表示するために使用している25のチェックボックスボタンがあります。

各ボタンが同じイベントハンドラーを使用している場合、EventArgsまたはObjectのいずれかから、どのボタンから送信されたかを知る方法があるかどうか疑問に思いました。

private void checkBox_CheckedChanged(object sender, EventArgs e)
    {
        checkBox = Code which will determine what checkBox sent it.
        if (checkBox.Checked)
        { Box.ChangeState(checkBox, true); }
        else { Box.ChangeState(checkBox, false);}
    }
6
Mathias

チェックボックスを定義するときに各チェックボックスのName属性を設定してから、((CheckBox)sender).Nameを使用して個々のチェックボックスを識別してみてください。

定義時間:

CheckBox chbx1 = new CheckBox();
chbx1.Name = "chbx1";
chbx1.CheckedChanged += checkBox_CheckedChanged;
CheckBox chbx2 = new CheckBox();
chbx2.Name = "chbx2";
chbx2.CheckedChanged += checkBox_CheckedChanged;
CheckBox chbx3 = new CheckBox();
chbx3.Name = "chbx2";
chbx3.CheckedChanged += checkBox_CheckedChanged;

そして

private void checkBox_CheckedChanged(object sender, EventArgs e)
    {
        string chbxName = ((CheckBox)sender).Name;
        //Necessary code for identifying the CheckBox and following processes ...
        checkBox = Code which will determine what checkBox sent it.
        if (checkBox.Checked)
        { Box.ChangeState(checkBox, true); }
        else { Box.ChangeState(checkBox, false);}
    }
11
Vahid Nateghi

送信者オブジェクトは、実際にはイベントを開始したコントロールです。適切なタイプにキャストして、そのすべてのプロパティにアクセスできます。記載されているようにNameを使用することも、Tagプロパティを使用することもあります。ただし、この場合、送信者をCheckBoxにキャストするだけで機能するはずです。

private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox cb = (CheckBox)sender;
    if (cb.Checked)
    { Box.ChangeState(cb, true); }
    else { Box.ChangeState(cb, false); }
}
2
Mark Hall