【问题标题】:C# How to remove dynamically created controls in switchC#如何在switch中删除动态创建的控件
【发布时间】:2015-08-04 10:46:57
【问题描述】:

好的,所以在我的 switch(comboBox1.SelectedIndex)case 1 中它会动态创建一些标签和组合框并将它们添加到 tabPage1,但我想要那些动态创建的控件选择案例2时删除

public void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (comboBox2.SelectedIndex)
            {
                case 0:
                    {
                        //do nothing.
                        break;
                    }
                case 1:
                    {
                        Label label16 = new Label();
                        tabPage1.Controls.Add(label16);
                        label16.Left = 465;
                        label16.Top = 111;
                        label16.Text = "Time:";
                        label16.Size = new Size(60, 13);

                        ComboBox comboBox13 = new ComboBox();
                        tabPage1.Controls.Add(comboBox13);
                        comboBox13.Left = 533;
                        comboBox13.Top = 108;
                        comboBox13.Size = new Size(104, 21);
                        comboBox13.DropDownStyle = ComboBoxStyle.DropDownList;

                        comboBox13.DisplayMember = "Text";
                        comboBox13.ValueMember = "Value";
                        var ComboBox13Items = new[] { 
                        new { Text = "1 Second", Value = "1" }, 
                        new { Text = "2.5 Seconds", Value = "2.5" }, 
                        new { Text = "5 Seconds", Value = "5" },
                        new { Text = "7.5 Seconds", Value = "7.5" },
                        new { Text = "10 Seconds", Value = "10" }
                        };
                        comboBox13.DataSource = ComboBox13Items;
                        break;
                    }
                case 2:
                    {
                        foreach (Control TimeLabel in tabPage1.Controls.OfType<Controls>())
                        {
                            if (TimeLabel.Name == "label16")
                                tabPage1.Controls.Remove(TimeLabel);
                        }

                        foreach (Control TimeComboBox in tabPage1.Controls.OfType<Controls>())
                        {
                            if (TimeComboBox.Name == "comboBox13")
                                tabPage1.Controls.Remove(TimeComboBox);
                        }

                        break;
                    }

我还尝试将OfType&lt;Controls&gt; 更改为OfType&lt;Label&gt;OfType&lt;ComboBox&gt;,仍然没有运气:/

【问题讨论】:

  • 是否创建一次控件并根据所选索引将它们设置为可见或隐藏选项?
  • 您的创建代码没有使用名称创建它们。代码名称实际上并没有填充到控件的“名称”中,因此它不会匹配它们,因为所有名称都是空白的
  • @cdsln 好吧...这是个好主意,谢谢
  • @BugFinder 哦,非常感谢,我不知道我怎么忘记了,现在已经修复了

标签: c# switch-statement controls dynamic-controls


【解决方案1】:
Label label16 = new Label();
                        tabPage1.Controls.Add(label16);
                        label16.Left = 465;
                        label16.Top = 111;
                        label16.Text = "Time:";
                        label16.Size = new Size(60, 13);

不创建名为“label16”的按钮,而是创建一个未命名的按钮。

你需要添加

labal16.Name = "label16";

名称应该是唯一的,如果可能会添加多个集合,请保留一个计数器或其他东西,并使用计数器来制作一个唯一的名称。

【讨论】:

  • 是的,效果很好,但现在的问题是当我想使用comboBox13.SelectedValue 时,它说The name 'comboBox13' does not exist in the current context,所以我无法从动态创建的组合框中获取值..?跨度>
  • 当然可以,但是,comboBox 是一个临时名称,就像女性如果不想被告知她们正在成长的婴儿的性别,就会给她们的颠簸命名。你有没有给你的组合框命名.. 一次只有 1 个这样的框,还是可以有多个?
猜你喜欢
  • 2011-01-02
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多