c#动态增加控件并赋值

  for (int i = 0; i < t; i++)
            {
                textboxX.Name = "txtGoX" + i.ToString();
             }
//参数窗口
for (int i = 0; i < t; i++)
                {
                    idX = "X" + i.ToString();   
//怎么做
                }
//主窗口

现在写了两个窗口,参数窗口是通过point动态增加控件数量,现在可以对新建的控件及idx命名,如果我要在主窗口做一个变量,并将对应textbox(i)的值赋给idx(i),应该怎么实现

TextBox txtbox = new TextBox();
txtbox.Left = 10;
txtbox.Top = i * 20 + 10;
txtBox.Name = txtGoX + i.ToString();
MainForm.Controls.Add(txtbox);

方法1:遍历控件
foreach(control c in this.controls)
然后判断c的类型是textbox,就强制转换为textbox,然后拿到name属性,判断一下里面是不是你要的那个
方法2:维护一个List<TextBox>,每新增一个textbox就加进list里,这样就可以通过下标直接操作对应的textbox

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7687441
  • 这篇博客也不错, 你可以看下谁有用C#多线程多串口的程序详细范例呀?给我发一个,我发他200币以上,具体要求就是打开两个以上串口,能同时实时接收串口的信息,并显示在textbox上就好
  • 以下回答由chatgpt基于相关博客总结生成:

    可以通过以下步骤来实现动态增加控件数量并对每个新建的控件及其idx参数进行命名,同时将对应textbox的值赋给idx:

    1. 在主窗口中创建一个变量idx,作为控件的命名参数。
    int idx = 0;
    
    1. 添加一个按钮,当点击按钮时,动态增加控件数量。
    private void addButton_Click(object sender, EventArgs e)
    {
        // 创建新的控件,并将idx参数作为其名称
        TextBox newTextBox = new TextBox();
        newTextBox.Name = "textBox" + idx.ToString();
        newTextBox.Text = "Text Box " + idx.ToString();
        // 将控件加入主窗口
        this.Controls.Add(newTextBox);
        // 对idx参数进行自增
        idx++;
    }
    
    1. 在创建控件时,对其添加事件,使其在文本改变时自动将文本框的值赋给对应的idx。
    private void addButton_Click(object sender, EventArgs e)
    {
        // 创建新的控件并将idx参数作为其名称
        TextBox newTextBox = new TextBox();
        newTextBox.Name = "textBox" + idx.ToString();
        newTextBox.Text = "Text Box " + idx.ToString();
        // 添加事件当文本框的值改变时自动将文本框的值赋给idx
        newTextBox.TextChanged += (s, args) =>
        {
            TextBox textBox = (TextBox) s;
            int textBoxIdx = Int32.Parse(textBox.Name.Substring(7));
            idxValues[textBoxIdx] = textBox.Text;
        };
        // 将控件加入主窗口
        this.Controls.Add(newTextBox);
        // 对idx参数进行自增
        idx++;
    }
    
    1. 为了保存每个新建的控件的idx和对应的文本框的值,可以使用一个Dictionary来存储。
    Dictionary<int, string> idxValues = new Dictionary<int, string>();
    

    完整的代码示例:

    public partial class Form1 : Form
    {
        int idx = 0;
        Dictionary<int, string> idxValues = new Dictionary<int, string>();
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private void addButton_Click(object sender, EventArgs e)
        {
            // 创建新的控件并将idx参数作为其名称
            TextBox newTextBox = new TextBox();
            newTextBox.Name = "textBox" + idx.ToString();
            newTextBox.Text = "Text Box " + idx.ToString();
            // 添加事件当文本框的值改变时自动将文本框的值赋给idx
            newTextBox.TextChanged += (s, args) =>
            {
                TextBox textBox = (TextBox) s;
                int textBoxIdx = Int32.Parse(textBox.Name.Substring(7));
                idxValues[textBoxIdx] = textBox.Text;
            };
            // 将控件加入主窗口
            this.Controls.Add(newTextBox);
            // 对idx参数进行自增
            idx++;
        }
    
        private void printValuesButton_Click(object sender, EventArgs e)
        {
            string output = "";
            foreach (int key in idxValues.Keys)
            {
                output += "textBox" + key.ToString() + ": " + idxValues[key] + "\n";
            }
            MessageBox.Show(output);
        }
    }