[英]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.