Bonjour à tous,
Je cherche à proposer un choix de thèmes de couleur pour une application MDI.
Tout se passe bien sauf pour les menus pour lesquels je fais ça en deux étapes :
1°) Changer la couleur des textes en appelant la Sub suivante avec par exemple ForeColor = Color.White
2° Pour la couleur de fond de menu, j'utilise le code (trouvé sur le Net)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub ChangeMenuForeColor(ByVal Menu As MenuStrip, ByVal ForeColor As Color) For Each a As ToolStripMenuItem In Menu.Items a.ForeColor = ForeColor For Each b As Object In a.DropDownItems b.ForeColor = ForeColor Next Next End Sub
Et, dans le Form_Load du formulaire parent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Public Class MenuRendererDark Inherits ToolStripProfessionalRenderer Dim ColorUnsel As Color = Color.Black Dim ColorSel As Color = String2Color("FF2F2F2F") Protected Overloads Overrides Sub OnRenderMenuItemBackground(ByVal e As ToolStripItemRenderEventArgs) ' Item Color Dim rc As New Rectangle(Point.Empty, e.Item.Size) Dim c As Color = IIf(e.Item.Selected, ColorSel, ColorUnsel) Using brush As New SolidBrush(c) e.Graphics.FillRectangle(brush, rc) End Using End Sub Protected Overrides Sub OnRenderSeparator(ByVal e As ToolStripSeparatorRenderEventArgs) MyBase.OnRenderSeparator(e) Dim ColorBrush As Brush = New SolidBrush(ColorUnsel) ' Separator Background Dim backGround As New Rectangle(0, 0, e.Item.Width, e.Item.Height) e.Graphics.FillRectangle(ColorBrush, backGround) Dim blackLine As New Rectangle(32, 3, e.Item.Width - 32, 1) e.Graphics.FillRectangle(Brushes.Black, blackLine) Dim whiteLine As New Rectangle(32, 4, e.Item.Width - 32, 1) e.Graphics.FillRectangle(Brushes.White, whiteLine) End Sub End Class
La difficulté que je rencontre est le changement de ForeColor (étape 1) pour les items du menu Fenêtres au niveau de la liste des textes des formulaires enfants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part MENU_General.Renderer = New MenuRendererDark()
Les items "Mosaïque verticale"," Mosaïque horizontale" etc sont bien colorés comme je le souhaite mais les items au delà de "Fermer tout" restent en noir.
Pour moi le problème est que je voulais créer un thème noir
Quelqu'un aurait il une idée ?
Merci d'avance
Partager