Wygląda na to, że nie ma nikogo, kto jest zainteresowany dostosowywania ListView
wspierać Grid Line Color
. Spróbowałem tego i chcę się nim podzielić. Nie jest to dobre dzięki niewielkiemu migotaniu (niezbyt dużo) podczas przewijania elementów ListView. Jednak jest to do przyjęcia. Chyba brakuje pewnej wiedzy o win32
tutaj, aby uczynić go bardziej idealne:
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: Dzięki sugestii Cody Grey I dodaje kod do obsługi przewijania w poziomie. Używam GetScrollPos
dla uproszczenia, ponieważ zgodnie z zaleceniami ze strony dokumentacji MSDN, powinniśmy użyć zamiast tego GetScrollInfo
.
to może być? http://stackoverflow.com/questions/1814692/change-the-background-color-of-winform-listview-headers – RenniePet
Albo to? http://stackoverflow.com/questions/6008226/are-there-any-good-and-free-devexpress-data-grid-alternatives-for-winforms – RenniePet
@RenniePet: przepraszam, ale czy widzisz, że oba tematy podane przez ciebie są dalekie od mojego pytania? jeden dla decexpresji i drugi tylko rozwiązuje problem koloru nagłówka, a co z liniami siatki? –