使用常用控件 6 在列表视图中绘制网格线存在问题。当我尝试使用鼠标向下滚动列表页面或向上翻页时会发生这种情况。
(来源:rsdn.ru) 。
我只能找到这个讨论http://www.ureader.com/msg/1484143.aspx,但解决方案并不完美
- LVS_EX_DOUBLEBUFFER 对我不起作用
- 禁用平滑滚动对我不起作用
- 滚动无效确实有效,但闪烁不好
- 禁用网格线确实有效,但没有它们,列表看起来不太好。
还有其他选择吗?谢谢!
使用常用控件 6 在列表视图中绘制网格线存在问题。当我尝试使用鼠标向下滚动列表页面或向上翻页时会发生这种情况。
(来源:rsdn.ru) 。
我只能找到这个讨论http://www.ureader.com/msg/1484143.aspx,但解决方案并不完美
还有其他选择吗?谢谢!
ObjectListView - 一个简单的.NET WinForms ListView 的开源包装器 - 解决了这个问题(以及许多其他问题)。
如果你想在自己的代码中修复它,你需要监听LVN_ENDSCROLL
. 在结束滚动的处理程序中,执行以下操作:
protected void HandleEndScroll(ref Message m) {
// There is a bug in ListView under XP that causes the gridlines to be
// incorrectly scrolled when the left button is clicked to scroll.
// This is supposedly documented at KB 813791, but I couldn't find it.
if (!ObjectListView.IsVista &&
Control.MouseButtons == MouseButtons.Left &&
this.GridLines) {
this.Invalidate();
this.Update();
}
}
这有轻微的闪烁,但它比网格线完全混乱要好得多。
我选择继承 listview 并处理 WM_VSCROLL 消息:
WORD x=LOWORD(wParam);
if(iMsg==WM_VSCROLL && (x==SB_PAGEDOWN || x==SB_PAGEUP || x==SB_LINEDOWN || x==SB_LINEUP))
{
InvalidateRect(hDlg, 0, true);
UpdateWindow(hDlg);
}
这是自 2001 年以来的 Win32 Usenet 常见问题解答,请参阅 Google Groups : Win32 Listview , C code (MS)
我有一个从 VB6 转换为 MS Vs2005 的项目,当我从项目属性 -> 应用程序设置中启用“启用 XP 视觉样式”时,它有同样的问题。然后我禁用该功能,它解决了问题。
您不能只是使控件无效并在用户完成滚动时重绘它吗?我不记得确切是如何做到这一点的,但我以前也遇到过类似的问题,我就是这样处理的。