0

フォームのカスタム コントロールの一部として 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 を返します。

4

1 に答える 1

0

CheckBox の入力をどのように検証していますか? またはのいずれtruefalseです。そのチェックを他の状態と比較して、現在のチェック状態が有効かどうかを判断していますか?

于 2010-12-06T02:33:11.670 に答える