簡體   English   中英

Windows C#CheckedListBox Checked Item事件處理

[英]Windows C# CheckedListBox Checked Item Event Handling

我目前正在開發一個Window應用程序,它使用CheckedListBoxes來實現程序的某些方面。 我遇到的一個問題是,我一直在嘗試查找項目被選中時觸發了哪個事件,這樣我就可以在選中任何列表項時啟用表單按鈕。

問題是我嘗試使用以下內容;

private void clbAvailMods_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if(e.NewValue == CheckState.Checked)
        {
            btnInstall.Enabled = true;
        }
    }

但是當我在if語句上設置斷點時,它永遠不會在檢查列表框中的項目時觸發。

我在這里做錯了嗎?

標准的Windows Forms技巧是延遲運行代碼,直到所有事件副作用都完成。 您使用Control.BeginInvoke()方法延遲運行代碼。 這將解決您的問題:

    private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) {
        this.BeginInvoke(new MethodInvoker(evalList), null);
    }

    private void evalList() {
        bool any = false;
        for (int ix = 0; ix < checkedListBox1.Items.Count; ++ix) {
            if (checkedListBox1.GetItemChecked(ix)) {
                any = true;
                break;
            }
        }
        btnInstall.Enabled = any;
    }

您可以使用NewValue屬性手動更新CheckedItems.Count。 這是我用來僅在檢查至少一個項目時啟用按鈕的代碼:

private void checkedListBoxProds_ItemCheck(object sender, ItemCheckEventArgs e)
{
    this.buttonGenerar.Enabled = ((this.checkedListBoxProds.CheckedItems.Count + (e.NewValue == CheckState.Checked ? 1 : -1)) > 0);
}

一些潛在的陷阱。 據推測,您已經通過VS.Net GUI添加了該事件,以確保它被連接到控件中。 嘗試單擊項目兩次 - 一次為項目焦點,再次切換檢查狀態 - 如果您希望項目在第一次單擊時切換其檢查狀態,則將“CheckOnClick”屬性設置為true。

我認為這是SelectedIndexChanged事件,但我現在會確認。

編輯:SelectedIndexChanged事件確實有效。 但無論是否選中了復選框,都會觸發。 因此,如果你想這樣做,我會檢查檢查狀態。

但是,當我確實使用了ItemCheck事件時,當我實際檢查復選框而不僅僅是文本時,它確實觸發了。

我知道很久以前就已經回答了這個問題,但我發現只處理MouseUp和KeyUp事件更容易。 觸發這些事件時,CheckedItems.Count屬性是准確的。 因為它們都做同樣的事情,所以我創建了一個方法來處理工作並從兩個事件處理程序調用該方法。

private void clbFolders_KeyUp(object sender, KeyEventArgs e) { Update(); }
private void clbFolders_MouseUp(object sender, MouseEventArgs e) { Update(); }

private void Update()
{
    btnDelete.Enabled = clbFolders.CheckedItems.Count > 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM