在C#中使用动态创建的控件

时间:2011-01-12 04:56:39

标签: c# controls

我正在创建一个用户输入成绩的应用程序,程序将输出加权平均值。在加载时,它将询问分配的类别数。然后程序将动态创建文本框,供用户输入信息。问题是我无法弄清楚如何读取创建文本框后输入的文本。这是我的代码:

            TextBox txtbx = new TextBox();
            txtbx.Text = "";
            txtbx.Name = "txtbx1";
            txtbx.Location = new Point(10, 10);
            txtbx.Height = 20;
            txtbx.Width = 50;
            Controls.Add(txtbx);

如何更改此代码,以便在用户提交时可以在框中找到当前文本?

5 个答案:

答案 0 :(得分:13)

如果您正在动态生成控件,那么显然您将无法为每个控件创建一个字段。但是,如果您尝试访问控件集合以获取命名控件,则ControlCollection可以按名称编制索引。添加具有指定名称的文本框后,您只需执行以下操作:

TextBox txtbx = (TextBox)Controls["txtbx1"];

答案 1 :(得分:3)

您可以使用Page类的FindControl方法。

此方法采用一个参数,即TextBox的ID,您必须在创建时设置该参数:

txtbx.ID = "txtbx1";

然后你可以选择它:

TextBox txtbx1 = (TextBox)FindControl("txtbx1");

并使用它。


编辑:由于最初的问题补充说他正在引用Windows窗体,我上面的回复是偏离主题的。

在Windows窗体中,您应该只使用类成员变量而不是局部变量。 E.g:

public partial class MyForm
{
    ...

    private TextBox txtbx;

    ...

    private void createControls()
    {
        txtbx = new TextBox();
        txtbx.Text = "";
        txtbx.Name = "txtbx1";
        txtbx.Location = new Point(10, 10);
        txtbx.Height = 20;
        txtbx.Width = 50;
        Controls.Add(txtbx);
    }

    private void someOtherFunction()
    {
        // Do something other with the created text box.
        txtbx.Text = "abc";
    }
}

答案 2 :(得分:3)

此按钮上的动态添加文本框的代码单击

int count = 1;
public System.Windows.Forms.TextBox AddNewTextBox()
    {
        System.Windows.Forms.TextBox txt = new System.Windows.Forms.TextBox();
        this.Controls.Add(txt);
        txt.Top = count * 25;
        txt.Left = 100;
        txt.Text = "TextBox " + this.count.ToString();
        count = count + 1;
        return txt;
    }
private void Onbutton_Click(object sender, EventArgs e)
    {
      //Call the method AddNewTextBox that uses for Dynamically create Textbox
        AddNewTextBox();
    }

我希望这段代码可以帮到你。 谢谢 快乐编码:)

答案 3 :(得分:1)

保留表单上所有文本框的引用列表。动态创建时,将textBox引用添加到列表中。

然后,当您想要阅读其文本时,您可以简单地遍历列表中的所有文本框。

确保根据相关的类别名称命名文本框。然后,您还可以按名称在列表中查找控件。

class MyForm : Form
{
    IList<TextBox> _textBoxes = new List<TextBox>();

    private void AddTextBox(string categoryName){

        var myTextBox = new TextBox();
        myTextBox .Name = categoryName + "txtbx";

        // set other properties and add to Form.Controls collection

        _textBoxes.Add(myTextBox);
    }

    private TextBox FindTextBox(string categoryName)
    {
        return _textBoxes.Where( t => t.Name.StartsWith(categoryName)).FirstOrDefault();
    }
}

答案 4 :(得分:0)

你需要做的就是为你的提交按钮设置一个OnClick监听器并让它做这样的事情

private void OnSubmit(object sender, EventArgs args)
{
    string yourText = txtbx.Text;
}

创建后,您必须保留对文本框的引用。 yourText将包含您需要的值。希望这有帮助