Formular-Kontextmenü über Variable ansprchen. (Enable = True oder Fasle)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von VBuchner.

    Formular-Kontextmenü über Variable ansprchen. (Enable = True oder Fasle)

    Hallo Leute , irgentwie komm ich nicht mehr weiter.
    Beschreibung: ich hole mir den (Name) des Steuerelement aus einer Datenbank z.B. "btnTest" jetzt kann ich den Button über

    VB.NET-Quellcode

    1. frmMain.Controls(vb_name_steuerelement).Enabled = True

    Soweit so gut, dies funktioniert auch super!

    Jetzt hab ich aber auch ein Kontextmenü im Formular. Wie z.B.: Extras mit Untermenüs-> Menu1,Menu2,Menu3

    Ich schaff es nicht diese Menüs über eine Variable anzusprchen und die Eigenschaft Enable zu ändern!

    Ich weiß nicht mehr weiter anscheinend funktioniert hier "Controls" nicht!

    Bitte um eure hilfe!!
    Kleines Beispiel

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. For Each Ctrl As Control In Me.Controls
    3. If Ctrl.Name = "Dein_Name_Aud_Der_DatenBank" Then
    4. Ctrl.Enabled = False
    5. Ctrl.Visible = False
    6. ' usw....
    7. End If
    8. Next
    9. End Sub

    Wenn sich all deine Menüs in der Form direkt befinden, also in Me. dann kannst du die alle durchlaufen.
    Befinden die Sich in einem Panel oder sonstwo, setzt das

    VB.NET-Quellcode

    1. In Panel1.Controls
    Dann läufst du halt Zufuß da durch

    VB.NET-Quellcode

    1. Dim Menge As Integer = ContextMenuStrip1.Items.Count - 1
    2. For i = 0 To Menge
    3. MessageBox.Show(Me.ContextMenuStrip1.Items(i).Name)
    4. Next

    Halt das ganze noch Recursive.

    Oder mal sehen ob es eine Collection givt.
    Klicke im Form-Editor auf das KontextMenü, es wird die Prozedur Menü_Open() oder so angelegt. Dort kannst Du Deine Enables schalten.
    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!

    Danke Leute für eure Hilfe! Ich habs jetzt so gelöst!

    VB.NET-Quellcode

    1. Private Function SetMenuItem(ByVal name As String, ByVal enabled As Boolean)
    2. Dim m As ToolStripMenuItem
    3. m = Me.FindToolStripMenuItem(Me.MenuStrip1.Items, name)
    4. If m IsNot Nothing Then
    5. m.Enabled = enabled
    6. Return True
    7. Else
    8. Return False
    9. End If
    10. End Function
    11. Private Function FindToolStripMenuItem(ByRef menus As ToolStripItemCollection, ByVal name As String) As ToolStripMenuItem
    12. Dim found As Boolean = False
    13. Dim t, temp As ToolStripMenuItem
    14. t = menus(name)
    15. If t Is Nothing Then
    16. Dim i As Integer = 0
    17. While Not found And i < menus.Count
    18. If menus(i).GetType Is GetType(ToolStripMenuItem) Then
    19. temp = menus(i)
    20. t = Me.FindToolStripMenuItem(temp.DropDownItems, name)
    21. found = (t IsNot Nothing)
    22. End If
    23. i += 1
    24. End While
    25. End If
    26. Return t
    27. End Function