[UPDATE 20.10.2020] - MetroSuite 2.0 - Holt euch den modernen Windows 10 Style.

    • Release
    • Closed Source

    Es gibt 1.335 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

      Hallo Gather,
      ein Vorschlag von mir - hast Du evtl. an ein MenuStrip Control gedacht?

      Denn ich kämpfe grad aktuell damit, dem vb.net Menustrip die Farben der MetroSuite-Form (MetroSuite 2.0.2.1) beizubringen (u.a. mit einem Renderer) komme aber nicht weiter:

      Spoiler anzeigen

      Quellcode

      1. Imports System.Collections.Generic
      2. Imports System.Windows.Forms
      3. Imports System.Drawing
      4. Public Class MainForm
      5. Public Sub New()
      6. ' This call is required by the designer.
      7. InitializeComponent()
      8. ' Add any initialization after the InitializeComponent() call.
      9. End Sub
      10. Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      11. ChangeColours()
      12. End Sub
      13. Private Sub ChangeColours()
      14. With Menü
      15. .ForeColor = ForeColor
      16. .BackColor = BackColor
      17. End With
      18. ToolStripManager.Renderer = New ToolStripProfessionalRenderer(New MenuStripColors())
      19. End Sub
      20. End Class
      21. Class MenuStripColors
      22. Inherits ProfessionalColorTable
      23. 'Public Overridable ReadOnly Property MenuStripGradientBegin As Color
      24. 'Public Overridable ReadOnly Property MenuStripGradientEnd As Color
      25. 'Public Overridable ReadOnly Property MenuItemSelected As Color
      26. 'Public Overridable ReadOnly Property MenuItemBorder As Color
      27. 'Public Overridable ReadOnly Property MenuBorder As Color
      28. 'Public Overridable ReadOnly Property MenuItemSelectedGradientBegin As Color
      29. 'Public Overridable ReadOnly Property MenuItemSelectedGradientEnd As Color
      30. 'Public Overridable ReadOnly Property MenuItemPressedGradientBegin As Color
      31. 'Public Overridable ReadOnly Property MenuItemPressedGradientMiddle As Color
      32. 'Public Overridable ReadOnly Property MenuItemPressedGradientEnd As Color
      33. 'Public Overridable ReadOnly Property RaftingContainerGradientBegin As Color
      34. 'Public Overridable ReadOnly Property RaftingContainerGradientEnd As Color
      35. 'Public Overridable ReadOnly Property SeparatorDark As Color
      36. 'Public Overridable ReadOnly Property SeparatorLight As Color
      37. 'Public Overridable ReadOnly Property StatusStripGradientBegin As Color
      38. 'Public Overridable ReadOnly Property StatusStripGradientEnd As Color
      39. 'Public Overridable ReadOnly Property ToolStripBorder As Color
      40. 'Public Overridable ReadOnly Property ToolStripDropDownBackground As Color
      41. 'Public Overridable ReadOnly Property ToolStripGradientBegin As Color
      42. 'Public Overridable ReadOnly Property ToolStripGradientMiddle As Color
      43. 'Public Overridable ReadOnly Property ToolStripGradientEnd As Color
      44. 'Public Overridable ReadOnly Property ToolStripContentPanelGradientBegin As Color
      45. 'Public Overridable ReadOnly Property ToolStripContentPanelGradientEnd As Color
      46. 'Public Overridable ReadOnly Property ToolStripPanelGradientBegin As Color
      47. 'Public Overridable ReadOnly Property ToolStripPanelGradientEnd As Color
      48. 'Public Overridable ReadOnly Property OverflowButtonGradientBegin As Color
      49. 'Public Overridable ReadOnly Property ImageMarginRevealedGradientEnd As Color
      50. 'Public Overridable ReadOnly Property ImageMarginRevealedGradientMiddle As Color
      51. 'Public Overridable ReadOnly Property ImageMarginRevealedGradientBegin As Color
      52. 'Public Property UseSystemColors As Boolean
      53. 'Public Overridable ReadOnly Property ButtonSelectedHighlight As Color
      54. 'Public Overridable ReadOnly Property ButtonSelectedHighlightBorder As Color
      55. 'Public Overridable ReadOnly Property ButtonPressedHighlight As Color
      56. 'Public Overridable ReadOnly Property ButtonPressedHighlightBorder As Color
      57. 'Public Overridable ReadOnly Property ButtonCheckedHighlight As Color
      58. 'Public Overridable ReadOnly Property ButtonCheckedHighlightBorder As Color
      59. 'Public Overridable ReadOnly Property ButtonPressedBorder As Color
      60. 'Public Overridable ReadOnly Property ButtonSelectedBorder As Color
      61. 'Public Overridable ReadOnly Property ButtonCheckedGradientBegin As Color
      62. 'Public Overridable ReadOnly Property ButtonCheckedGradientMiddle As Color
      63. 'Public Overridable ReadOnly Property ButtonCheckedGradientEnd As Color
      64. 'Public Overridable ReadOnly Property OverflowButtonGradientMiddle As Color
      65. 'Public Overridable ReadOnly Property ButtonSelectedGradientBegin As Color
      66. 'Public Overridable ReadOnly Property ButtonSelectedGradientEnd As Color
      67. 'Public Overridable ReadOnly Property ButtonPressedGradientBegin As Color
      68. 'Public Overridable ReadOnly Property ButtonPressedGradientMiddle As Color
      69. 'Public Overridable ReadOnly Property ButtonPressedGradientEnd As Color
      70. 'Public Overridable ReadOnly Property CheckBackground As Color
      71. 'Public Overridable ReadOnly Property CheckSelectedBackground As Color
      72. 'Public Overridable ReadOnly Property CheckPressedBackground As Color
      73. 'Public Overridable ReadOnly Property GripDark As Color
      74. 'Public Overridable ReadOnly Property GripLight As Color
      75. 'Public Overridable ReadOnly Property ImageMarginGradientBegin As Color
      76. 'Public Overridable ReadOnly Property ImageMarginGradientMiddle As Color
      77. 'Public Overridable ReadOnly Property ImageMarginGradientEnd As Color
      78. 'Public Overridable ReadOnly Property ButtonSelectedGradientMiddle As Color
      79. 'Public Overridable ReadOnly Property OverflowButtonGradientEnd As Color
      80. Public Overrides ReadOnly Property MenuStripGradientBegin() As Color
      81. Get
      82. Return MainForm.BackColor
      83. End Get
      84. End Property
      85. Public Overrides ReadOnly Property MenuStripGradientEnd() As Color
      86. Get
      87. Return MainForm.BackColor
      88. End Get
      89. End Property
      90. Public ReadOnly Property MenuStripTextForeColor() As Color
      91. Get
      92. Return MainForm.ForeColor
      93. End Get
      94. End Property
      95. Public Overrides ReadOnly Property MenuItemSelected() As Color
      96. Get
      97. Return MainForm.AccentColor
      98. End Get
      99. End Property
      100. Public Overrides ReadOnly Property MenuItemBorder() As Color
      101. Get
      102. Return Color.DarkGray
      103. End Get
      104. End Property
      105. Public Overrides ReadOnly Property MenuBorder() As Color
      106. Get
      107. Return MainForm.AccentColor
      108. End Get
      109. End Property
      110. Public Overrides ReadOnly Property MenuItemSelectedGradientBegin() As Color
      111. Get
      112. Return MainForm.AccentColor
      113. End Get
      114. End Property
      115. Public Overrides ReadOnly Property MenuItemSelectedGradientEnd() As Color
      116. Get
      117. Return MainForm.AccentColor
      118. End Get
      119. End Property
      120. Public Overrides ReadOnly Property MenuItemPressedGradientBegin() As Color
      121. Get
      122. Return MainForm.AccentColor
      123. End Get
      124. End Property
      125. Public Overrides ReadOnly Property MenuItemPressedGradientMiddle() As Color
      126. Get
      127. Return MainForm.AccentColor
      128. End Get
      129. End Property
      130. Public Overrides ReadOnly Property MenuItemPressedGradientEnd() As Color
      131. Get
      132. Return MainForm.AccentColor
      133. End Get
      134. End Property
      135. End Class


      Quellcode

      1. Partial Class MainForm
      2. Inherits MetroSuite.MetroForm...


      Wie würdest Du dieses Problem lösen?



      Mir sind noch zwei weitere Dinge aufgefallen:
      1. Wenn man zuerst mit der Maus über den Rahmen und dann über die MetroSuite-Control-Box fährt, dann bleibt der Cursor falsch (Größe ändern statt Pfeil)
      2. Ich habe bei der MetroForm die StartPosition = CenterScreen ausgewählt, trotzdem wird mir das Fenster links oben angezeigt. Ich verstehe nicht, warum.

      Könntest Du mir bitte weiterhelfen?
      Ich verwende Visual Studio VB 2019.

      Danke!
      liebe Grüße
      Hans

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „johamb“ ()

      Hallo,

      so, ich konnte das Problem mit dem MenuStrip unter MetroSuite 2.0 nun lösen. Der Ansatz besteht darin einen eigenen ToolStripProfessionalRenderer (= CustomMenuRenderer) sowie eine eigene ProfessionalColorTable (= DarkStyleMenuColorTable) zu verwenden, und zwar nur im DarkMode der MetroSuite 2.0 (bei allen anderen bleibt das Menü bis auf "Menü.RenderMode = ToolStripRenderMode.Professional" unverändert)
      Bei der Farbgebung des Menüs hab ich mich am Menü vom Visual Studio orientiert (Farbwerte sind beschrieben)

      VB.NET-Quellcode

      1. Imports System.Collections.Generic
      2. Imports System.Windows.Forms
      3. Imports System.Drawing
      4. Imports System
      5. Imports System.ComponentModel
      6. Imports System.Data
      7. Imports System.Text
      8. Public Class MainForm
      9. Public Sub New()
      10. ' This call is required by the designer.
      11. InitializeComponent()
      12. End Sub
      13. Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      14. With Menü
      15. .BackColor = Me.BackColor
      16. .ForeColor = Me.ForeColor
      17. ' nur im Dark-Modus die Farben des Menüs / Toolstrips ändern
      18. If Me.Style = MetroSuite.Design.Style.Dark Then
      19. .Renderer = New CustomMenuRenderer(New DarkStyleMenuColorTable)
      20. Else
      21. Menü.RenderMode = ToolStripRenderMode.Professional
      22. End If
      23. End With
      24. End Sub
      25. End Class
      26. Public Class CustomMenuRenderer
      27. Inherits ToolStripProfessionalRenderer
      28. ' Beschreibung - Hex-Farbwert - RGB-Farbwert (jeweils Integer)
      29. Public Shared mnuBorderColor As Color = System.Drawing.Color.FromArgb(CType(CType(51, Byte), Integer), CType(CType(51, Byte), Integer), CType(CType(51, Byte), Integer)) ' contextmenuborderbrush - 333337, 51-51-51
      30. Public Shared mnuForeColor As Color = System.Drawing.Color.FromArgb(CType(CType(241, Byte), Integer), CType(CType(241, Byte), Integer), CType(CType(241, Byte), Integer)) ' systemcolorscontroltext - F1F1F1, 241-241-241
      31. Public Shared mnuBackColor As Color = System.Drawing.Color.FromArgb(CType(CType(27, Byte), Integer), CType(CType(27, Byte), Integer), CType(CType(28, Byte), Integer)) ' toolbarsubmenubackground - 1B1B1C, 27-27-28
      32. Public Shared mnuTopSeparatorColor As Color = System.Drawing.Color.FromArgb(CType(CType(51, Byte), Integer), CType(CType(51, Byte), Integer), CType(CType(51, Byte), Integer)) ' menuitemseparatorfilltop - 333337
      33. Public Shared mnuBottomSeparatorColor As Color = Color.Transparent ' menuitemseparatorfillbottom - Transparent
      34. Public Shared mnuHighlightForeColor As Color = System.Drawing.Color.FromArgb(CType(CType(241, Byte), Integer), CType(CType(241, Byte), Integer), CType(CType(241, Byte), Integer)) ' systemcolorsmenutext - F1F1F1
      35. Public Shared mnuHighlightBackColor As Color = System.Drawing.Color.FromArgb(CType(CType(51, Byte), Integer), CType(CType(51, Byte), Integer), CType(CType(52, Byte), Integer)) ' menuitemhighlightedinnerborder - 333334
      36. Public Shared mnuTopSeparatorBrush As Brush = New SolidBrush(mnuTopSeparatorColor)
      37. Public Shared mnuBottomSeparatorBrush As Brush = New SolidBrush(mnuBottomSeparatorColor)
      38. Public Sub New(ByVal colorTable As DarkStyleMenuColorTable)
      39. MyBase.New(colorTable)
      40. End Sub
      41. ' Nur für die Dokumentation:
      42. 'Protected Overloads Overrides Sub OnRenderMenuItemBackground(ByVal e As ToolStripItemRenderEventArgs)
      43. ' Dim rc As New Rectangle(2, 0, e.Item.Size.Width - 4, e.Item.Size.Height)
      44. ' Dim c As Color = CType(IIf(e.Item.Selected, Color.Azure, Color.Transparent), Color)
      45. ' Using brush As New SolidBrush(c)
      46. ' e.Graphics.FillRectangle(brush, rc)
      47. ' End Using
      48. 'End Sub
      49. '
      50. 'HINWEIS: Es kann nur eine Technik eingesetzt werden - entweder diese Funktion "OnRenderMenuItemBackground" oder die Einstellungen der DarkStyleMenuColorTable!
      51. ' Wird die OnRenderMenuItemBackground-Routine verwendet, dann müssen auch evtl. Pfeile und Checkboxes selbst gezeichnet werden. (= ungeprüft)
      52. Protected Overrides Sub OnRenderItemText(e As ToolStripItemTextRenderEventArgs)
      53. If e.Item.Selected Then
      54. e.TextColor = mnuForeColor ' im Darkmode ist die Textfarbe gleich der Textfarbe des hervorgehobenen Eintrags
      55. Else
      56. e.TextColor = mnuForeColor
      57. End If
      58. MyBase.OnRenderItemText(e)
      59. End Sub
      60. Protected Overrides Sub OnRenderSeparator(ByVal e As System.Windows.Forms.ToolStripSeparatorRenderEventArgs)
      61. e.Graphics.FillRectangle(Brushes.Transparent, 0, 0, e.Item.Width - 1, e.Item.Height)
      62. e.Graphics.FillRectangle(mnuBottomSeparatorBrush, 32, 3, e.Item.Width - 33, 1)
      63. e.Graphics.FillRectangle(mnuTopSeparatorBrush, 32, 4, e.Item.Width - 33, 1)
      64. End Sub
      65. End Class
      66. 'custom color table
      67. Public Class DarkStyleMenuColorTable
      68. Inherits ProfessionalColorTable
      69. Public Overrides ReadOnly Property ToolStripDropDownBackground() As System.Drawing.Color
      70. Get
      71. Return CustomMenuRenderer.mnuBackColor
      72. End Get
      73. End Property
      74. Public Overrides ReadOnly Property ImageMarginGradientBegin() As System.Drawing.Color
      75. Get
      76. Return CustomMenuRenderer.mnuBackColor
      77. End Get
      78. End Property
      79. Public Overrides ReadOnly Property ImageMarginGradientMiddle() As System.Drawing.Color
      80. Get
      81. Return CustomMenuRenderer.mnuBackColor
      82. End Get
      83. End Property
      84. Public Overrides ReadOnly Property ImageMarginGradientEnd() As System.Drawing.Color
      85. Get
      86. Return CustomMenuRenderer.mnuBackColor
      87. End Get
      88. End Property
      89. Public Overrides ReadOnly Property MenuBorder() As System.Drawing.Color
      90. Get
      91. Return CustomMenuRenderer.mnuBorderColor
      92. End Get
      93. End Property
      94. Public Overrides ReadOnly Property MenuItemBorder() As System.Drawing.Color
      95. Get
      96. Return Color.Black
      97. End Get
      98. End Property
      99. Public Overrides ReadOnly Property MenuItemSelected() As System.Drawing.Color
      100. Get
      101. Return CustomMenuRenderer.mnuHighlightBackColor
      102. End Get
      103. End Property
      104. Public Overrides ReadOnly Property MenuStripGradientBegin() As System.Drawing.Color
      105. Get
      106. Return Color.Transparent
      107. End Get
      108. End Property
      109. Public Overrides ReadOnly Property MenuStripGradientEnd() As System.Drawing.Color
      110. Get
      111. Return Color.Transparent
      112. End Get
      113. End Property
      114. Public Overrides ReadOnly Property MenuItemSelectedGradientBegin() As System.Drawing.Color
      115. Get
      116. Return CustomMenuRenderer.mnuHighlightBackColor
      117. End Get
      118. End Property
      119. Public Overrides ReadOnly Property MenuItemSelectedGradientEnd() As System.Drawing.Color
      120. Get
      121. Return CustomMenuRenderer.mnuHighlightBackColor
      122. End Get
      123. End Property
      124. Public Overrides ReadOnly Property MenuItemPressedGradientBegin() As System.Drawing.Color
      125. Get
      126. Return CustomMenuRenderer.mnuHighlightBackColor
      127. End Get
      128. End Property
      129. Public Overrides ReadOnly Property MenuItemPressedGradientEnd() As System.Drawing.Color
      130. Get
      131. Return CustomMenuRenderer.mnuHighlightBackColor
      132. End Get
      133. End Property
      134. End Class


      liebe Grüße
      Hans

      Tags: MetroSuite 2.0, MenuStrip, Change MenuStrip Colors, Convert Color to Brush Color, ToolStripProfessionalRendere, ProfessionalColorTable
      Useful Links/Informations:
      stackoverflow.com/questions/56…nvert-from-color-to-brush
      docs.microsoft.com/en-us/dotne…w=netframeworkdesktop-4.8
      docs.microsoft.com/en-us/dotne…w=netframeworkdesktop-4.8
      bytes.com/topic/visual-basic-n…theme-toolstrip-menustrip
      social.msdn.microsoft.com/Foru…the-buttom?forum=winforms
      social.msdn.microsoft.com/Foru…rip-colors?forum=winforms
      dreamincode.net/forums/topic/3…nging-the-color-of-menus/
      docs.microsoft.com/en-us/dotne…w=netframeworkdesktop-4.8
      Hallo Gather

      Habe noch ein wenig mit der MetroSuite herumgespielt. Dabei sind mir noch folgende Dinge aufgefallen:

      - der Cursor der Steuerelemente wird zum Doppelpfeil, wenn man von ausserhalb der Form auf das Steuerelement fährt
      - MetroProgressbar: wenn der Value 0 ist und die Ecken abgerundet, kann sich die Anzeige unterhalb der Progressbar befinden (1-Pixel-Linie)
      - MetroCombobox: DropDownStyle und Texteigenschaft lässt sich zur Entwurfszeit nicht ändern
      - MetroDataGrid: Scrollbars im grauen Windows-Style
      - MetroTrackbar: Skala fehlt; Orientation-Eigenschaft fehlt, Scrollfunktion mit Maus nicht integriert; keine TickFrequency; kein TickStyle
      - MetroChecker: bei grösserer Schrift verschwindet der Text teilweise
      - MetroControlBox: beim Hinzufügen von Areas erscheint Meldung: Der Konstruktor für den Typ MetroSuiteControlBoxArea wurde nicht gefunden; zudem schaffe ich es nicht, nur den Minimize-Button zu entfernen, im Designer gehts, aber zur Laufzeit erscheint er wieder, egal was ich einstelle

      Soviel zu meinen Erkenntnissen. Ansonsten tolle Sammlung!

      AKP schrieb:

      - MetroCombobox: DropDownStyle und Texteigenschaft lässt sich zur Entwurfszeit nicht ändern
      Ist beabsichtigt. Leider ohne grobe Umwege nicht anders möglich.

      AKP schrieb:

      MetroDataGrid: Scrollbars im grauen Windows-Style
      Ist mir bewusst. Ist bei jedem Steuerelement so, da ich die Standard Windows Scrollbar nicht überschreibe. (Aktuell)

      AKP schrieb:

      - MetroControlBox: beim Hinzufügen von Areas erscheint Meldung: Der Konstruktor für den Typ MetroSuiteControlBoxArea wurde nicht gefunden; zudem schaffe ich es nicht, nur den Minimize-Button zu entfernen, im Designer gehts, aber zur Laufzeit erscheint er wieder, egal was ich einstelle

      Siehe Beschreibung 1. Post. Sollte alles funktionieren.

      Zum Rest: Schaue ich mir an wenn ich mich wieder an das Ganze ran setze. Zur Trackbar noch: Orientation hatte ich prinzipiell nicht geplant einzufügen. Habe es mir allerdings notiert.
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      @Pixxxas Via Standardfunktion ist dies nicht möglich.
      Diesbezüglich müssen manuell die gewünschten Areas hinzugefügt werden. Für eine Anleitung siehe Post1.
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      "MyTheme" war "Nothing".

      Moin,

      wenn ich versuche ein Theme zu übernehmen bekomme ich eine Null-Referenz Exception:

      Quellcode

      1. ​System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
      2. "MyTheme" war "Nothing".


      Code:

      VB.NET-Quellcode

      1. Imports MetroSuite
      2. Imports MetroSuite.Extension
      3. Public Class Form1
      4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      5. Dim MyTheme As New Styles.Themes.MetroSuiteTheme
      6. MyTheme = MyTheme.FromFile(My.Application.Info.DirectoryPath & "\TwitchTheme.mstheme")
      7. MyTheme.ApplyTheme(Me)
      8. End Sub
      9. Private Sub MetroButton1_Click(sender As Object, e As EventArgs) Handles MetroButton1.Click
      10. Me.Close()
      11. End Sub
      12. End Class


      Ideen?

      Im Designer erbt die Form von MetroSuite.MetroForm
      Es sieht so aus, als wurde kein Verweis auf die MetroSuite.Extensions.dll gesetzt. Diesbezüglich bitte die dazugehörige .dll aus dem ersten Post herunterladen.
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      Gather schrieb:

      Es sieht so aus, als wurde kein Verweis auf die MetroSuite.Extensions.dll gesetzt. Diesbezüglich bitte die dazugehörige .dll aus dem ersten Post herunterladen.


      Hm, verwies Stand. Habe den Verweis auf beide DLL noch einmal entfernt, neu eingefügt, geht nun.

      Gibt es eine Möglichkeit den MetroChecker in Gruppen zu packen, wie beim RadioButton? Also dass innerhalb einer Gruppe nur ein MetroChecker angewählt sein kann?
      @PapaBeer92 einfach den style von custom wieder auf light / dark setzen.
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


      Ich meine auch bei allen Controls selbst. Denn Themen deaktivieren das automatische wechseln des Styles welchen in die Form implementiert wurde.
      Mfg: Gather
      Private Nachrichten bezüglich VB-Fragen werden Ignoriert!