按名称检索文本框

本文关键字:文本 检索 | 更新日期: 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的解决方案,或者,如果控件可能被添加到GroupBoxPanel,你也会想要搜索所有的子控件:

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