【问题标题】:how to add more labels according to the later input?如何根据后面的输入添加更多的标签?
【发布时间】:2014-03-27 06:24:19
【问题描述】:

我不知道是否清楚。我的意思是一个表单有一个输入文本框和一个按钮。如果我在文本框中输入 5 并单击按钮,表单将添加 5 个标签... 问题是我不知道是5还是4还是3……在代码运行和输入之前。

我不知道如何添加标签以及如何定义或获取它们的名称以便稍后在代码中使用它们。

我只是在学习使用 C# 用 VS 开发 Windows 应用程序.... 这也是我在stackoverflow中的第一个问题,如果不清楚,请原谅我。有没有人可以帮帮我?

【问题讨论】:

    标签: c# winforms visual-studio-2010 windows-applications


    【解决方案1】:

    让我们将您的整个问题分解为几个理解步骤:

    1. 您要问的,基本上是如何在 winform 中动态添加控件,在您的情况下,控件是标签,因此将标签创建逻辑包装在如下函数中:

      protected Label CreateLabel(string Id, string text)
      {
         Label lbl = new Label();
         lbl.Name = Id;
         lbl.Text = text;
         return lbl;
      }
      
    2. 现在您需要添加与在给定文本框中输入的数字以及单击按钮时一样多的标签,因此在按钮的单击事件中可能如下所示:

      protected void button_Clicked(object sender, EventArgs e)
      {
          //make sure nothing invalid string comes here
          int counter =  Convert.ToInt32(txtCount.text);
      
          for(int i=0;i<counter;i++)
          {
              var lbl = CreateLabel("rand"+i, "Label" +i);
              container.Controls.Add(lbl);//container can be your form
          }
      }
      
    3. 现在您将面临的winforms 中的基本问题是关于这些动态添加的标签的定位。最简单的方法是将标签添加到winforms FlowLayoutPanel。它会自动对齐控件。还有其他可用的布局控件。这样做:

      在表单上拖放一个 FlowLayoutPanel 并命名为“容器”,放心

    【讨论】:

    • Func&lt;string, Label&gt; CreateLabel = text =&gt; { ... };
    • 这正是我需要的,非常感谢
    【解决方案2】:

    例如:

    for(var i=0; i<N; i++ ) {
        var l= new Label();
        l.Text = "some name #" + i.ToString();
        l.Width = 200;
        l.Location = new Point(30, 20);
        parent.Controls.Add(l);
    }
    

    【讨论】:

      【解决方案3】:

      您可以将其用作:

          Label[] arrLabel;
          int num = 0;
          int.TryParse(textBox1.Text, out num);
          arrLabel = new Label[num];
          for (int i = 0; i < num; i++)
          {
              arrLabel[i] = new Label();
              arrLabel[i].Text = "Label #" + (i+1);
              arrLabel[i].Width = 20;
              arrLabel[i].Location = new Point(30+10*(i+1), 20);
              this.Controls.Add(arrLabel[i]);
          }
      

      【讨论】:

        猜你喜欢
        • 2022-07-26
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 2014-08-03
        • 2023-02-13
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        相关资源
        最近更新 更多