繁体   English   中英

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

[英]Using dynamically created controls in C#

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

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

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

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

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

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

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();
    }

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

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

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

txtbx.ID = "txtbx1";

然后你可以选择它:

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

并使用它。


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

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

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";
    }
}

保留表单上所有文本框的引用列表。 动态创建时,将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();
    }
}

您需要做的就是为您的提交按钮设置一个OnClick监听器,让它做类似的事情

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM