代码之家  ›  专栏  ›  技术社区  ›  hellothere626262

使用C从动态创建的文本框和标签创建变量#

  •  0
  • hellothere626262  · 技术社区  · 8 年前

    我想使用指定的名称。从文本框输入名称,然后计算并输出到标签。

    不确定如何引用这些输入,因为它们当前有名称,但没有指定的变量。

    对不起,如果我没有太多的意义,我不是一个非常熟练的程序员。

    public partial class Form1 : Form
    {
        List<TextBox> Txt1 = new List<TextBox>();
        public Form1()
        {
           InitializeComponent();
    
           for (int i = 0; i < 4; i++)
           {
                for(int j = 0; j < 7; j++)
                {
                    if (j == 0)
                    {
                        var txtbox = new TextBox();
                        txtbox.Location = new Point(163 + (i * 220), (36));
                        txtbox.Name = i + "Names";
                        txtbox.Text = txtbox.Name;
                        txtbox.Width = 40;
                        this.Controls.Add(txtbox);                       
                    }
                    else if (j>0 && j<6)
                    {                      
                        var extratxt = new TextBox();
                        extratxt.Location = new Point(163 + (i * 220), (36+ 36 * j));
                        extratxt.Name = i + "Input" + j;
                        extratxt.Text = extratxt.Name;
                        extratxt.Width = 70;
                        this.Controls.Add(extratxt);
    
                        var percentbox = new Label();
                        percentbox.Location = new Point(163 + (90+ i * 220), (36 + 36 * j));
                        percentbox.Name = i + "Percent" + j;
                        percentbox.Text = percentbox.Name;
                        percentbox.Width = 50;
                        this.Controls.Add(percentbox);
    
                        var gradebox = new Label();
                        gradebox.Location = new Point(163 + (150 + i * 220), (36 + 36 * j));
                        gradebox.Name = i + "Grade" + j;
                        gradebox.Text = gradebox.Name;
                        gradebox.Width = 50;
                        this.Controls.Add(gradebox);
                    }
                    else
                    {
                        var totals = new Label();
                        totals.Location = new Point(163 + (i * 220), (36 + 36 * j));
                        totals.Name = i + "Total";
                        totals.Text = totals.Name;
                        totals.Width = 40;
                        this.Controls.Add(totals);
                        ...
                    }
                    ...
                }
            }
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Circle Hsiao    8 年前

    希望我能正确地理解你。
    基本上,您的困难在于如何按名称访问存储在动态创建控件列表中的实例,对吗?

    你可以用 .FirstOrDefault() 选择具有特定属性的实例。例如

    private void Form1_Load(object sender, EventArgs e)
    {
        List<TextBox> tbList = new List<TextBox>();
        for (int i = 0; i < 3; i++)
        {
            TextBox tb = new TextBox();
            tb.Text = "Test" + i.ToString();
            tb.Name = "TextBox" + (i + 1).ToString();
            tb.Location = new Point(0, 25 * i);
            tb.Tag = i;
            tbList.Add(tb);
            this.Controls.Add(tb);
        }
        var tb2 = tbList.FirstOrDefault(tb => tb.Name == "TextBox2");
        if (tb2 != null)
            tb2.Text = "Modified text";
    
        var sum = tbList.Sum(tb => (int)tb.Tag);
    }