0

c# に CheckListBox があり、ボックス内のチェック状態の 1 つが変更されるたびにイベントをトリガーしようとしています。イベントの目的は、いくつかの RichTextBox を変更することです。

私はこのコードを持っていますが、何らかの理由で、チェックボックスの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();
    }
4

1 に答える 1

1

問題は間違いなく Update_rtbPrice() メソッドにあります。何か意味のあることを行うには、リスト ボックスの GetItemChecked() メソッドを呼び出す必要があります。これは、イベント ハンドラーからメソッド呼び出しを行う場合に問題になります。イベントが実行されるまでアイテムのチェック状態は変化しません。

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

    private void clbAllRooms_ItemCheck(object sender, ItemCheckEventArgs e) {
        this.BeginInvoke(new MethodInvoker(() => Update_rtbPrice()));
    }
于 2012-01-16T18:00:42.857 に答える