【问题标题】:Referring To Named Elements Created Programmatically?引用以编程方式创建的命名元素?
【发布时间】:2010-09-27 23:42:05
【问题描述】:

我有一个使用以下代码以编程方式创建的 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 在特定的单元格中,我可以根据它的单元格坐标抓取它吗?

【问题讨论】:

    标签: c# winforms richtextbox


    【解决方案1】:

    您应该能够通过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 ...
    

    编辑:请务必在使用前检查结果不为空,以防找不到控件。

    【讨论】:

      【解决方案2】:

      嗯...你确实实例化了 RichTextBox 并有一个可以使用的引用;在您的示例中称为“RT”。

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

      您可能想做的一件事是遍历控件树以查找具有您指定名称的控件。但如果你真的想这样做,你也可以这样做。

      【讨论】:

      • Randolpho,这非常有帮助,我将尝试实现您在此处描述的内容。谢谢!
      • @Randopho ~ 我认为寻找 Controls.Find('name',false) 正是该特定功能存在的原因。你为什么不把它用于那个目的?如果您要动态构建数千个控件,可能需要一些时间才能找到它,但我认为大多数表单不会包含超过几百个元素,所以走树(是的,我看到反射器确实显示了 @ 987654322@treewalk)不应该花那么长时间。
      • @drachenstern:让我用另一种方式告诉你:如果你正在构建一个包含大量记录的数据库表,并且知道你要搜索一个你知道会搜索的字段是唯一的,您不会在该字段上放置一个索引以便您可以更快地搜索吗?考虑我的Dictionary<string, RichTextBox> 就是这样一个索引。
      • @Randolpho ~ 定义sizable。我认为对于少于 [一些大量的] 控件,.Find() 方法足以完成手头的工作。我并不是说这不是一个有效的设计,但是这家伙在RTasdf 之间感到困惑。复杂和优雅是经验丰富的工具。我并不是说字典不会更快。我只是在问“什么足够快”?
      • @Randolpho ~ 谢谢,你知道好的设计点。如果我自己设计一个表单应用程序,我可能会做你所说的事情;)......就像他一样思考。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2017-06-08
      • 2015-12-28
      • 1970-01-01
      相关资源
      最近更新 更多