在Windows窗体中按名称查找控件

我正在开发一个在运行时从XML文件添加对象(基本上是Windows Forms控件)的应用程序。应用程序需要访问已添加的对象。


这些对象将添加到面板或组框中。对于面板和组框,我具有Panel.Controls [“ object_name”]访问对象。仅当将对象直接添加到同一面板上时,这才有用。在我的情况下,主面板[pnlMain,我只能访问此面板]可能包含另一个面板,并且该面板[pnlChild]再次包含一个groupbox [gbPnlChild],而该groupbox包含一个按钮[button1,我想访问此按钮] 。我有以下方法:


Panel childPanel = pnlMain.Controls["pnlChild"];

GroupBox childGP = childPanel.Controls["gbPnlChild"];

Button buttonToAccess = childGP["button1"];

当认识父母时,上述方法很有用。在我的场景中,仅知道要访问的对象的名称[button1],而不是其父对象。那么,如何通过其名称访问此对象,而与它的父级无关?


是否有类似GetObject(“ objName”)之类的方法?


Smart猫小萌
浏览 1145回答 3
3回答

饮歌长啸

您可以使用表单的Controls.Find()方法来检索引用:        var matches = this.Controls.Find("button2", true);注意,这返回一个数组,控件的Name属性可能是模棱两可的,没有机制可以确保控件具有唯一的名称。您必须自己强制执行。

ABOUTYOU

 TextBox txtAmnt = (TextBox)this.Controls.Find("txtAmnt" + (i + 1), false).FirstOrDefault();当您知道自己在寻找什么时,此方法有效。
打开App,查看更多内容
随时随地看视频慕课网APP