从列表中删除用户控件包含用户控件以及表单

时间:2015-02-18 13:36:39

标签: c# winforms user-controls

我有一个包含用户控件的列表(List<myUserControl>

并将控件从List<myUserControl>添加到TableLayoutPanel

现在,当用户选择任何myUserControl并点击删除按钮(位于我的表单上)时,我想Dispose/remove来自Form的用户控件。

我能够Dispose/remove来自我的表单的用户控件,但不知道如何从列表List<myUserControl>

中删除它

如何将选定的userControl与我的列表中的userControl匹配

1 个答案:

答案 0 :(得分:0)

这主要取决于您如何识别所选的UserControl。然后在识别UserControl后,您可以通过

删除它
tableLayoutPanel1.Controls.Remove(userControl);
myUserControls.Remove(userControl);

例如,我创建了一个UserControl,我保留一个bool,以便在用户点击它时将其标识为已选中。

bool isClicked = false;
    public bool IsClicked
    {
        get
        {
            return isClicked;
        }
        set
        {
            isClicked = value;
            if (value) BackColor = Color.Green;
            else BackColor = Color.Blue;
        }
    }

然后在表格上

public partial class Form1 : Form
{
    List<MyUserControl> myUserControls = new List<MyUserControl>();
    public Form1()
    {
        InitializeComponent();
        for (int i = 0; i < 4; i++) addNewUserControl();
    }

    void addNewUserControl()
    {
        MyUserControl userControl = new MyUserControl();
        userControl.Click += userControl_Click;
        myUserControls.Add(userControl);
        tableLayoutPanel1.Controls.Add(userControl);
    }

    void userControl_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < myUserControls.Count; i++) myUserControls[i].IsClicked = false;
        ((MyUserControl)sender).IsClicked = true;
    }

    private void buttonDelete_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < myUserControls.Count; i++)
            if (myUserControls[i].IsClicked)
            {
                MyUserControl userControl = myUserControls[i];
                tableLayoutPanel1.Controls.Remove(userControl);
                myUserControls.RemoveAt(i);
                userControl.Dispose();                
            }

    }
}

在这里,我通过循环搜索选定的UserControl并从表单和列表中删除它并将其处理