按名称检索文本框
本文关键字:文本 检索 | 更新日期: 2023-09-27 17:50:44
在我的项目中,我知道动态生成的TextBoxes
的名称,是否有任何解决方案可以从其他方法检索此TextBox
文本。在另一种意义上,我想通过名称获得TextBox
,并希望在代码的其他部分使用。我把TextBox
分配成这样…
private void Met(string rowNo)
{
TextBox t2 = new TextBox();
t2.Name = "itemAmt" + rowNo;
PurchaseItemEntryDyPanel.Controls.Add(t2);
}
除了使用name还有其他方法吗?有解决方案吗?
当我想从表单中读取发布的数据时,我个人使用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;
}
如果你不愿意做这样的改变,请查看之前发布的解决方案。
你可以像这样从Controls
的表单集合中获得TextBox
:
var myTextBox = this.Controls[textBoxName];
您没有显示太多代码,但我假设您将其添加到窗体上的控件集合中。否则,当您的方法结束时,在Met
中创建的TextBox
将超出作用域,就像任何其他局部变量一样。
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;
在class中使用:
foreach (Control tempCtrl in this.Controls)
{
// Determine he control is textBox1,
if (tempCtrl.Name == "itemAmt" + rowNo)
{
this.Controls.Remove(tempCtrl);
}
}