HEJ! Listbox:en stödjer inte olika bakgrundsfärger på raderna, så jag rekommenderar att du använder ListView:n i stället. Här följer lite exempelkod på hur du lägger upp rader och sätter upp den i rätt vy : <code></code> Tackar för hjälpen funkar helt OK! Visst kan du lägga till ikoner på raderna. Lägg ikonerna i en ImageList och koppla sen denna till SmallImageList-propertyn på ListView:n. Därefter sätter du ImageIndex-index propertyn på ListItem till det index som motsvarar den ikon du vill ha. Prestandan på Mod jämfört med And är i stort sett försumbar. På 100 miljoner iterationer var skillnaden ungefär 50 millisekunder, totaltiden låg på ca 300ms för And och lite mer för Mod på min maskin.Listbox - For each
Har en idé om att man inte skall ha samma färg på alla rader i en Listbox.
En litet förslag som jag inte lyckas koda.
For Each 'Rad' in Listbox
om radnummer ojämn => rad.Forecolor=Vit
annars => rad.Forecolor=Grå
Next
Någon som vet hur man skriver en sådan grej?
/AlexanderSv: Listbox - For each
<code>
lst.Columns.Add("Namn", 100, HorizontalAlignment.Left)
lst.View = View.Details
lst.FullRowSelect = True
lst.Items.Add("Per Hultqvist1")
lst.Items.Add("Per Hultqvist2")
lst.Items.Add("Per Hultqvist3")
lst.Items.Add("Per Hultqvist4")
lst.Items.Add("Per Hultqvist5")
lst.Items.Add("Per Hultqvist6")
ColorListview()
</code>
Och sen själva funktionen som fixar färgerna (OBS byt färger, mitt färgval var inget vidare :-):
<code>
Private Sub ColorListview()
Dim li As ListViewItem
Dim i As Integer
For Each li In lst.Items
If i Mod 2 = 0 Then
li.BackColor = System.Drawing.Color.Gray
Else
li.BackColor = System.Drawing.Color.Yellow
End If
i += 1
Next
End Sub
</code>
/Per HultqvistSv: Listbox - For each
Varför använda mode för detta? Har för mig att det är en väldigt resurskrävande operation i förhållande till AND som ger samma resultat?
<code>
Private Sub ColorListview()
Dim li As ListViewItem
Dim i As Integer
For Each li In lst.Items
If i And 1 Then
li.BackColor = System.Drawing.Color.Gray
Else
li.BackColor = System.Drawing.Color.Yellow
End If
i += 1
Next
End Sub
</code>
HAr inte vb tillgängligt. Mins inte heller hur syntaxet för binär And är i VB.Net. Har för mig att And blev enbart logisk i Beta 1. Men sedan ändrad i releasen.
Annars funkar det lika väl med en boolean. Slipper man problem med overflow:
<code>
Private Sub ColorListview()
Dim li As ListViewItem
Dim i As Boolean
For Each li In lst.Items
If i Then
li.BackColor = System.Drawing.Color.Gray
Else
li.BackColor = System.Drawing.Color.Yellow
End If
i = Not i
Next
End Sub
</code>Sv: Listbox - For each
Men jag tar väl en fråga till...
Kan man istället för ändra färg stoppa in en liten grafiksymbol innan texten börjar.
Olika symboler beroende på vad det är för text.Sv: Listbox - For each
lst.SmallImageList=ImageList1
li.ImageIndex=0
/Per HultqvistSv: Listbox - For each
Hur som helst, boolean är snyggare i det här fallet, men Mod tekniken är mer generell efter som man kan ändra siffran 2 till 10 och så utförs if-satsen var 10:e gång. Därför använder jag den även i det här fallet. Jag orkar inte jaga millisekunder om det inte behövs.
Overflow på en Integer är inget jag oroar mig för i .Net när den används när man loopar igenom en ListView. ListView:n kommer att köra minnet i botten långt innan loopvariabeln slår bakut.
Dock : Jag bestrider absolut inte dina poänger...bara försvarar min kod :-)
/Per Hultqvist
Ps. Du har även rätt i att And var både logisk och bitwise i de allra första versionerna, sen testades BitAnd, BitOr o s v i en betaversion (eller RC) men de drogs tillbaka.