参考以编程方式创建的命名元素?

时间:2010-09-27 15:17:47

标签: c# winforms richtextbox

我使用以下代码以编程方式创建了RichTextBox:

RichTextBox RT = new RichTextBox();
RT.Name = "asdf";
RT.Text = "blah";

TableLayoutPanel.Controls.Add(RT,0,0);

现在假设我要修改RT的文本,它的名称是“asdf”,Visual Studio将不允许我编写asdf.Text =“haha”,因为asdf尚不存在。

如何专门抓取“asdf”并设置其文字?因为此RichTextBox位于特定单元格中,我可以根据其单元格坐标来获取它吗?

2 个答案:

答案 0 :(得分:2)

您应该可以通过TableLayoutPanel.Controls属性获取对它的引用,该属性返回TableLayoutControlCollection。该类提供了两种按名称查找控件的方法:Item propertyFind methodItem属性返回具有指定名称的控件,而Find方法返回控件集合。在这两种情况下,您都需要从Control投射到RichTextBox

var rt = (RichTextBox)myTableLayoutPanel.Controls.Item["asdf"];

// or

var rts = myTableLayoutPanel.Controls.Find("asdf", false);
foreach (var rt in rts)
    // (RichTextBox)rt ...

编辑:请确保在使用之前检查结果是否为空,以防万一找不到控件。

答案 1 :(得分:1)

嗯......你做了实例化RichTextBox并有一个你可以使用的引用;在你的例子中它被称为“RT”。

现在,您可能已经在方法中完成了这项操作,因此它是本地范围的,并且在您需要时不再可用。因此,您可以通过将其分配给您可以访问的某个成员来以某种方式保存该引用。如果你有很多这些并希望以某种方式按名称区分,你可能会将它粘贴到Dictionary<string, RichTextBox>中。或者你可以把它放在一些静态变量中;有很多选择,每个选项各有利弊。

您可能不想想要做的一件事是走控制树,寻找具有您指定名称的控件。但是你也可以这样做,如果你真的想。