Per personalizzare l'aspetto della ColumHeader sulla classe/controllo ListView è necessario (almeno per la mia soluzione) impostare la proprietà ListView.OwnerDraw a True.
Questa cosa (OwnerDraw a True) comporta la necessità di gestire appunto il disegno del controllo e dei suoi elementi.
E' necessario pertanto sottoscrivere e gestire due eventi entrambi legati alla ListView
- ListView.DrawColumnHeader
- ListView.DrawSubItem
Riservati rispettivamente al disegno della ColumHeader e del Subitem
Sottoscrizione evento:
C#
listView1.DrawColumnHeader += new DrawListViewColumnHeaderEventHandler(lv_DrawColumnHeader);
listView1.DrawSubItem += new DrawListViewSubItemEventHandler(lv_DrawSubItem);
VB.NET
AddHandler listView1.DrawColumnHeader, New DrawListViewColumnHeaderEventHandler(AddressOf lv_DrawColumnHeader)
AddHandler listView1.DrawSubItem, New DrawListViewSubItemEventHandler(AddressOf lv_DrawSubItem)
Nel gestore dell'evento si provvede al "Draw" dell'oggetto interessato.
C#
void lv_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
if ((e.ItemState & ListViewItemStates.Focused) > 0)
{
e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
e.Graphics.DrawString(e.Item.SubItems[e.ColumnIndex].Text, listView1.Font, SystemBrushes.HighlightText, e.Bounds);
}
else
{
e.DrawBackground();
e.DrawText();
}
}
void lv_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
Brush brsh;
switch (e.ColumnIndex) {
case 0:
brsh = Brushes.Gold;
break;
case 1:
brsh = Brushes.AliceBlue;
break;
case 2:
brsh = Brushes.YellowGreen;
break;
default:
brsh = Brushes.Azure;
break;
}
e.Graphics.FillRectangle(brsh, e.Bounds);
e.DrawText();
}
Il progetto di esempio è stato realizzato con SharpDevelop, il progetto è comunque compatibile con qualsiasi versione di Visual Studio 2008, non facendo uso di classi e metodi introdotti con il Framework 3 non ci dovrebbero essere problemi anche con Visual Studio 2005.
Il progetto di esempio realizzato con VB.NET
Il progetto di esempio realizzato con C#
Nessun commento:
Posta un commento