【问题标题】:Create controls dynamically动态创建控件
【发布时间】:2011-06-10 19:22:15
【问题描述】:

我想知道这在 c# winform 中是否可行。

按下按钮时创建控件并将其放置在给定位置。

我觉得可以这样

private TextBox txtBox = new TextBox();
private Button btnAdd = new Button();
private ListBox lstBox = new ListBox();
private CheckBox chkBox = new CheckBox();
private Label lblCount = new Label();

但问题出在每次按下按钮时都会创建同名控件。如何避免这种情况

什么大...... 我写了,我期待它没有例外,因为控件已经包含btnAdd,而不是尽可能多的按钮创建你想要的。 访问它们会出现问题,但会通过@drachenstern 方法解决,对吗?

  private void button1_Click_1(object sender, EventArgs e)
        {
            Button btnAdd = new Button();

            btnAdd.BackColor = Color.Gray;
            btnAdd.Text = "Add";
            btnAdd.Location = new System.Drawing.Point(90, 25+i);
            btnAdd.Size = new System.Drawing.Size(50, 25);
            this.Controls.Add(btnAdd);
            i = i + 10;
        }

【问题讨论】:

    标签: c# controls dynamic


    【解决方案1】:

    您可以尝试我在here 发布的解决方案。它将在构造函数中动态创建 5 个按钮。只需将代码移动到按钮单击事件,它就会动态添加按钮并注册Click 事件。

    【讨论】:

      【解决方案2】:
      int currentNamingNumber = 0;
      
      txtBox.Name = "txtBox" + currentNamingNumber++;
      

      冲洗,重复。

      给每个元素一个唯一的数字名称,让您找出已创建的元素数量(请注意,您不想通过递减来跟踪所有创建的对象,因为这样您可能会创建两个具有相同名称的元素) .

      我不认为你可以将你想要的名称传递给新函数,但你总是可以在创建它之后设置名称。

      【讨论】:

        【解决方案3】:

        听起来您正在寻找List<TextBox>

        【讨论】:

        • 好的,然后我们可以像对待真正的文本框一样对待它,就像它的所有属性事件等一样
        • @Afnan:它一个真正的文本框。
        • @Drach:Name 无关紧要。
        • 是的,我真的希望我必须读取一个文本文件并根据文件中的行数生成复选框
        • 就像当我们调用控件时,我们通过它的名字来做。
        猜你喜欢
        • 2011-06-27
        • 2016-12-31
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 2011-04-29
        • 2019-12-12
        • 2010-11-18
        相关资源
        最近更新 更多