一尘不染

Find a control in Windows Forms by name

c#

I am working on an application which add objects (basically Windows
Forms
controls) at run time from
an XML file. The application needs to access the objects that have been added.

The objects are added in a panel or in a groupbox. For the panel and groupbox,
I have Panel.Controls[“object_name”] to access the objects. This is only
helpful when the object is directly added on the same panel. In my case the
main panel [pnlMain, I have access to this panel only] may contain another
panel and this panel [pnlChild] again contains a groupbox[gbPnlChild] and the
groupbox contains a button [button1, I want to access this button]. I have the
following method for this:

Panel childPanel = pnlMain.Controls["pnlChild"];
GroupBox childGP = childPanel.Controls["gbPnlChild"];
Button buttonToAccess = childGP["button1"];

The above method is helpful when parents are known. In my scenario, only the
name of the object is known that is to be accessed [button1] and not its
parents. So how do I access this object by its name, irrelevant of its parent?

Is there a method like GetObject(“objName”) or something similar?


阅读 176

收藏
2020-05-19

共1个答案

一尘不染

You can use the form’s Controls.Find() method to
retrieve a reference back:

        var matches = this.Controls.Find("button2", true);

Beware that this returns an array , the Name property of a control can be
ambiguous, there is no mechanism that ensures that a control has a unique
name. You’ll have to enforce that yourself.

2020-05-19