按名称检索TextBox

时间:2014-03-18 13:52:40

标签: c# winforms dynamic textbox

在我的项目中,我知道动态生成的TextBoxes的名称是否有任何解决方案可以从其他方法中检索此TextBox文本。在其他意义上,我希望得到TextBox名称,并希望在代码的其他部分使用。 我TextBox这样分配了......

private void Met(string rowNo)
{
    TextBox t2 = new TextBox();
    t2.Name = "itemAmt" + rowNo;
    PurchaseItemEntryDyPanel.Controls.Add(t2);

}

除了使用名字之外还有什么方法吗?任何解决方案?

4 个答案:

答案 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的解决方案,或者,如果控件可能会添加到GroupBoxPanel,您也需要搜索所有子控件:

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);
    }
}
相关问题