チェックボックスで構成されるユーザーコントロールがあります。フォームにこれらのユーザーコントロールが4つあります。ユーザーがユーザーコントロールのチェックボックスのいずれかをクリックしたときに、他のユーザーコントロールがチェックされていないことを確認する必要があります。チェックボックスとイベントを使用する必要があることを除いて、ラジオボタンの動作と同じです。
4 に答える
簡単な方法は、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;
}
}
}
イベントハンドラーは通常、フォーム(またはカスタムコンテナー)のメソッドです。通常、そのレベルの他のコントロールについて知っています。カスタムコントロール自体でそのイベントハンドラーを実行しようとすると、コントロールを他のコントロールに結び付けるため、問題が発生します。
このロジックを実行するためのイベントハンドラーを持つある種のコンテナーコントロールを使用する方が適切な設計になります。そのイベントハンドラーはClick
、各チェックボックスのイベントに追加されます。
コントロールを1つにまとめますUserControl
。1つのCheckBox
コントロールでイベントが発生すると、残りのコントロールの一般的なトグルイベントが発生しCheckBox
ます。
OK、私が正しいと仮定しているなら。フォームに4つのユーザーコントロールがあり、何らかのイベントで互いに通信する必要があります(あなたの場合、ユーザーコントロールの1つのチェックボックスによって引き起こされるイベントです)
サブスクライバー/パブリッシャー モデルを実装します。
Usercontrol-A (パブリッシャー) で 1) チェックボックスをクリックしてイベントを発生させ、これを共通のイベント関数に転送します
usercontrol を含むページ クラスは、UsercontrolA のイベントをサブスクライブし、必要に応じてそれを Usercontrol B (サブスクライバー) に転送します。