簡體   English   中英

檢查指定選中列表框中的所有項目 c#

[英]Check all items in a specified checked list box c#

我創建了一個顯示食品訂單的小型廚房展示程序。 因此,我動態創建了一個面板,其中包含一個表格布局面板,該面板包含一個選中的列表框和一個全選按鈕。 我的問題是......我在每個動態創建的表格布局面板中都有一個檢查所有按鈕,每次單擊它時,它都會檢查最后創建的CheckedListBox中的所有項目,而不是單擊的項目。

這是我的代碼:

p = new Panel();
p.Size = new System.Drawing.Size(360, 500);
p.BorderStyle = BorderStyle.FixedSingle;
p.Name = "panel";

tpanel = new TableLayoutPanel();
tpanel.Name = "tablepanel";

clb = new CheckedListBox();

tpanel.Controls.Add(b1 = new Button() { Text = "CheckAll" }, 1, 4);
b1.Name = "b1";
b1.Click += new EventHandler(CheckAll_Click);
b1.AutoSize = true;

private void CheckAll_Click(object sender, EventArgs e)
{

    var buttonClicked = (Button)sender;                        
    var c = GetAll(this, typeof(CheckedListBox));

    for (int i = 0; i < c.Count(); i++)
    {
        \\any help
    }
}

public IEnumerable<Control> GetAll(Control control, Type type)
{
    var controls = control.Controls.Cast<Control>();
    return controls.SelectMany(ctrl => GetAll(ctrl, type)).Concat(controls).Where(c => 
    c.GetType() == type);
}

首先我將描述結構
訂單 = TableLayoutPanel
TableLayoutPanel有 1 個CheckAll ButtonCheckListBox
當您單擊CheckAll Button時,您希望它會准確檢查當前TableLayoutPanel中的所有項目。
所以試試這段代碼

class XForm : Form {
    // create Dictionary to store Button and CheckListBox
    IDictionary<Button, CheckListBox> map = new Dictionary<Button, CheckListBox> ();

    // when you create new order (new TableLayoutPanel)
    // just add map Button and CheckListBox to map
    private void CreateOrder () {
        var panel = new Panel ();
        panel.Size = new System.Drawing.Size (360, 500);
        panel.BorderStyle = BorderStyle.FixedSingle;
        panel.Name = "panel";

        var table = new TableLayoutPanel ();

        var checklistBox = new CheckedListBox ();
        var button = new Button () { Text = "CheckAll" };

        table.Controls.Add (button, 1, 4);
        button.Name = "b1";
        button.Click += new EventHandler (CheckAll_Click);
        button.AutoSize = true;
        map[button] = checklistBox;
    }

    // and on event handle
    private void CheckAll_Click (object sender, EventArgs e) {
        var buttonClicked = (Button) sender;
        var c = map[buttonClicked];
        if (c == null) return;
        for (int i = 0; i < c.Items.Count; i++)
        {
            c.SetItemChecked(i, true);
        }
    }
}

並且不要在刪除訂單時將其從 map 中刪除。
希望能幫助到你

暫無
暫無

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

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