Farbe von String mittem im Text ändern

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von trex0113.

    Farbe von String mittem im Text ändern

    Gibt es eine einfache!!! Möglichkeit die Textfarbe Mittem im Text zu ändern?

    Als Beispiel:
    Ich bin ein Text der Mittem drin seine Farbe ändert

    Geht sowas überhaupt?

    Will das ganze mit einem Label erreichen.
    so sieht das ganze aus:

    VB.NET-Quellcode

    1. Dim txt as String = "blabla"
    2. Label1.text = "der text heißt: " & txt

    Dabei soll das was in der Variable "txt" gespeichert ist eine andere Farbe haben.
    VOn mir aus kanns auch anders rum sein, also die Zeichenfolge "der text heißt:" hat ne andere Farbe wie der String "txt"

    hab das ganze zurzeit mit 2 labels erreicht, aber mich würde interesieren ob das auch mit einem Geht.
    Natürlich nur wenns dafür ne einfache Funktion gibt und man nicht dafür noch so 100 zeieln code braucht.
    Ich bin blutiger Anfänger
    Nutze eine RichTextBox, die kann das von Hause aus.
    Ansonsten GDI.
    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!
    okay und wie macht man das nun mit GDI?
    Dort muss ich doch auch die einzelnen textelemente in variablen speichern und dann einzeln die drawstring methode machen oder nicht?
    Hab das mal so probiert (ist bestimmt total schlechter Code aber ich weis nicht wies besser geht...)

    VB.NET-Quellcode

    1. Dim g As Graphics = Me.CreateGraphics
    2. Dim txt1 As String = "blabla"
    3. Dim txt2 As String = "blubblub"
    4. Dim farbe1 As Brush = Brushes.Blue
    5. Dim farbe2 As Brush = Brushes.Red
    6. Dim font As Font = New Font("Arial", 20, FontStyle.Regular, GraphicsUnit.Pixel)
    7. Dim loc As New Point(20, 20)
    8. Dim loc2 As New Point(80, 20)
    9. g.DrawString(txt1, font, farbe1, loc)
    10. g.DrawString(txt2, font, farbe2, loc2)


    Also wie gehts besser? Ich arbeite kaum mit GDI, hauptsächlich nur für ein paar Linien oder Rechtecke und so zeugs...

    Ich bitte um vernünftige Antworten und nicht um so antworten wie: "Lese ein Buch", denn das habe ich bereits (insgesamt schon 3 1/2 Stück)
    Das geht zum Beispiel so: Zuerst machst du dir ein UserControl bzw eine Klasse und erbst vom UserControl. Da kommt der Code hin:

    VB.NET-Quellcode

    1. Public Class ColoredLabel
    2. Public TextParts As New List(Of ColoredTextPart)
    3. Public Structure ColoredTextPart
    4. Dim Text As String
    5. Dim ForeColor As Color
    6. Dim Font As Font
    7. End Structure
    8. Private Sub ColoredLabel_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    9. If TextParts.Count > 0 Then
    10. Dim XPos As Integer = 0
    11. For i As Integer = 0 To TextParts.Count - 1
    12. e.Graphics.DrawString(TextParts(i).Text, TextParts(i).Font, New SolidBrush(TextParts(i).ForeColor), New Point(XPos, 0))
    13. XPos = CInt(XPos + e.Graphics.MeasureString(TextParts(i).Text, TextParts(i).Font).Width)
    14. Next
    15. End If
    16. End Sub
    17. End Class


    In deinem Programm kannst du nun so neue Teile hinzufügen:

    VB.NET-Quellcode

    1. Dim c As New ColoredLabel.ColoredTextPart With {.Text = TextBox1.Text, .Font = TextBox1.Font, .ForeColor = TextBox1.ForeColor}
    2. ColoredLabel1.TextParts.Add(c)
    3. ColoredLabel1.Refresh()


    Ist eine 5-Minuten Implementierung, also noch verbesserungswürdig mit Properties usw

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Klasse, bin grad dabei den Code zu verstehen. Dabei wieder etwas neues gelernt( Nämlich wie man die Textlänge von Drawstring rausfindet.) Da hatte ich das Problem das ich nur probieren gelöst hatte wo den das 2. Drawsting hin muss ( also auf welche x position)

    Mit richtextbox gehts zwar auch aber das dumme ist das ich den text selectieren kann mit der Maus, also auswählen und markieren... Die richtextbox sollte aber die Eigenschaften vom Label haben, also das ich den text nicht auswählen kann. Hab das mit der Eigenschaft ReadOnly und Enabled = False probiert, ging aber nicht. Mit Borderstyle habe ich das Design des Labels imitieren können aber mehr nicht...

    Wenn du aber weist wie das geht, dann glaub ich werde ich ne RTB nehmen.
    Willst Du nur mal eben farbigen Text ausgeben oder willst Du ernsthaft einen Farb-Text-Editor bauen?
    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!
    Nur fürs Farbige Ausgeben. Deshalb habe ich ja gefragt ob das ganze mit einem Label klappt. Zurzeit verwende ich dafür 2 Labels.
    Deshalb kam mir die Frage auf ob das nicht auch mit einem Label geht.
    Ob das nun besser ist mit ner Richtextbox zu realisieren für einen ein Zeiligen 20 zeichen Text oder nicht sei mal dahingestellt, mir gings aber auch hauptsächlich darum etwas neues zu lernen und mein Wissen zu erweitern.
    Ich denke aber mal das es mit 2 labels immer noch besser ist als mit der RTB oder? Ich meine: Für größere Texte vll nicht, aber für einen Einzeiligen kleinen "Status Text" wohl schon.

    trex0113 schrieb:

    aber für einen Einzeiligen kleinen "Status Text" wohl schon.

    Wieviele verschiedene Farben hat denn dieser?
    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!