【问题标题】:Remove User control from a list contains User Control as well as from a Form从包含用户控件的列表以及从表单中删除用户控件
【发布时间】:2015-02-18 13:36:39
【问题描述】:

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

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

现在当用户选择任何myUserControl 并单击删除按钮(位于我的表单上)时,我想从我的FormDispose/remove 那个用户控件。

我可以从我的表单中 Dispose/remove 那个用户控件,但不知道如何从列表中删除它 List<myUserControl>

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

【问题讨论】:

  • 首先您必须确保在将控件添加到 TableLayoutPanel 时没有创建新实例。如果它们相同,我建议先从列表中删除,然后从 TableLayoutPanel 中删除,最后一步是 Dispose。 if (list.Contains(myControlInstance)) list.Remove(myControlInstance)

标签: c# winforms user-controls


【解决方案1】:

这主要取决于您如何识别选定的 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 并将其从表单中删除并列出并处理它

【讨论】:

  • 从列表中我对控件进行分组并向包含“myUserControl”控件的用户显示组。当用户点击删除按钮时,我逐组搜索以获取组中存在的所有 UserControl 并循环检查在组中选择了哪个用户控件,然后删除该控件,但是如何将该用户控件与我的列表中存在的用户控件匹配并将其从列表中删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多