フォームのカスタム コントロールの一部として CheckBox があります。Validating イベントを処理して、最大 5 つのチェックボックスがオンになっていることを確認します。すでに 5 にチェックが入っている場合は、イベントをキャンセルします。これは見事に機能します。
ただし、5 つのチェックボックスにチェックを入れると、すべてのイベントがキャンセルされます (最初にチェックされた CheckBox のチェックを外す場合を除く)。これは、ボタンの押下、テキスト ボックスのフォーカス、コンボ ドロップダウン、およびアプリケーションの終了が機能していないことを意味します。送信者オブジェクトは依然として CheckBox です。なぜそれがトリガーされているのかわかりません。
何かを行うたびにチェックボックスの Validating イベントがトリガーされるのはなぜですか? (チェックボックスコントロールをクリックしたときにのみトリガーされると思っていたでしょう)。「検証中」イベントを使用するのは正しいアプローチですか?
その他の奇妙な点: 5 番目のチェックボックスを選択または選択解除すると、そこにイベント ハンドラーがあるにもかかわらず、イベントが処理されません。同じチェックボックスが 4 番目または 6 番目のチェックボックスである場合、検証イベントがトリガーされます。
私のコード:親フォーム内:
private List<MyCustomClass> GetSelectedItems()
{
List<MyCustomClass> result = new List<MyCustomClass>();
foreach (MyCustomClass c in listOfControls)
{
if (c.Selected())
{
result.Add(c);
}
}
return result;
}
private void validate(object sender, CancelEventArgs e)
{
if (GetSelectedItems().Count == 5)
{
e.Cancel = true;
}
}
MyCustomClassのSelected
メソッドは、単に chkBox.Checked を返します。