2012-01-16 12 views
0

私はCheckListBoxをC#で持っており、ボックス内のチェックステートの1つが変更されたときにイベントをトリガーしようとしています。イベントの目的は、RichTextBoxを変更することです。CheckListBox内のCheckState値のいずれかが変更されたときにイベントをトリガーする方法

私はこのコードを持っていますが、何らかの理由でチェックボックスの1つがチェックボックスからチェックされていない場合にのみイベントをトリガーします。 成功したコードで何が間違っているのか調べようとしました。 助けていただければ幸いです。

private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     //If the checkstate changed, update price 
     //It updates price only when the state turns from Checked to Uncheck 
     if (e.NewValue != e.CurrentValue) 
      Update_rtbPrice(); 
    } 
+0

どのような言語ですか?適切なユーザー層に触れるには、質問を編集して適切なタグを追加する必要があります。少なくとも言語名を追加してください。あなたはまた、問題のタイトルを修正して、末尾の '>'を取り除くこともできました – Seki

答えて

1

問題はあなたのUpdate_rtbPrice()メソッドには間違いありません。それは、リストボックスのGetItemChecked()メソッドを意味のある処理を行うために呼び出さなければならず、イベントハンドラからメソッド呼び出しを行うときに問題になります。イベントが実行されるの後、項目チェック状態はまで変更されません。

回避策は、コントロールの状態が更新された後に実行されるようにコールを遅延させることです。このように:

private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e) { 
     this.BeginInvoke(new MethodInvoker(() => Update_rtbPrice())); 
    } 
+0

ありがとうございました...私はこの問題を一日中解決しようとしていました...私は決してそのことをしませんでした –

+0

いいキャッチです。彼はイベント中にその方法を呼び出すことについての反響については考えなかった。 – LarsTech

+0

おっと、+1を忘れました。 – LarsTech

関連する問題