Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Colore Item Selezionato Listbox
venerdì 06 gennaio 2006 - 23.00
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
lore84
Profilo
| Newbie
18
messaggi | Data Invio:
ven 6 gen 2006 - 23:00
Ciao a tutti!
Avevo bisogno di sapere se qualcuno conosce un modo (anche utilizzando le API) per modificare il colore dell'elemento selezionato all'interno di una listbox (lo standard Win è sfondo blu con testo bianco).
Inoltre, già che ci siamo, qualcuno sa qual è il modo (ammesso che esista) per modificare il colore del bordo (non 3d) sempre di una listbox? di default è nero e stona un po' con il colore dell'applicazione =)
Grazie a tutti in anticipo!
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
sab 7 gen 2006 - 08:57
Questo esemplificato cambia il colore in base al valore dell'item.
...
AddHandler Me.listBox1.DrawItem, AddressOf Me.ListBox1DrawItem
...
..
Private Sub ListBox1DrawItem(sender As System.Object, e As System.Windows.Forms.DrawItemEventArgs)
Dim list As ListBox = DirectCast(sender, ListBox)
Dim row As DataRow = DirectCast(list.Items(e.Index), DataRowView).Row
Dim textBrush As Brush
e.DrawBackground()
Try
Me.statusBar1.Text = row("Valore").ToString
Select Case (DirectCast(row("Valore"), Integer))
Case 0
textBrush = Brushes.Red
Case 1
textBrush = Brushes.Green
Case 2
textBrush = Brushes.Blue
Case 3
textBrush = Brushes.Orange
End Select
e.Graphics.DrawString(DirectCast(row("Descrizione"), String), list.Font, textBrush, _
New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, _
e.Bounds.Height))
e.DrawFocusRectangle()
Catch
End Try
End Sub
lore84
Profilo
| Newbie
18
messaggi | Data Invio:
sab 7 gen 2006 - 11:07
Ciao,
innanzitutto grazie per la risposta!
purtroppo il codice sembra non avere effetto, probabilmente sono io che sbaglio da qualche parte. Innanzitutto, la riga:
AddHandler lstTipi.DrawItem, AddressOf lstTipi_DrawItem
dove devo posizionarla?
grazie mille ancora
________________________________
Smell the flowers (while you can)
lore84
Profilo
| Newbie
18
messaggi | Data Invio:
sab 7 gen 2006 - 11:26
ho risolto il problema del testo, ho trovato questo codice sulla MSDN online e funziona SOLO se si imposta la proprietà DrawMode con uno dei valori OwnerDraw (Fixed o Variable):
' Disegna lo sfondo del singolo elemento della lista
e.DrawBackground()
' Crea un nuovo oggetto brush, per scrivere il testo
' relativo al singolo elemento
Dim bTool As Brush
' Seleziona il colore del singolo elemento, a seconda
' dell'elemento stesso
Select Case (e.Index)
Case 0
bTool = Brushes.Red
Case 1
bTool = Brushes.Orange
Case 2
bTool = Brushes.Purple
End Select
' Disegna l'elemento corrente, specificando testo, carattere,
' oggetto brush, e il rettangolo di layout
e.Graphics.DrawString(lstTipi.Items(e.Index), e.Font, bTool, New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
' Disegna il fuoco attorno all'elemento selezionato, se la
' listbox è attiva
e.DrawFocusRectangle()
ora proverò a vedere se in questo modo posso anche cambiare il colore del rettangolo del fuoco, se trovo la soluzione la posto nel caso a qualcuno interessasse!
Se avete suggerimenti, postate pure grazi mille
Lore
________________________________
Smell the flowers (while you can)
lore84
Profilo
| Newbie
18
messaggi | Data Invio:
dom 8 gen 2006 - 19:14
per chi fosse interessato, posto la soluzione al mio problema =)
Dim tBrush As Brush ' Tavola per il colore del testo
Dim fBrush As Brush ' Tavola per il colore di sfondo
Dim iRect As RectangleF ' Rettangolo per la gestione delle aree di colore
Dim iText As String ' Testo da visualizzare
Dim i As Integer ' Indice per lo scorrimento degli elementi della lista
' Pulisci la lista
e.Graphics.Clear(Color.Linen)
' Disegna il bordo del controllo
ControlBorder(lstTipi, Drawing2D.DashStyle.Solid, Color.RosyBrown)
' Scorri tutti gli elementi della lista
For i = 0 To (lstTipi.Items.Count - 1)
' Crea l'oggetto rettangolo delle dimensioni dell'elemento corrente
iRect = New RectangleF(lstTipi.GetItemRectangle(i).X + 1, lstTipi.GetItemRectangle(i).Y + 1, lstTipi.GetItemRectangle(i).Width - 2, lstTipi.GetItemRectangle(i).Height - 2)
' Se l'elemento corrente è quello selezionato
If lstTipi.Items.IndexOf(lstTipi.Items(i)) = e.Index Then
' Imposta le tavole con i colori relativi all'elemento selezionato
fBrush = Brushes.RosyBrown ' Colore sfondo
tBrush = Brushes.Linen ' Colore testo
iText = " » " & lstTipi.Items(i) ' testo da visualizzare
Else
' Altrimenti imposta le tavole con i colori relativi all'elemento non selezionato
fBrush = Brushes.Linen ' Colore sfondo
tBrush = Brushes.RosyBrown ' Colore testo
iText = " " & lstTipi.Items(i) ' Testo da visualizzare
End If
' Riempi l'area del rettangolo
e.Graphics.FillRectangle(fBrush, iRect)
' Scrivi il testo da visualizzare
e.Graphics.DrawString(iText, lstTipi.Font, tBrush, iRect)
' Annulla l'oggetto rettangolo
iRect = Nothing
Next
a presto!
lore
________________________________
Smell the flowers (while you can)
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !