Font e disegni nelle liste
È possibile modificare il font e anche il modo in cui un elemento di lista viene disegnato usando l'evento DrawItem. In questo evento andranno scritte tutte le istruzioni grafiche per disegnare realmente l'item. Per abilitare l'evento, è necessario modificare la proprietà DrawMode su OwnerDrawFixed (ossia la renderizzazione di ogni elemento viene deputata al codice che il programmatore scrive, ma la lista mantiene comunque una larghezza fissa). Successivamente, si può scrivere il codice, ad esempio:
Private Sub ListBox1_DrawItem(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
'In questo evento dobbiamo disegnare noi stessi gli elementi
'scrivendo il codice opportuno
'Rect rappresenta il rettangolo in cui è contenuto l'elemento
Dim Rect As Rectangle = e.Bounds
'Fnt rappresenta il font con cui l'elemento deve essere scritto
Dim Fnt As Font = e.Font
'Disegna lo sfondo azzurro per i posti dispari e bianco per
'quelli pari
If (e.Index + 1) Mod 2 Then
'La procedura DrawBackground disegna il normale sfondo
'dell'elemento, ossia un normale rettangolo bianco
e.DrawBackground()
Else
'Per i posti dispari, invece, lo disegna azzurro
e.Graphics.FillRectangle(Brushes.LightSkyBlue, Rect)
End If
'Sappiamo che all'indice 0 e all'indice 3 ci sono dei separatori
'quindi evidenziamo il nome col grassetto per questi indici
If e.Index = 0 Or e.Index = 3 Then
'Usiamo un overload di DrawString he accetta come primo parametro
'la stringa da scrivere, che in questo caso indichiamo con
'l'elemento corrente; come secondo parametro un oggetto Font
'che inizializziamo in linea rendendolo grassetto; come terzo
'paramtro un oggetto Brushes; e come quarto il rettangolo dove
'disegnare la stringa
e.Graphics.DrawString(ListBox1.Items(e.Index), New Font(Fnt, _
FontStyle.Bold), Brushes.Blue, Rect)
Else
'Altrimenti disegna normalmente
e.Graphics.DrawString(ListBox1.Items(e.Index), Fnt, _
Brushes.Black, Rect)
End If
End Sub
L'oggetto e espone tutte le proprietà necessaria a questo compito:
- BackColor : restituisce il colore di sfondo preimpostato nel designer
- Bounds : restituisce un rettangolo indicante l'area occupata dall'elemento
- Font : restituisce il font preimpostato del designer
- ForeColor : restituisce il colore del testo preimpostato nel designer
- Graphics : restituisce l'oggetto Graphics associato al controllo e permette quindi di operare tutte le manipolazioni necessarie al disegno. Dato che è possibile utilizzare ogni suo metodo, nulla vieta di disegnare anche altre cose a parte il testo e lo sfondo. Ad esempio si possono disegnare icone o immagini prese da un'ImageList
- Index : restituisce l'indice dell'elemento che sta per essere disegnato
- State : un enumeratore che permette di sapere lo stato dell'elemento; fra i più usati sono i valori Selected, None, Checked e ComboBoxEdit, che consente di determinare se si stia disegnando la parte di una combobox nella quale è possibile immettere del testo
