Windows Forms Button Flatstyle

  • VB.NET
  • .NET (FX) 4.0

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

    Naja einfach mit GDI+ zeichnen, wenn es um ein simples Buttoncontrol geht ist das, wirklich wenig arbeit.
    Hier ein kleines TestControl aus einem Tutorial von mir, das grundsätzlich wie ein sehr simpler FlatButton funktioniert. Natürlich hat er nicht wirklich ein Design, daran muss natürlich (mittels GDI) gerabeitet werden.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Option Infer On
    4. Imports System.Drawing
    5. Imports System.ComponentModel
    6. Imports System.Windows.Forms
    7. ''' <summary>
    8. ''' Ein Steuerelement zum Testen des ToolboxBitmaps, auf Basis des Tutorials von Gather.
    9. ''' Das Tutorial ist auf vb-paradise.de zu finden.
    10. ''' </summary>
    11. <DesignerCategory("Code")>
    12. <Description("Ein Steuerelement zum Testen des ToolboxBitmaps, auf Basis des Tutorials von Gather.")>
    13. Public Class TestControl : Inherits Control
    14. #Region " Declarations "
    15. ''' <summary>
    16. ''' Farben zur Darstellung des TestControls.
    17. ''' </summary>
    18. Private _ControlColors As Color() = {Color.Red, Color.Yellow, Color.Green}
    19. #End Region
    20. #Region " Mouse-Hook "
    21. '
    22. ' Die Mouse-Hook wird zum Erkennen des aktuellen Mausstatus verwendet.
    23. '
    24. ''' <summary>
    25. ''' Wird für die Angabe des Aktuellen Mausstatus benötigt.
    26. ''' </summary>
    27. Private _CurrentState As MouseState = MouseState.None
    28. ''' <summary>
    29. ''' Enumweration für den Status der Maus.
    30. ''' </summary>
    31. ''' <remarks>Für dieses Tutorial als Integer definiert.</remarks>
    32. Enum MouseState As Integer
    33. ''' <summary>
    34. ''' Die Maus befindet sich nicht über dem Steuerelement.
    35. ''' </summary>
    36. None = 0
    37. ''' <summary>
    38. ''' Die Maus befindet sich über dem Steuerelement.
    39. ''' </summary>
    40. Over = 1
    41. ''' <summary>
    42. ''' Die Maus befindet sich, mit gedrückter linker Maustaste, über dem Steuerelement.
    43. ''' </summary>
    44. Down = 2
    45. End Enum
    46. Protected Overrides Sub OnMouseEnter(e As System.EventArgs)
    47. _CurrentState = MouseState.Over : Invalidate()
    48. MyBase.OnMouseEnter(e)
    49. End Sub
    50. Protected Overrides Sub OnMouseLeave(e As System.EventArgs)
    51. _CurrentState = MouseState.None : Invalidate()
    52. MyBase.OnMouseLeave(e)
    53. End Sub
    54. Protected Overrides Sub OnMouseDown(e As System.Windows.Forms.MouseEventArgs)
    55. _CurrentState = MouseState.Down : Invalidate()
    56. MyBase.OnMouseDown(e)
    57. End Sub
    58. Protected Overrides Sub OnMouseUp(e As System.Windows.Forms.MouseEventArgs)
    59. _CurrentState = MouseState.Over : Invalidate()
    60. MyBase.OnMouseUp(e)
    61. End Sub
    62. #End Region
    63. #Region " Drawing "
    64. Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
    65. Dim g As Graphics = e.Graphics
    66. Using b As New SolidBrush(_ControlColors(_CurrentState))
    67. g.FillRectangle(b, New Rectangle(0, 0, Width - 1, Height - 1))
    68. b.Color = ForeColor
    69. Using sf As New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center}
    70. g.DrawString("Gathers TestControl", Font, b, ClientRectangle, sf)
    71. End Using
    72. End Using
    73. MyBase.OnPaint(e)
    74. End Sub
    75. #End Region
    76. End Class
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Hallo @Gather,

    vielen Dank für deinen Tipp mit der Schaltfläche, sieht wirklich gut aus. Aber wie kann ich so eine Schaltfläche erstellen? Ich bitte ungern um den Quellcode, aber in diesem Fall fehlt mir der Ansatz absolut.
    Wenn ich das richtig verstehe erstellst du über GDI diese Schaltfläche, aber was ist dann mit dem Mouse_Ereignissen (Down, Up, Leave etc.) ?
    Sorry mit den "Grafik (GDI)-Sachen" bin ich noch nicht so fit.
    Gruß
    Joachim
    Schau hier mal rein, damit kommt man schon recht weit: [Tutorial] GDI+
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    joachim68 schrieb:


    Wenn ich das richtig verstehe erstellst du über GDI diese Schaltfläche, aber was ist dann mit dem Mouse_Ereignissen (Down, Up, Leave etc.) ?


    Die Evente werden automatisch getriggert. Das wird von der Klasse Control geerbt.
    In meinem Codebeispiel wird dies nur überschrieben um den Hover, Pressed und None effekt zu erzielen.
    Und Grundsätzlich ist der vor mir bereitgestellte Code schon ein Button :)
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!