DevTips.NET Logo

Je bent niet ingelogd. Login

Get control by name

jouw beoordeling:

Om een Control te krijgen via zijn naam is het handig om dit recursief op te lossen aangezien een Form uit vele container controls (of parent controls) kan bestaan (zoals TabControls, GroupBoxes, etc.). Control.Controls bevat alleen een collectie van child controls behorend bij het huidige Control. Op designtime is er nog een snellere manier aangezien je dan rechtstreeks gebruiker kunt maken van Form.Site.Container.Components. Maar op runtime is dat niet mogelijk zodat je genoodzaakt bent om een functie als hierboven te gebruiken. De aanroep van de functie is bijvoorbeeld als volgt: (waarbij "this" de huidige Form is)

Control controlToBeFound = ControlHelper.GetControlByName(this, "NameTextBox");

C#

public static System.Windows.Forms.Control GetControlByName(System.Windows.Forms.Control ParentControl,

    string Name)

{

    System.Windows.Forms.Control foundControl = null;

    int i = 0;

    while (foundControl == null && i < ParentControl.Controls.Count)

    {

        if (ParentControl.Controls[i].Name == Name) foundControl = ParentControl.Controls[i];

        else

        {

            if (ParentControl.Controls[i].Controls.Count > 0)

                foundControl = GetControlByName(ParentControl.Controls[i], Name); // recursive call

        } i++;

    } return foundControl;

}

  • Bijlagen: geen
  • Meer informatie:

Gepubliceerd op dinsdag 5 juni 2007 door Jeroen


Commentaar

Sander

Sander zei:

Ik heb de code wat geformatteerd t.b.v. de leesbaarheid. Je kunt ook opgemaakte code ook vanuit Visual Studio kopiëren als html met de add-in CopySourceAsHtml (www.jtleigh.com).

woensdag 6 juni 2007 8:47


Jeroen

Jeroen zei:

Bedankt voor de tip!

woensdag 6 juni 2007 9:37


Bavo

Bavo zei:

Dit voor ASP.NET: public static System.Web.UI.Control GetControlByName(System.Web.UI.Control ParentControl, string Name) { System.Web.UI.Control foundControl = null; int i = 0; while (foundControl == null && i < ParentControl.Controls.Count) { if (ParentControl.Controls[i].Name == Name) foundControl = ParentControl.Controls[i]; else { if (ParentControl.Controls[i].Controls.Count > 0) foundControl = GetControlByName(ParentControl.Controls[i], Name); // recursive call } i++; } return foundControl; }

donderdag 14 mei 2009 16:54


Bavo

Bavo zei:

Correctie: (Name bestaat niet op Web) public static System.Web.UI.Control GetControlByName(System.Web.UI.Control parentControl, string name) { System.Web.UI.Control foundControl = null; int i = 0; while (foundControl == null && i < parentControl.Controls.Count) { if (parentControl.Controls[i].ClientID == name) foundControl = parentControl.Controls[i]; else { if (parentControl.Controls[i].Controls.Count > 0) foundControl = GetControlByName(parentControl.Controls[i], name); // recursive call } i++; } return foundControl; }

donderdag 14 mei 2009 17:11




Reageer

Naam:

Jouw url (optioneel):

Commentaar:

HIP Voer de code in: