使用常用控件在listview中绘制网格线时出现问题6.当我尝试向下滚动列表页面或使用鼠标向上翻页时会发生这种情况。
(来源:rsdn.ru)。
我只能找到这个讨论http://www.ureader.com/msg/1484143.aspx,但解决方案并不完美
还有其他选择吗? 谢谢!
答案 0 :(得分:2)
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();
}
}
这有轻微的闪烁,但它比网格线完全混乱要好得多。
答案 1 :(得分:1)
我选择了子类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);
}
答案 2 :(得分:0)
这是自2001年以来的Win32 Usenet常见问题解答,请参阅Google网上论坛:Win32 Listview,C代码(MS)
答案 3 :(得分:0)
我有一个从VB6转换为MS Vs2005的项目,当我从项目属性启用“启用XP视觉样式”时,它有同样的问题 - >应用设置。 然后我禁用了该功能,它解决了问题。
答案 4 :(得分:0)
你不能让控件无效并在用户完成滚动时重绘它吗?我不记得究竟该怎么做,但之前我遇到过类似的问题,这就是我如何处理它。