Farbe Menühintergrund ändern

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Farbe Menühintergrund ändern

    Hallo,

    ich versuche mich gerade daran, meiner Anwendung einen Darkmode zu verpassen. Soweit so gut, nur einige Dinge bekomme ich einfach nicht hin. So ändere ich in der Startform alle Hintergründe
    und Schriftarten, dass klappt auch sehr gut, aber beim Menu verzweifle ich. Ich kann die Farbe ändern, aber es wird einfach ignoriert. Woran kann das liegen?

    @RISSN mit welchem Code hast Du es denn bisher probiert?
    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 habe es erstmal ohne Code getestet und in den Eigenschaften eine Farbe festgelegt, es bleibt aber immer auf der Farbe die auf dem Bild
    zu sehen ist, egal welche Farbe ich auswähle. Beim DGV hatte ich das auch, da musste ich die Eigenschaft "EnableHeadersVisualStyle" auf False setzen. Gibt es so etwas
    in der Art auch für das Menustripe? Ich habe noch nichts gefunden.

    RISSN schrieb:

    Ich habe noch nichts gefunden.
    Oder hast Du gar nicht gesucht :?:
    Mit der Frage vb.net menustripe backcolor bringt bereits der erste Eintrag den Erfolg:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ' Designer-Code:
    2. Me.MenuStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. ToolStripMenuItem1.BackColor = Color.Yellow
    3. ToolStripMenuItem2.BackColor = Color.Red
    4. ToolStripMenuItem3.BackColor = Color.Lime
    5. ToolStripMenuItem4.BackColor = Color.Lime
    6. ToolStripMenuItem5.BackColor = Color.Lime
    7. ToolStripMenuItem6.BackColor = Color.LightPink
    8. ToolStripMenuItem7.BackColor = Color.LightPink
    9. ToolStripMenuItem8.BackColor = Color.LightPink
    10. End Sub

    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!
    Ein eigener ToolStripRenderer ist eine Möglichkeit.

    Beispiel:

    RendererDark

    VB.NET-Quellcode

    1. Public Class RendererDark
    2. Inherits ToolStripProfessionalRenderer
    3. Private ReadOnly ForeColor As Color
    4. Sub New(_colorTable As ProfessionalColorTable, _foreColor As Color)
    5. MyBase.New(_colorTable)
    6. ForeColor = _foreColor
    7. End Sub
    8. Protected Overrides Sub OnRenderItemText(e As ToolStripItemTextRenderEventArgs)
    9. e.TextColor = ForeColor
    10. MyBase.OnRenderItemText(e)
    11. End Sub
    12. Protected Overrides Sub OnRenderArrow(e As ToolStripArrowRenderEventArgs)
    13. e.ArrowColor = ForeColor
    14. MyBase.OnRenderArrow(e)
    15. End Sub
    16. Protected Overrides Sub OnRenderItemCheck(e As ToolStripItemImageRenderEventArgs)
    17. e.Item.Image = SetItemCheckImageColor(e.Image, ForeColor)
    18. MyBase.OnRenderItemCheck(e)
    19. End Sub
    20. Protected Overrides Sub OnRenderSeparator(e As ToolStripSeparatorRenderEventArgs)
    21. Using pen As New Pen(New SolidBrush(ForeColor), 1)
    22. If e.Vertical Then
    23. e.Graphics.DrawLine(
    24. pen,
    25. e.Item.Width \ 2,
    26. e.Item.Height \ 4,
    27. e.Item.Width \ 2,
    28. (e.Item.Height \ 2) + (e.Item.Height \ 4))
    29. Else
    30. e.Graphics.DrawLine(
    31. pen,
    32. e.Item.Height \ 2,
    33. e.Item.Width \ 4,
    34. e.Item.Height \ 2,
    35. (e.Item.Width \ 2) + (e.Item.Width \ 4))
    36. End If
    37. End Using
    38. End Sub
    39. Private Function SetItemCheckImageColor(_image As Image, _color As Color) As Image
    40. Dim returnBitmap As New Bitmap(_image)
    41. For y As Integer = 0 To returnBitmap.Height - 1
    42. For x As Integer = 0 To returnBitmap.Width - 1
    43. If returnBitmap.GetPixel(x, y).A <> 0 Then
    44. returnBitmap.SetPixel(x, y, _color)
    45. End If
    46. Next
    47. Next
    48. Return returnBitmap
    49. End Function
    50. End Class

    ColorTableDark

    VB.NET-Quellcode

    1. Friend Class ColorTableDark
    2. Inherits ProfessionalColorTable
    3. Public Overrides ReadOnly Property ButtonSelectedHighlight() As Color
    4. Get
    5. Return ButtonSelectedGradientMiddle
    6. End Get
    7. End Property
    8. Public Overrides ReadOnly Property ButtonSelectedHighlightBorder() As Color
    9. Get
    10. Return ButtonSelectedBorder
    11. End Get
    12. End Property
    13. Public Overrides ReadOnly Property ButtonPressedHighlight() As Color
    14. Get
    15. Return ButtonPressedGradientMiddle
    16. End Get
    17. End Property
    18. Public Overrides ReadOnly Property ButtonPressedHighlightBorder() As Color
    19. Get
    20. Return ButtonPressedBorder
    21. End Get
    22. End Property
    23. Public Overrides ReadOnly Property ButtonCheckedHighlight() As Color
    24. Get
    25. Return ButtonCheckedGradientMiddle
    26. End Get
    27. End Property
    28. Public Overrides ReadOnly Property ButtonCheckedHighlightBorder() As Color
    29. Get
    30. Return ButtonSelectedBorder
    31. End Get
    32. End Property
    33. Public Overrides ReadOnly Property ButtonPressedBorder() As Color
    34. Get
    35. Return ButtonSelectedBorder
    36. End Get
    37. End Property
    38. Public Overrides ReadOnly Property ButtonSelectedBorder() As Color
    39. Get
    40. Return Color.FromArgb(255, 80, 80, 80)
    41. End Get
    42. End Property
    43. Public Overrides ReadOnly Property ButtonCheckedGradientBegin() As Color
    44. Get
    45. Return Color.FromArgb(255, 60, 60, 60)
    46. End Get
    47. End Property
    48. Public Overrides ReadOnly Property ButtonCheckedGradientMiddle() As Color
    49. Get
    50. Return Color.FromArgb(255, 60, 60, 60)
    51. End Get
    52. End Property
    53. Public Overrides ReadOnly Property ButtonCheckedGradientEnd() As Color
    54. Get
    55. Return Color.FromArgb(255, 60, 60, 60)
    56. End Get
    57. End Property
    58. Public Overrides ReadOnly Property ButtonSelectedGradientBegin() As Color
    59. Get
    60. Return Color.FromArgb(255, 60, 60, 60)
    61. End Get
    62. End Property
    63. Public Overrides ReadOnly Property ButtonSelectedGradientMiddle() As Color
    64. Get
    65. Return Color.FromArgb(255, 60, 60, 60)
    66. End Get
    67. End Property
    68. Public Overrides ReadOnly Property ButtonSelectedGradientEnd() As Color
    69. Get
    70. Return Color.FromArgb(255, 60, 60, 60)
    71. End Get
    72. End Property
    73. Public Overrides ReadOnly Property ButtonPressedGradientBegin() As Color
    74. Get
    75. Return Color.FromArgb(255, 60, 60, 60)
    76. End Get
    77. End Property
    78. Public Overrides ReadOnly Property ButtonPressedGradientMiddle() As Color
    79. Get
    80. Return Color.FromArgb(255, 60, 60, 60)
    81. End Get
    82. End Property
    83. Public Overrides ReadOnly Property ButtonPressedGradientEnd() As Color
    84. Get
    85. Return Color.FromArgb(255, 60, 60, 60)
    86. End Get
    87. End Property
    88. Public Overrides ReadOnly Property CheckBackground() As Color
    89. Get
    90. Return Color.FromArgb(255, 40, 40, 40)
    91. End Get
    92. End Property
    93. Public Overrides ReadOnly Property CheckSelectedBackground() As Color
    94. Get
    95. Return Color.FromArgb(255, 60, 60, 60)
    96. End Get
    97. End Property
    98. Public Overrides ReadOnly Property CheckPressedBackground() As Color
    99. Get
    100. Return Color.FromArgb(255, 60, 60, 60)
    101. End Get
    102. End Property
    103. Public Overrides ReadOnly Property GripDark() As Color
    104. Get
    105. Return Color.FromArgb(255, 80, 80, 80)
    106. End Get
    107. End Property
    108. Public Overrides ReadOnly Property GripLight() As Color
    109. Get
    110. Return Color.FromArgb(255, 80, 80, 80)
    111. End Get
    112. End Property
    113. Public Overrides ReadOnly Property ImageMarginGradientBegin() As Color
    114. Get
    115. Return Color.FromArgb(255, 60, 60, 60)
    116. End Get
    117. End Property
    118. Public Overrides ReadOnly Property ImageMarginGradientMiddle() As Color
    119. Get
    120. Return Color.FromArgb(255, 60, 60, 60)
    121. End Get
    122. End Property
    123. Public Overrides ReadOnly Property ImageMarginGradientEnd() As Color
    124. Get
    125. Return Color.FromArgb(255, 60, 60, 60)
    126. End Get
    127. End Property
    128. Public Overrides ReadOnly Property ImageMarginRevealedGradientBegin() As Color
    129. Get
    130. Return Color.FromArgb(255, 40, 40, 40)
    131. End Get
    132. End Property
    133. Public Overrides ReadOnly Property ImageMarginRevealedGradientMiddle() As Color
    134. Get
    135. Return Color.FromArgb(255, 40, 40, 40)
    136. End Get
    137. End Property
    138. Public Overrides ReadOnly Property ImageMarginRevealedGradientEnd() As Color
    139. Get
    140. Return Color.FromArgb(255, 40, 40, 40)
    141. End Get
    142. End Property
    143. Public Overrides ReadOnly Property MenuStripGradientBegin() As Color
    144. Get
    145. Return Color.FromArgb(255, 40, 40, 40)
    146. End Get
    147. End Property
    148. Public Overrides ReadOnly Property MenuStripGradientEnd() As Color
    149. Get
    150. Return Color.FromArgb(255, 40, 40, 40)
    151. End Get
    152. End Property
    153. Public Overrides ReadOnly Property MenuItemSelected() As Color
    154. Get
    155. Return Color.FromArgb(255, 40, 40, 40)
    156. End Get
    157. End Property
    158. Public Overrides ReadOnly Property MenuItemBorder() As Color
    159. Get
    160. Return Color.FromArgb(255, 40, 40, 40)
    161. End Get
    162. End Property
    163. Public Overrides ReadOnly Property MenuBorder() As Color
    164. Get
    165. Return Color.FromArgb(255, 80, 80, 80)
    166. End Get
    167. End Property
    168. Public Overrides ReadOnly Property MenuItemSelectedGradientBegin() As Color
    169. Get
    170. Return Color.FromArgb(255, 40, 40, 40)
    171. End Get
    172. End Property
    173. Public Overrides ReadOnly Property MenuItemSelectedGradientEnd() As Color
    174. Get
    175. Return Color.FromArgb(255, 40, 40, 40)
    176. End Get
    177. End Property
    178. Public Overrides ReadOnly Property MenuItemPressedGradientBegin() As Color
    179. Get
    180. Return Color.FromArgb(255, 60, 60, 60)
    181. End Get
    182. End Property
    183. Public Overrides ReadOnly Property MenuItemPressedGradientMiddle() As Color
    184. Get
    185. Return Color.FromArgb(255, 60, 60, 60)
    186. End Get
    187. End Property
    188. Public Overrides ReadOnly Property MenuItemPressedGradientEnd() As Color
    189. Get
    190. Return Color.FromArgb(255, 60, 60, 60)
    191. End Get
    192. End Property
    193. Public Overrides ReadOnly Property RaftingContainerGradientBegin() As Color
    194. Get
    195. Return Color.FromArgb(255, 40, 40, 40)
    196. End Get
    197. End Property
    198. Public Overrides ReadOnly Property RaftingContainerGradientEnd() As Color
    199. Get
    200. Return Color.FromArgb(255, 40, 40, 40)
    201. End Get
    202. End Property
    203. Public Overrides ReadOnly Property SeparatorDark() As Color
    204. Get
    205. Return Color.FromArgb(255, 40, 40, 40)
    206. End Get
    207. End Property
    208. Public Overrides ReadOnly Property SeparatorLight() As Color
    209. Get
    210. Return Color.FromArgb(255, 80, 80, 80)
    211. End Get
    212. End Property
    213. Public Overrides ReadOnly Property StatusStripGradientBegin() As Color
    214. Get
    215. Return Color.FromArgb(255, 40, 40, 40)
    216. End Get
    217. End Property
    218. Public Overrides ReadOnly Property StatusStripGradientEnd() As Color
    219. Get
    220. Return Color.FromArgb(255, 40, 40, 40)
    221. End Get
    222. End Property
    223. Public Overrides ReadOnly Property ToolStripBorder() As Color
    224. Get
    225. Return Color.FromArgb(255, 40, 40, 40)
    226. End Get
    227. End Property
    228. Public Overrides ReadOnly Property ToolStripDropDownBackground() As Color
    229. Get
    230. Return Color.FromArgb(255, 60, 60, 60)
    231. End Get
    232. End Property
    233. Public Overrides ReadOnly Property ToolStripGradientBegin() As Color
    234. Get
    235. Return Color.FromArgb(255, 40, 40, 40)
    236. End Get
    237. End Property
    238. Public Overrides ReadOnly Property ToolStripGradientMiddle() As Color
    239. Get
    240. Return Color.FromArgb(255, 40, 40, 40)
    241. End Get
    242. End Property
    243. Public Overrides ReadOnly Property ToolStripGradientEnd() As Color
    244. Get
    245. Return Color.FromArgb(255, 40, 40, 40)
    246. End Get
    247. End Property
    248. Public Overrides ReadOnly Property ToolStripContentPanelGradientBegin() As Color
    249. Get
    250. Return Color.FromArgb(255, 40, 40, 40)
    251. End Get
    252. End Property
    253. Public Overrides ReadOnly Property ToolStripContentPanelGradientEnd() As Color
    254. Get
    255. Return Color.FromArgb(255, 40, 40, 40)
    256. End Get
    257. End Property
    258. Public Overrides ReadOnly Property ToolStripPanelGradientBegin() As Color
    259. Get
    260. Return Color.FromArgb(255, 40, 40, 40)
    261. End Get
    262. End Property
    263. Public Overrides ReadOnly Property ToolStripPanelGradientEnd() As Color
    264. Get
    265. Return Color.FromArgb(255, 40, 40, 40)
    266. End Get
    267. End Property
    268. Public Overrides ReadOnly Property OverflowButtonGradientBegin() As Color
    269. Get
    270. Return Color.FromArgb(255, 40, 40, 40)
    271. End Get
    272. End Property
    273. Public Overrides ReadOnly Property OverflowButtonGradientMiddle() As Color
    274. Get
    275. Return Color.FromArgb(255, 40, 40, 40)
    276. End Get
    277. End Property
    278. Public Overrides ReadOnly Property OverflowButtonGradientEnd() As Color
    279. Get
    280. Return Color.FromArgb(255, 40, 40, 40)
    281. End Get
    282. End Property
    283. End Class

    Anwendung:

    VB.NET-Quellcode

    1. Dim renderer As New RendererDark(New ColorTableDark, Color.White)
    2. MenuStrip1.Renderer = renderer

    Kann auf StatusStrip, MenuStrip und ContextmenuStrip angewendet werden.