在我的项目中,我知道动态生成的TextBoxes
的名称是否有任何解决方案可以从其他方法中检索此TextBox
文本。在其他意义上,我希望得到TextBox
名称,并希望在代码的其他部分使用。
我TextBox
这样分配了......
private void Met(string rowNo)
{
TextBox t2 = new TextBox();
t2.Name = "itemAmt" + rowNo;
PurchaseItemEntryDyPanel.Controls.Add(t2);
}
除了使用名字之外还有什么方法吗?任何解决方案?
答案 0 :(得分:3)
当我想从表单中读取发布的数据时,我个人使用name
。
当控件应该是唯一的时候我会使用Id
。所以代码有点不同:
var t2 = new TextBox();
t2.ID = "itemAmt" + rowNo;
//since you mention in the comments, add it to the panel
yourPanel.Controls.Add(t2);
然后获取textBox值
var controlId = "itemAmt" + rowNo;
var t2 = ((TextBox)(yourPanel.FindControl(controlId)));
if(t2 != null)
{
//do someting
//t2.Text = "something";
//t2.Enabled = true;
}
如果您不愿意进行更改,请查看之前发布的解决方案。
答案 1 :(得分:2)
您可以从Controls
表格中获取TextBox
的{{1}}这个名称,如下所示:
var myTextBox = this.Controls[textBoxName];
答案 2 :(得分:1)
您没有显示太多代码,但我假设您将其添加到表单上的控件集合中。否则,当您的方法结束时,您在TextBox
中创建的Met
超出范围,就像任何其他本地变量一样。
private void Met(string rowNo)
{
TextBox t2 = new TextBox();
t2.Name = "itemAmt" + rowNo;
this.Controls.Add(t2); // need to add the TextBox to your form's controls
}
然后您可以使用Selman22的解决方案,或者,如果控件可能会添加到GroupBox
或Panel
,您也需要搜索所有子控件:
var myControl = this.Controls.Find("itemAmt4", true);
if (myControl != null)
myControl.Enabled = true;
答案 3 :(得分:0)
在班级中使用此项:
foreach (Control tempCtrl in this.Controls)
{
// Determine he control is textBox1,
if (tempCtrl.Name == "itemAmt" + rowNo)
{
this.Controls.Remove(tempCtrl);
}
}