Groupbox mit bestimmtem Namen anzeigen lassen

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Groupbox mit bestimmtem Namen anzeigen lassen

    Hallo Leute,

    ich möchte mir von vb jeweils eine bestimmte GroupBox anzeigen lassen, wenn deren Namen mit dem entsprechenden SelectedTreeNode.Text übereinstimmt.

    Hat jemand ne Idee?
    Hallo,

    über me.Controls kommst du auf die Steuerelementauflistung der Form.
    Ich würde mit einer For - Each - Schleife alle Controls durchlaufen und die
    entsprechenden Controls aus- bzw. einblenden die mit TVW.selectedNode.Name
    übereinstimmen ..
    Wenn Du Dir ein Dictionary dct mit den Knoten-Texten und den GroupBox-Instanzen machst, kannst Du Dir das sparen und mit dct.Key und dct.Value arbeiten.
    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!
    Dictionarys sind sicher die bessere Lösung, jedoch hab ich da auch keine Ahnung von ... hier mal meiner ...

    VB.NET-Quellcode

    1. For Each CTL As Control In Me.Controls
    2. If CTL.Name = "GroupBox" & ListBox1.Text Then
    3. CTL.Visible = True
    4. Else
    5. CTL.Visible = False
    6. End If
    7. Next
    Hallo!

    Ich hab den Code jetzt mal übernommen und für meinen TreeView angepasst:

    VB.NET-Quellcode

    1. For Each CTL As Control In Me.Controls
    2. If CTL.Name = "GroupBox" & TV.SelectedNode.Text Then
    3. CTL.Visible = True
    4. Else
    5. CTL.Visible = False
    6. End If
    7. Next


    Jetzt blendet er aber den kompletten TreeView aus, sobald ich irgendeinen Eintrag markiere. Dabei solte er bei Übereinstimmung ja eine Groupbox einblenden. Was mache ich falsch?

    edit: So, ich hab's jetzt, dass die Einblendung soweit funtioniert. Allerdings wechselt die GroupBox nicht, wenn ich einen anderen TreeNode selektiere.

    @Rod: Ich würde gern auch mal deine Idee mit den Ditionaries versuchen. Leider habe ich davon absolut keine Ahnung. Kannst du mir da vllt. etwas Starthilfe geben (bin absolut blutiger Anfänger ;) )?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „rosapluesch“ ()

    rosapluesch schrieb:

    Leider habe ich davon absolut keine Ahnung.
    Dazu ist es wohl noch etwas zu früh, das kriegen wir später.
    Mach aber mal aus Deinem Code einen Einzeiler:

    VB.NET-Quellcode

    1. For Each CTL As Control In Me.Controls
    2. CTL.Visible = (CTL.Name = "GroupBox" & TV.SelectedNode.Text)
    3. Next
    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!

    RodFromGermany schrieb:

    Zitat von »rosapluesch«
    Leider habe ich davon absolut keine Ahnung.

    Dazu ist es wohl noch etwas zu früh, das kriegen wir später.
    das befürchte ich auch :)

    RodFromGermany schrieb:

    Mach aber mal aus Deinem Code einen Einzeiler:


    VB.NET-Quellcode

    1. For Each CTL As Control In Me.Controls
    2. CTL.Visible = (CTL.Name = "GroupBox" & TV.SelectedNode.Text)
    3. Next


    Danke, aber :( das klappt leider auch nicht. Sobald ich dann auf einen TreeView-Eintrag klicke, dem noch keine GroupBox zugeordnet ist, verschwindet alles (TreeView, Labels, Buttons...)

    rosapluesch schrieb:

    das klappt leider auch nicht.
    Kann ich nicht beurteilen.
    Eines ist sicher, mein Code ist äquivalent zu Deinem, also tritt der von Dir beschriebene Effekt bei Deinem Code auch auf. :S
    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!
    Das ist doch derselbe Mechanismus wie oben:

    VB.NET-Quellcode

    1. MyGroupBox.Visible = False
    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!
    So, ich hab's hinbekommen. Aber jetzt taucht ein weiteres Problem auf. Wenn ich zwischen den Einträgen aus dem Treeview wechsel, dann wechselt zwar auch die GroupBox, aber sie hat keine Inhalte mehr. Buttons und PictureBoxen werden nur beim zuletzt erstellten Node angezeigt.

    Hilft mir bitte nochmal jemand?!

    rosapluesch schrieb:

    Aber My.GroupBox ist ja nicht definiert.
    Da ich Deinen Code nicht kenne, hab ich mir erlaubt, einen Namen frei zu erfinden. Den solltest Du durch den Deiner konkreten Box ersetzen.
    Da die Box ein Panel ist, werden selbstverständlich alle Controls innerhalb unsichtbar gemacht.
    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!
    Togglen:

    VB.NET-Quellcode

    1. MyGroupBox.Visible = Not MyGroupBox.Visible
    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!
    Tut mir leid, ich muss nochmal ganz blöd fragen:

    Ich habe euren For-Each-Vorschlag übernommen:

    VB.NET-Quellcode

    1. For Each CTL As Control In Me.Controls
    2. CTL.Visible = (CTL.Name = "gb_" & TV.SelectedNode.Text)


    Um den Rest sichtbar zu lassen, hab ich folgendes geschrieben:

    VB.NET-Quellcode

    1. TV.Visible = True
    2. MainMenuStrip.Visible = True
    3. Button1.Visible = True
    4. Button3.Visible = True
    5. Label1.Visible = True
    6. ButtonOpenAll.Visible = True
    7. ButtonCloseAll.Visible = True
    8. Next


    Nur beim zuletzt eingefügte Node werden die Buttons & Co. innerhalb der GroupBox angezeigt. Selektiere ich einen anderen Node, zeigt er zwar die richtige GroupBox, aber keine Buttons.
    Mach Dir mal ein kleines Testprogramm.
    Eine CheckBox und daneben eine GroupBox mit n Controls.
    In das CheckBox-Check-Change-Ereignis schreibst Du rein

    VB.NET-Quellcode

    1. GroupBox1.Visible = CheckBox1.Checked
    und beobachte, was passiert.
    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!