Cerca Totem's Lair su Facebook



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: Quanto detto vale anche per ComboBox, CheckedListBox, ListView e tutte le liste in generale che espongono l'evento DrawItem.