Sembra che non ci sia nessuno che sia interessato a personalizzare un ListView
per sostenere Grid Line Color
. Ho provato questo e voglio condividere qui. Non è molto buono con un piccolo sfarfallio (non molto) quando si scorrono gli oggetti di ListView. Comunque è accettabile. Penso che mi manca un po 'di conoscenza della win32
qui per renderlo più perfetto:
public class CustomListView : ListView {
bool scrollDown;
int lastScroll;
public Color GridLinesColor {get;set;}
[DllImport("user32")]
private static extern int GetScrollPos(IntPtr hwnd, int nBar);
public CustomListView(){
GridLinesColor = Color.Red;
DoubleBuffered = true;
base.GridLines = false;//We should prevent the default drawing of gridlines.
}
public new bool GridLines {get;set;}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x20a){//WM_MOUSEWHEEL = 0x20a
scrollDown = (m.WParam.ToInt64() >> 16) < 0;
}
if (m.Msg == 0x115){//WM_VSCROLL = 0x115
int n = (m.WParam.ToInt32() >> 16);
scrollDown = n > lastScroll;
lastScroll = n;
}
base.WndProc(ref m);
if (m.Msg == 0xf && GridLines && Items.Count > 0&&View==View.Details)//WM_PAINT = 0xf
{
using (Graphics g = CreateGraphics())
{
using(Pen p = new Pen(GridLinesColor)){
int w = -GetScrollPos(Handle, 0);
for (int i = 0; i < Columns.Count; i++)
{
w += Columns[i].Width;
g.DrawLine(p, new Point(w, 0), new Point(w, ClientSize.Height));
}
int a = Items[0].Bounds.Bottom - 1;
int b = Height - Items[0].Bounds.Y;
int c = Items[0].Bounds.Height;
for (int i = scrollDown ? a + (b/c) * c : a ; scrollDown ? i >= a : i < b ; i += scrollDown ? -c : c)
{
g.DrawLine(p, new Point(0, i), new Point(ClientSize.Width, i));
}
}
}
}
}
}
UPDATE: Grazie al suggerimento di Cody Grey, ho aggiunto il codice per gestire lo scorrimento orizzontale. Io uso GetScrollPos
per semplicità perché, come raccomandato dalla pagina di documentazione MSDN, dovremmo usare invece GetScrollInfo
.
fonte
2013-08-17 04:29:40
Questo forse? http://stackoverflow.com/questions/1814692/change-the-background-color-of-winform-listview-headers – RenniePet
O questo? http://stackoverflow.com/questions/6008226/are-there-any-good-and-free-devexpress-data-grid-alternatives-for-winforms – RenniePet
@RenniePet: mi scusi ma puoi vedere che entrambi gli argomenti hai fornito sono lontani dalla mia domanda? uno per decexpress e l'altro risolve solo il problema del colore Header, che dire di quelle linee della griglia? –