获取动态创建的文本框的价值

时间:2015-02-02 11:17:51

标签: c# winforms dynamic textbox

我现在有点蠢,我创建了一些代码,创建了4个文本框,并在运行时将它们添加到表格布局中(下面的代码),但我正在努力获取文本从它,我尝试从它string s = TxtBox1.Text.ToString();获取它的值,但它只是获得一个空引用,然后我尝试txt.Text.ToString();,这只是从最后创建的文本框中获取文本。 / p>

   private void button2_Click(object sender, EventArgs e)
    {
        int counter;
        for (counter = 1; counter <= 4; counter++)
        {
            // Output counter every fifth iteration
            if (counter % 1 == 0)
            {
                AddNewTextBox();
            }
        }
    }

    public void AddNewTextBox()
    {
        txt = new TextBox();
        tableLayoutPanel1.Controls.Add(txt);
        txt.Name = "TxtBox" + this.cLeft.ToString();
        txt.Text = "TextBox " + this.cLeft.ToString();
        cLeft = cLeft + 1;
    }

我已经全神贯注地寻找答案了,但是如果有人有任何想法我会感激不尽。

由于

3 个答案:

答案 0 :(得分:6)

此代码从tableLayoutPanel1中选择textbox1,将其从Control转换为TextBox并获取Text属性:

string s = ((TextBox)tableLayoutPanel1.Controls["TxtBox1"]).Text;

如果你需要它们,那么迭代文本框:

string[] t = new string[4];
for(int i=0; i<4; i++)
    t[i] = ((TextBox)tableLayoutPanel1.Controls["TxtBox"+(i+1).ToString()]).Text;

答案 1 :(得分:2)

你可以尝试

    var asTexts = tableLayoutPanel1.Controls
            .OfType<TextBox>()
            .Where(control => control.Name.StartsWith("TxtBox"))
            .Select(control => control.Text);

这将枚举tableLayoutPanel1的所有子控件的Text值,其类型为TextBox,其名称以“TxtBox”开头。 您可以选择放宽过滤器,删除OfType行(不包括任何非TextBox控件)或Where行(仅允许控件名称与您的示例匹配)。

确保

    Using System.Linq;

在文件的开头。 问候, 丹尼尔。

答案 2 :(得分:1)

    public void AddNewTextBox()
    {
        txt = new TextBox();
        tableLayoutPanel1.Controls.Add(txt);
        txt.Name = "TxtBox" + this.cLeft.ToString();
        txt.Text = "TextBox " + this.cLeft.ToString();
        cLeft = cLeft + 1;
        txt.KeyPress += txt_KeyPress;
    }


    private void txt_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {
        //the sender is now the textbox, so that you can access it
        System.Windows.Forms.TextBox textbox = sender as System.Windows.Forms.TextBox;
        var textOfTextBox = textbox.Text;
        doSomethingWithTextFromTextBox(textOfTextBox);
    }