none
Unterschiedliche Farben in der Combobox RRS feed

  • Frage

  • Hallo zusammen, 

    Ich würde die Einträge in einer Combobox gerne farblich hinterlegen. In meiner Combobox sind ca. 10 Einträge und ich würde diese Einträge gerne in unterschiedlichen Farben anzeigen lassen. Leider ist das nicht so einfach umsetzbar. Daher würde es mich sehr freuen, wenn mir hier jemand weiterhelfen könnte.

    Als nächstes würde mich noch interessieren, wie es machbar ist, dass man ein LineShape über eine Picturebox legen kann. Bis jetzt wird mein LineShape an der Stelle, wo die Picturebox ist leider von dieser überdeckt.

    Danke für eure Antworten.

    Freitag, 27. März 2015 16:55

Antworten

  • Du kannst an Stelle von

     Select Case e.Index
                Case 0
                    b = New SolidBrush(Color.Gray)
                Case 1
                    b = New SolidBrush(Color.Green)
                Case 2
                    b = New SolidBrush(Color.Peru)
    
    End Select
    
    
         

     auch nach dem Text filtern

    If sender.items(e.Index) = "Elephant" Then
       b = New SolidBrush(Color.Gray)
    End If


    Jens Gerber

    Montag, 30. März 2015 16:51

Alle Antworten

  • Hallo,
    welche Technologie verwendest du denn? Ist die ComboBox gebunden oder befüllst du diese manuell?
    Ich gehe von Windows Forms ohne Datenbindung aus.

    In diesem Fall solltest du das DrawItem-Event der ComboBox überschreiben und das Popup selbst zeichnen. Hier ein Beispiel dazu.

    Wenn dein LineShape überdeckt wird, musst du es in den Vordergrund hohlen. Das geht über das Kontextmenü im Designer.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Freitag, 27. März 2015 17:38
    Moderator
  • Entschuldige für die verspätete Antwort. 

    Die Combobox wurde von mir manuell befüllt. Sie enthält als Einträge z.B. "Blau" "Rot" und ich hätte gerne, dass der Text von Blau auch blau ist, Gleiches gilt für rot und co.

    Ist dieser Schritt nicht einfacher machbar ? , ich programmiere in Basic (Visual Basic)


    Montag, 30. März 2015 15:57
  • Ich gehe mal davon aus, das du WinForms benutzt.

    Meines Wissens nach geht das nicht einfacher. Wirklich kompliziert ist da aber auch nicht.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 30. März 2015 16:00
    Moderator
  • Genau, das tue ich.

    Aber so ganz verstehe ich das noch nicht, kann ich nicht einfach beim laden der Form eine art Zuordnung machen, wie Combobox1 item = "rot" --> "rot" = color.red...

    Montag, 30. März 2015 16:10
  • Hi,

    hier mal ein ganz einfaches Beispiel in VB.NET was zu verstehen sein sollte. Für die Bedingung wann welche Farbe verwendet werden soll musst du dann noch eine Logik einfallen lassen... 

    Anders geht es mit der WinForms Technologie nicht.

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ComboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed
            ComboBox1.DropDownWidth = 250
            ComboBox1.DropDownStyle = ComboBoxStyle.DropDown
            animals = New String() {"Elephant", "Crocodile", "lion"}
            ComboBox1.DataSource = animals
        End Sub

     Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
    
            If e.Index < 0 Then
                Exit Sub
            End If
    
    
    
            Dim rect As Rectangle = e.Bounds
            If e.State And DrawItemState.Selected Then
                e.Graphics.FillRectangle(SystemBrushes.Highlight, rect)
            Else
                e.Graphics.FillRectangle(SystemBrushes.Window, rect)
            End If
    
            Dim b As New SolidBrush(Color.White)
    
            Select Case e.Index
                Case 0
                    b = New SolidBrush(Color.Gray)
                Case 1
                    b = New SolidBrush(Color.Green)
                Case 2
                    b = New SolidBrush(Color.Peru)
    
            End Select
    
    
            e.Graphics.FillRectangle(b, rect)
            e.Graphics.DrawRectangle(Pens.Black, rect)
    
            '// Text zeichnen
            Dim b2 As SolidBrush
    
            Dim fillcolor As Color = Color.Black
            b2 = New SolidBrush(fillcolor)
            e.Graphics.DrawString(sender.items(e.Index), e.Font, b2, e.Bounds.X, e.Bounds.Y)
    
    
        End Sub


    Jens Gerber


    Montag, 30. März 2015 16:31
  • Da es um etwas grafisches geht musst du es beim Zeichnen des jeweiligen Elements festlegen. Das ist in diesem Fall im DrawItem-Event. Und genau dort wendest du dann die Zuordnung an.

    Jens hat dir ja nun ein Beispiel gegeben.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 30. März 2015 16:35
    Moderator
  • Du kannst an Stelle von

     Select Case e.Index
                Case 0
                    b = New SolidBrush(Color.Gray)
                Case 1
                    b = New SolidBrush(Color.Green)
                Case 2
                    b = New SolidBrush(Color.Peru)
    
    End Select
    
    
         

     auch nach dem Text filtern

    If sender.items(e.Index) = "Elephant" Then
       b = New SolidBrush(Color.Gray)
    End If


    Jens Gerber

    Montag, 30. März 2015 16:51