Button und Label mit einem Farbverlauf

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Blacky1980.

    Button und Label mit einem Farbverlauf

    Hallo zusammen


    Ich habe nun 2 Stunden gesucht aber nichts gefunden.

    Ich möchte gerne ein Label und ein Button mit einem Farbverlauf erstellen? Ich habe immer nur gefunden wie ich das mit dem Hindergrund der Form mache aber nicht wie ich es auf ein Button oder auf ein Label anwenden kann.

    Kann mir vieleicht einer da mal weiter helfen?

    Hier mal der Code den ich für den Hintergrund habe

    Quellcode

    1. Private Sub Form1_Paint(ByVal sender As Object, _
    2. ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    3. Dim Rectangle As New Rectangle(5, 5, Me.ClientRectangle.Width - 10, _
    4. Me.ClientRectangle.Height - 10)
    5. ' Rand des Rechtsecks zeichnen.
    6. 'Dim DrawingPen As New Pen(Color.Blue, 2)
    7. 'e.Graphics.DrawRectangle(DrawingPen, Rectangle)
    8. ' rechteck mit Farbverlauf füllen.
    9. Dim DrawingBrush As New _
    10. System.Drawing.Drawing2D.LinearGradientBrush( _
    11. Rectangle, Color.Blue, Color.Black, 270)
    12. e.Graphics.FillRectangle(DrawingBrush, Rectangle)
    13. End Sub
    14. Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) _
    15. Handles MyBase.Resize
    16. ' Anzeigen, dass der Formularinhalt nicht länger gültig ist,
    17. ' und Windows das Neuzeichnen veranlassen.
    18. Me.Invalidate()
    19. End Sub



    Vielen Dank

    Gruß Michael
    Sieh Dir mal dieses Button-Control von @LaMiy: an.
    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!
    Hallo zusammen

    Also ich möchte ein ganz normales Label mit einem Farbverlauf haben der von Schwarz auf Blau läuft und genau so einen Button.

    Das Label habe ich schon es ist Label1 und der Button ist Button1. Ich kann ja nur eine Farbe nehmen abr ich möchte das sich die Farbe von schwarz nach Blau verläuft. Bei dem Code von 1. Beitrag ist es ja derr Hindergrund der Form aber es soll nur auf den Button und das Label angewendet werden. Der Form Hindergrund soll grau bleiben wie es Standard ist.


    Ich hoffe ich konnte mich jetzt was besser ausdrücken.


    Gruß Michael

    Blacky1980 schrieb:

    Ich hoffe ich konnte mich jetzt was besser ausdrücken.
    Leider nein. :S
    Mach mal ein Bild, wie es sein soll.
    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!
    Hallo Rod

    Hier mal das Bild. So wie es jetzt ist ist es der Code aus Beitrag 1 aber ich möchte es nur auf das label haben und nicht als Hindergrund in der Form. Nur halt nicht von oben nach unten sondern von rechts nach links.

    Gruß Michael
    Bilder
    • label_farbverlauf.gif

      7,69 kB, 662×546, 193 mal angesehen
    Hallo zusammen


    Ich habe die Lösung gefunden!

    Hier der Code um den Farbverlauf auf ein Label anzuwenden.

    VB.NET-Quellcode

    1. Private Sub DrawGradientLabel(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Label1.Paint
    2. Try
    3. Dim g As Graphics = e.Graphics
    4. Dim rect As New Rectangle(0, 0, Label1.Width, Label1.Height)
    5. Dim br As New
    6. System.Drawing.Drawing2D.LinearGradientBrush(rect, Color.Red,
    7. Color.Blue, Drawing2D.LinearGradientMode.Horizontal)
    8. Dim x As Single = CSng(Label1.Width / 50)
    9. Dim y As Single = CSng(Label1.Height / 6)
    10. Dim sBrush As New System.Drawing.SolidBrush(Color.Yellow)
    11. Dim Font As System.Drawing.Font = Label1.Font
    12. Dim txt As String = Label1.Text
    13. g.FillRectangle(br, rect)
    14. g.DrawString(txt, Font, sBrush, x, y)
    15. br.Dispose()
    16. Catch ex As Exception
    17. MsgBox(ex.Message)
    18. End Try
    19. End Sub



    Nun habe ich nur ein kleines problem die Schrift soll linksbündig sein und nicht so wie es in mom ist rechtsbündig. Ich habe alles schon in den Eigenschaften des Labels geändert geht aber nicht.


    Gruß Michael

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Blacky1980“ ()

    zu 1.: Stimmt
    zu 2.: Einen selbst eröffneten Thread, sollten man schon aufmerksam lesen, ansonsten kann das durchaus als Ignoranz interpretiert werden. ;)
    zu 3.: Schön, dann ist ja alles klar.

    ErfinderDesRades - Moderator - Notiz:
    Ähm - muß ein Neu-Einsteiger bei VBP gleich so angeblafft werden?


    edit:
    @ ErfinderDesRades
    Ich habe doch überhaupt niemanden angeblafft !
    Ich habe sachlich (wenn auch etwas provokativ) Kritik geäußert, mehr nicht.
    Und das Argument Neuling, ist keins, denn grade als Neuling liegt es in meiner Verantwortung, mir die örtlichen Gepflogenheiten anzueignen, anstatt einfach so hereinzuplatzen !

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „timonator“ ()

    VB.NET-Quellcode

    1. Private _SF As New StringFormat() With {.Alignment = StringAlignment.Far, .LineAlignment = StringAlignment.Center}
    2. Private Sub DrawGradientLabel(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Label1.Paint
    3. Dim g As Graphics = e.Graphics
    4. Dim sBrush As New System.Drawing.SolidBrush(Color.Yellow)
    5. With Label1
    6. Using br As New LinearGradientBrush(.ClientRectangle, Color.Red, Color.Blue, Drawing2D.LinearGradientMode.Horizontal)
    7. g.FillRectangle(br, .ClientRectangle)
    8. g.DrawString(.Text, .Font, Brushes.Yellow, .ClientRectangle, _SF)
    9. End Using
    10. End With
    11. End Sub
    Bei Fragen fragen

    und: TryCatch ist ein heißes Eisen
    Hallo ErfinderDesRades

    Danke für die Antwort.

    Aber irgend wie bleibt der Text in dem Label rechtsbündig und nicht linksbündig sonst klappt soweit alles.
    In den Eigenschaften vom Label habe ich es so eingestellt das es MiddleLeft aber macht es nicht.

    Was mache ich nur falsch??


    Gruß Michael

    Ich habe es nun raus gefunden!

    VB.NET-Quellcode

    1. Private _SF As New StringFormat() With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center}


    So habe ich es nun geändert.
    Vielen Dank
    dassis OwnerDrawing.
    Das Label wird selbst gezeichnet, daher wirken diejenigen Einstellungen im Designer nicht mehr, die ursprünglich einstellten, wie gezeichnet wird.

    Die Bündigkeit wird jetzt am StringFormat eingestellt, beachte Alignment.Far und LineAlignment.Center.

    Edit: zu spät ;)