CeLiCiUm Skrevet 11. oktober 2005 Del Skrevet 11. oktober 2005 Jeg er på utkikk etter hvordan jeg kan sette farge på en rad i en ListBox om et kriterium er oppfyllt. Noen som kan hjelpe meg? lstFakturaoversikt.Items(pos).Attributes.Add("style", color:green) fant jeg et sted på nett, men det var for ASP, mens jeg trenger for Windows Forms. Prøvde å endre den til: lstFakturaoversikt.Items(pos).Attributes.Add(Color.Green) noe den ikke ville godta. Lenke til kommentar
GeirGrusom Skrevet 11. oktober 2005 Del Skrevet 11. oktober 2005 Du kan lage en ny draw event, og tegne det selv eksempel: private struct ListBoxItem { private Color m_foreColor; string m_text; // Du kan sette inn flere egenskaper her, som brush, font etc. public ListBoxItem(Color forecolor, string text) { m_foreColor = forecolor; m_text = text; } public override string ToString() { return m_text; } public Color ForeColor { get { return m_foreColor; } set { m_foreColor = value;} } public string Text { get { return m_text; } set { m_text = value;} } } private void new_list_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { if(((ListBox)sender).Items[e.Index].GetType() == typeof(ListBoxItem)) { // Type casting, så vi får de egenskapene vi vil ha ListBoxItem i = (ListBoxItem)((ListBox)sender).Items[e.Index]; e.DrawBackground(); // Sjekk om dette er den valgte i listen if((e.State & DrawItemState.Selected) == DrawItemState.Selected) { // Dette er den valgte, tegn med Highlight e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds); e.Graphics.DrawString(i.ToString(), ((ListBox)sender).Font, SystemBrushes.HighlightText, e.Bounds); } else { // Dette er ikke den valgte, tegn vanlig (med farger) e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); e.Graphics.DrawString(i.ToString(), ((ListBox)sender).Font, new SolidBrush(i.ForeColor), e.Bounds); } } } For at dette skal fungere, setter du listboxen sin DrawMode egenskap til OwnerDrawFixed, og DrawItem event til new_list_DrawItem, deretter legger du inn verdier ved å bruker [listbox].Items.Add(new ListBoxItem(...)) denne koden burde være så enkel at den kan skrives om til VB.NET hvis du bruker det. Lenke til kommentar
CeLiCiUm Skrevet 12. oktober 2005 Forfatter Del Skrevet 12. oktober 2005 (endret) Jeg har knotet dette fram i en indre klasse: Private Class ListBoxItem Dim m_foreColor As Color Dim m_text As String 'Du kan sette inn flere egenskaper her, som brush, font etc. Public Function ListBoxItem() m_foreColor = ForeColor m_text = Text End Function Public Overrides Function ToString() As String Return m_text End Function Public Property ForeColor() As Color Get Return m_foreColor End Get Set(ByVal Value As Color) m_foreColor = Value End Set End Property Public Property Text() As String Get Return m_text End Get Set(ByVal Value As String) m_text = Value End Set End Property Public Sub new_list_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Dim i As ListBoxItem 'Type casting, så vi får de egenskapene vi vil ha i = sender.Items(e.Index) e.DrawBackground() 'Sjekk om dette er den valgte i listen If ((e.State & DrawItemState.Selected) = DrawItemState.Selected) Then 'Dette er den valgte, tegn med Highlight e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds) 'e.Graphics.DrawString(i.ToString(), sender.Font, SystemBrushes.HighlightText, e.Bounds) e.Graphics.DrawString(i.ToString(), ((ListBox)sender).Font, SystemBrushes.HighlightText, e.Bounds) Else 'Dette er ikke den valgte, tegn vanlig (med farger) e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds) e.Graphics.DrawString(i.ToString(), ((ListBox)sender).Font, new SolidBrush(i.ForeColor), e.Bounds) End If End Sub End Class Han klager nå kun på denne linjen inni både If og Else: e.Graphics.DrawString(i.ToString(), ((ListBox)sender).Font, new SolidBrush(i.ForeColor), e.Bounds) Ser koden ellers "grei" ut i forhold til VB.Net? Jeg er ikke så inne i hva som må til for å få det korrekt i forhold til hva som skal gjøres etter boka. Jeg har endret DrawMode til listboxen, men hvordan setter/endrer jeg DrawItem til new_list_DrawItem ? Endret 12. oktober 2005 av CeLiCiUm Lenke til kommentar
CeLiCiUm Skrevet 12. oktober 2005 Forfatter Del Skrevet 12. oktober 2005 Dette ble løsningen min etter litt ideer fra den koden du ga meg og noe jeg fant på nett etter en del leting: Private Sub listBox1_DrawItem(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles lstFakturaoversikt.DrawItem lstFakturaoversikt.DrawMode = DrawMode.OwnerDrawFixed e.DrawBackground() Dim myBrush As Brush Dim str As String = "" str = lstFakturaoversikt.Items.Item(e.Index) If str.Substring(str.Length() - 3, 3).Trim.Equals("Ja") Then myBrush = Brushes.Black Else myBrush = Brushes.Red End If e.Graphics.DrawString(lstFakturaoversikt.Items(e.Index), e.Font, myBrush, New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)) e.DrawFocusRectangle() End Sub Takker for hjelpen. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå