我正在创建一个用户输入成绩的应用程序,程序将输出加权平均值。在加载时,它将询问分配的类别数。然后程序将动态创建文本框,供用户输入信息。问题是我无法弄清楚如何读取创建文本框后输入的文本。这是我的代码:
TextBox txtbx = new TextBox();
txtbx.Text = "";
txtbx.Name = "txtbx1";
txtbx.Location = new Point(10, 10);
txtbx.Height = 20;
txtbx.Width = 50;
Controls.Add(txtbx);
如何更改此代码,以便在用户提交时可以在框中找到当前文本?
答案 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
将包含您需要的值。希望这有帮助