Control mit Namen Ansprechen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Control mit Namen Ansprechen

    vermeiden möchte ich am liebsten folgendes:


    VB.NET-Quellcode

    1. Private Sub AllControls(ByVal oContainer As Object, Optional ByVal bSubContainerAlso As Boolean = True)
    2. If Not IsNothing(oContainer) Then
    3. For Each oControl As Control In oContainer.Controls
    4. If bSubContainerAlso AndAlso oControl.Controls.Count > 0 Then
    5. AllControls(oControl)
    6. Else
    7. '****** Was mit dem Steuerelement gemacht werden soll
    8. End If
    9. Next
    10. End If
    11. End Sub


    In meinem Fall übergeb ich der Funktion die Form und lese dann rekursiv jedes einzelne Control aus:
    Also zb.
    Order1: Groupbox
    Order2: Groupbox2
    Order2.1: Listeirgendwas usw.
    Order2: Groupbox3 ...

    ===>>>> mein eigentliches Problem ist folgendes:
    ==> den Name des Controls habe ich:
    * List1
    * List2
    * List3
    dass weiß mein Programm auch schon (also die Namen sind bekannt und stehen von mir aus in einer Textbox (bei mir in eine rDatenbank)) ===> was ich will ist das Control direkt mit Namen ansprechen und auf das Control zugreifen, ohne erst die Rekursion nutzen zu müssen, weil die viel zu lange dauert!

    Direkten Programmmcode posten ist hier Quatsch, weils dann unübersichtlich wird und nicht die elementare Frage klärt.

    Ich steh aufm Schlauch :(

    VB.NET-Quellcode

    1. Public Shared _controls As New Dictionary(Of String, System.Windows.Forms.Control)
    2. Public Shared Sub AddControl(ByVal ctr As System.Windows.Forms.Control)
    3. _controls.Add(ctr.Name, ctr)
    4. End Sub
    5. 'Control mit Namen bekommen:
    6. For Each c In _controls 'hinzugefügte Controls durchgehen
    7. If c.Key = "gewünschter Name" Then
    8. 'c.Value.Irgendwas
    9. Exit For 'Schleife beeden
    10. End If
    11. Next c

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mario K.“ ()

    Mach es so, wie es im Designer vorgesehen ist.
    Und wenn Du Deine Controls im Code erstellst, sieh nach, wie es der Designer gemacht hätte und empfinde den Code nach. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich komm nicht auf nen Nenner irgendwie ^^

    Also der Name des DatagridView liegt als String vor, nämlich als Name des DatagridView ==> ich will es jetzt auslesen oder neu beschreiben ^^ ==> also ich will den String in ein Control wandeln (glaub ich)

    bastimw schrieb:

    also ich will
    Mach mal dies:

    VB.NET-Quellcode

    1. MessageBox.Show(Button1.Name)
    2. Button1.Name = Button1.Name & " bla"
    3. MessageBox.Show(Button1.Name)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Dim mein_grid_view as DataGridView
    2. Dim meine_cc As System.Windows.Forms.Form.ControlCollection = var
    3. Dim rueckgabe_array As Array = meine_cc.find("meingespeichertername", True)
    4. if rueckgabe_array.leght > 0 then
    5. mein_grid_view = rueckgabe_array(0)
    6. end if


    => Code sieht nach Murks aus, ist er bestimmt auch aber als Rückgabewert würde in dem Array das Element stehen
    => es funktioniert schnell und es funktioniert prima, im Prinzip hab ich das gesucht

    VB.NET-Quellcode

    1. Dim mein_grid_view as DataGridView
    2. Dim rueckgabe_array As Array = var.find("meingespeichertername", True)
    3. if rueckgabe_array.leght > 0 then
    4. mein_grid_view = rueckgabe_array(0)
    5. end if

    (gekürzt)

    var ist die System.Windows.Forms.Form.ControlCollection die ich der Funktion übergebe

    => beim Typ des Array sagt mir der Objektexplorer nur folgendes:
    Ein Array vom Typ System.Windows.Forms.Control, das die übereinstimmenden Steuerelemente enthält.
    => lenght gibt mir die Anzahl aller Elemente zurück > wo ist das Problem --> es wird nur eins enthalten
    Mittlerweile hast du schon die dritte Schreibweise von "length". Darauf wollte ich hinweisen, dass es falsch geschrieben war.

    Und hättest du "Option Strict On" an, dann würde es "Array" nicht annehmen. Wenn du "System.Windows.Forms.Control" willst, dann schreib auch so.