簡體   English   中英

復選框中的C#

[英]Check boxes in C#

如何動態檢查框而不激活檢查更改功能? 我有20個動態創建的復選框,我有一個下拉列表,用於確定要檢查的復選框數。

如果我選中3並單擊第6個復選框,則應選中復選框9,7和8.在此過程中,我不想觸發checkchanged功能。

CheckBox cb1 = (CheckBox)sender;
selectedbox = int.Parse(cb1.Name);

for (int i = 1; i < selectedquantity; i++)
{
    premiumticket[selectedbox].Checked = true; 
    //here check changed firing  i dont want that
    selectedbox++;
}

當狀態發生變化時,您無法阻止CheckBox觸發事件。 考慮在您不需要時取消訂閱活動:

for (int i = 0; i < selectedquantity; i++)
{
     premiumticket[selectedbox + i].CheckedChanged -= checkBox_CheckedChanged;
     premiumticket[selectedbox + i].Checked = true;
     premiumticket[selectedbox + i].CheckedChanged += checkBox_CheckedChanged;
}

如果您不需要,可以使用一些標志來省略事件處理:

flag = false;

for (int i = 0; i < selectedquantity; i++)    
     premiumticket[selectedbox + i].Checked = true;         

flag = true;

在處理程序中:

private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    if (!flag)
       return;

    //...
}

我無法看到真正的解決方案如何不發射事件。 您可以使用 - =禁用該事件,然后使用+ =再次添加它。

 checkBox.CheckedChanged -= checkBox_CheckedChanged;
 checkBox.Checked = true;
 checkBox.CheckedChanged += checkBox_CheckedChanged;

這樣做的一大不足之處在於,如果您希望在更新值時有一次此事件,則必須手動觸發事件。

我寧願在類中設置一個標志,並在更新代碼中檢查此標志。

刪除附加的事件,然后在更改檢查后將其附加:

{
    cb1.CheckedChanged -= new EventHandler(cb1_CheckedChanged);
    premiumticket[selectedbox].Checked = true;
    cb1.CheckedChanged += new EventHandler(cb1_CheckedChanged);
}



private void cb1_CheckedChanged(object sender, EventArgs e)
{
                // Some COde
}

重新訂閱(取消訂閱/訂閱)技術不是很好,因為你必須處理每個事件處理程序,使其通用,添加標志等。

真正簡單的做法是使用另一個事件 - Click - 只需檢查用戶對控件的更改:

    private void checkBox1_Click(object sender, EventArgs e)
    {
        checkBox2.Checked = checkBox1.Checked;
        checkBox3.Checked = false;
    }
    private void checkBox2_Click(object sender, EventArgs e)
    {
        // this is not called when you set "Checked" programmatically
    }

很明顯,如果以編程方式更改,您需要實現不同的模式,實際對數據執行某些操作(保存或對更改做出反應)。 在上面的示例中,單擊checkBox2將運行處理程序,例如,您將某些內容保存到配置中,而設置checkBox2.Checked = true ,當單擊checkBox1 ,則不會。

它可能會發生,對於某些CheckBox ,你只會使用Click ,對於其他人來說 - 只有CheckedChanged

暫無
暫無

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

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