0

チェックボックスで構成されるユーザーコントロールがあります。フォームにこれらのユーザーコントロールが4つあります。ユーザーがユーザーコントロールのチェックボックスのいずれかをクリックしたときに、他のユーザーコントロールがチェックされていないことを確認する必要があります。チェックボックスとイベントを使用する必要があることを除いて、ラジオボタンの動作と同じです。

4

4 に答える 4

3

簡単な方法は、esのすべてのイベントに単一のメソッドを使用し、次のようにオブジェクトCheckBoxを悪用することです。sender

List<CheckBox> listCheckBoxes;

checkBox1.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
checkBox2.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
checkBox3.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
checkBox4.CheckedChanged += new EventHandler(checkBox_CheckedChanged);

listCheckBoxes = this.Controls.OfType<CheckBox>().ToList();

void checkBox_CheckedChanged(object sender, EventArgs e){
    CheckBox checkBox = (CheckBox)sender;
    if(checkBox.Checked){
        foreach(CheckBox c in listCheckBoxes){
            if(c.Checked && c != checkBox)
               c.Checked = false;
        }
    }
}
于 2013-02-12T19:24:57.400 に答える
1

イベントハンドラーは通常、フォーム(またはカスタムコンテナー)のメソッドです。通常、そのレベルの他のコントロールについて知っています。カスタムコントロール自体でそのイベントハンドラーを実行しようとすると、コントロールを他のコントロールに結び付けるため、問題が発生します。

このロジックを実行するためのイベントハンドラーを持つある種のコンテナーコントロールを使用する方が適切な設計になります。そのイベントハンドラーはClick、各チェックボックスのイベントに追加されます。

于 2013-02-12T19:10:29.667 に答える
1

コントロールを1つにまとめますUserControl。1つのCheckBoxコントロールでイベントが発生すると、残りのコントロールの一般的なトグルイベントが発生しCheckBoxます。

于 2013-02-12T19:10:59.550 に答える
0

OK、私が正しいと仮定しているなら。フォームに4つのユーザーコントロールがあり、何らかのイベントで互いに通信する必要があります(あなたの場合、ユーザーコントロールの1つのチェックボックスによって引き起こされるイベントです)

サブスクライバー/パブリッシャー モデルを実装します。
Usercontrol-A (パブリッシャー) で 1) チェックボックスをクリックしてイベントを発生させ、これを共通のイベント関数に転送します

usercontrol を含むページ クラスは、UsercontrolA のイベントをサブスクライブし、必要に応じてそれを Usercontrol B (サブスクライバー) に転送します。

詳細については、 http://www.codeproject.com/Articles/15550/How-to-invoke-events-across-User-Controls-in-ASP-Nを参照してください。

于 2013-02-12T20:20:07.967 に答える