Moin moin
Ich habe meinen "Menu-Styler", der in einigen meiner Programme verwendet wird, überarbeitet und erweitert, um ihn vielseitiger einsetzbar zu machen. Der neue Ansatz betrifft sowohl das MainMenuStrip als auch das ContextMenuStrip.
Der Code in der Windows-Form-Class ist dabei minimal gehalten, um eine einfache Integration zu ermöglichen. Die Farbanpassungen werden zentral in der MenuStylingConfig-Klasse vorgenommen, sodass Änderungen an den Menüfarben problemlos und an einer Stelle vorgenommen werden können.
Zusätzlich habe ich eine ContextMenuController-Klasse entwickelt, die für die Verwaltung und Verarbeitung der Kontextmenüoptionen zuständig ist. Diese Klasse kann flexibel auf die Anforderungen der Anwendung angepasst werden und bietet auch die Möglichkeit, ähnliche Funktionen für das MainMenu zu integrieren. So wird der gesamte Menü-Handling-Prozess vereinfacht und gleichzeitig die Flexibilität erhöht, verschiedene Menüs und deren Eigenschaften auf konsistente Weise zu steuern.
Kleine Code-Auszüge:
Spoiler anzeigen
Das ganze bereinigte Projekt in der angehängten Zip-Datei.
Kommentare, Verbesserungen und Feedbacks lese ich gerne.
Ansonsten allen einen schönen "Heilig Abend"
Verschoben. ~Thunderbolt
Ich habe meinen "Menu-Styler", der in einigen meiner Programme verwendet wird, überarbeitet und erweitert, um ihn vielseitiger einsetzbar zu machen. Der neue Ansatz betrifft sowohl das MainMenuStrip als auch das ContextMenuStrip.
Der Code in der Windows-Form-Class ist dabei minimal gehalten, um eine einfache Integration zu ermöglichen. Die Farbanpassungen werden zentral in der MenuStylingConfig-Klasse vorgenommen, sodass Änderungen an den Menüfarben problemlos und an einer Stelle vorgenommen werden können.
Zusätzlich habe ich eine ContextMenuController-Klasse entwickelt, die für die Verwaltung und Verarbeitung der Kontextmenüoptionen zuständig ist. Diese Klasse kann flexibel auf die Anforderungen der Anwendung angepasst werden und bietet auch die Möglichkeit, ähnliche Funktionen für das MainMenu zu integrieren. So wird der gesamte Menü-Handling-Prozess vereinfacht und gleichzeitig die Flexibilität erhöht, verschiedene Menüs und deren Eigenschaften auf konsistente Weise zu steuern.
Kleine Code-Auszüge:
VB.NET-Quellcode
- Public Class FrmMain
- Public Sub New()
- InitializeComponent()
- MainMenuStyler.Instance.ApplyStyleToAllMenuStrips(Me)
- ContextMenuStyler.Instance.ApplyStyleToContextMenu(ContextMenuStrip1)
- ' Event-Handler für Menüoptionen hinzufügen
- AddHandler ContexMenuController.Instance.MenuOptionSelected, AddressOf OnMenuOptionSelected
- ' Gemeinsamen Click-Handler für alle Menüeinträge zuweisen
- ContexMenuController.Instance.AssignHandlersToMenuItems(ContextMenuStrip1.Items)
- End Sub
- ' Button zum testen des Context-Menu
- Private Sub BtnContextMenu_Click(sender As Object, e As EventArgs) Handles BtnContextMenu.Click
- Dim button As Button = DirectCast(sender, Button)
- Dim buttonLocation As Point = button.PointToScreen(New Point(0, button.Height))
- ' ContextMenuStrip anzeigen
- ContextMenuStrip1.Show(buttonLocation)
- End Sub
- ' Callback für Menüoptionen
- Private Sub OnMenuOptionSelected(options As ContexMenuController.MenuOptions)
- ContexMenuController.Instance.ProcessMenuOption(options)
- End Sub
- End Class
VB.NET-Quellcode
- Public Class MenuStylingConfig
- ' Singleton-Instanz
- Public Shared ReadOnly Property Instance As New MenuStylingConfig()
- ' Allgemeine Farben
- Public Property ForeColor As Color = Color.DeepSkyBlue
- Public Property BackgroundColor As Color = Color.FromArgb(50, 50, 50)
- Public Property HoverColor As Color = Color.FromArgb(100, 100, 100)
- Public Property ItemBackgroundColor As Color = Color.FromArgb(60, 60, 60)
- Public Property BorderColor As Color = Color.Transparent
- Private Sub New()
- End Sub
- End Class
VB.NET-Quellcode
- Public Class ContexMenuController
- Public Shared ReadOnly Property Instance As New ContexMenuController()
- Public Event MenuOptionSelected As Action(Of MenuOptions)
- ' Enum für Menüoptionen
- Public Enum MenuOptions
- None
- Option1
- Option2
- Option3
- Option4
- End Enum
- ' Methode zur Verarbeitung der Optionen
- Public Sub ProcessMenuOption(options As MenuOptions)
- Select Case options
- Case MenuOptions.Option1
- MessageBox.Show("Option 1 ausgewählt")
- Case MenuOptions.Option2
- MessageBox.Show("Option 2 ausgewählt")
- Case MenuOptions.Option3
- MessageBox.Show("Option 3 ausgewählt")
- Case MenuOptions.Option4
- MessageBox.Show("Option 4 ausgewählt")
- Case Else
- MessageBox.Show("Keine gültige Option ausgewählt")
- End Select
- End Sub
- ' Gemeinsamer Click-Handler für alle Menüeinträge
- Private Sub ContextMenuItem_Click(sender As Object, e As EventArgs)
- Dim menuItem As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem)
- ' Dictionary für die Zuordnung von Namen zu Optionen
- Dim menuOptionMapping As New Dictionary(Of String, MenuOptions) From {
- {"ContextItem_1", MenuOptions.Option1},
- {"SubItem_1_1", MenuOptions.Option2},
- {"SubItem_1_2", MenuOptions.Option3},
- {"ContextItem_2", MenuOptions.Option4}
- }
- ' Überprüfen, ob der Name des Items im Mapping vorhanden ist
- If menuOptionMapping.ContainsKey(menuItem.Name) Then
- RaiseEvent MenuOptionSelected(menuOptionMapping(menuItem.Name)) ' Verwendung von RaiseEvent
- Else
- RaiseEvent MenuOptionSelected(MenuOptions.None) ' Wenn kein passender Name gefunden wurde
- End If
- End Sub
- ' Methode zum Zuweisen des Click-Handlers für alle Menüeinträge
- Public Sub AssignHandlersToMenuItems(items As ToolStripItemCollection)
- For Each item As ToolStripItem In items
- If TypeOf item Is ToolStripMenuItem Then
- Dim menuItem As ToolStripMenuItem = DirectCast(item, ToolStripMenuItem)
- ' Zuweisen des gemeinsamen Click-Handlers
- AddHandler menuItem.Click, AddressOf ContextMenuItem_Click
- ' Rekursive Zuweisung für Untermenüs
- If menuItem.HasDropDownItems Then
- AssignHandlersToMenuItems(menuItem.DropDownItems)
- End If
- End If
- Next
- End Sub
- End Class
Das ganze bereinigte Projekt in der angehängten Zip-Datei.
Kommentare, Verbesserungen und Feedbacks lese ich gerne.
Ansonsten allen einen schönen "Heilig Abend"
Verschoben. ~Thunderbolt
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()