2010-12-06 20 views
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を返します。

答えて

0

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

+0

「CheckBoxの入力」とはどういう意味ですか? – Smashery

+0

このチェックボックスをクリックすると、 '!chkBox.Checked'の値を受け取ります... – IAbstract

+0

' chkBox.Checked'の既存のチェックボックスをすべて調べて、 'Checked' 'true'の場合、' CancelEventArgs.Cancel'を 'false'に設定します。 – Smashery

関連する問題