4

使用常用控件 6 在列表视图中绘制网格线存在问题。当我尝试使用鼠标向下滚动列表页面或向上翻页时会发生这种情况。

截屏
(来源:rsdn.ru

我只能找到这个讨论http://www.ureader.com/msg/1484143.aspx,但解决方案并不完美

  1. LVS_EX_DOUBLEBUFFER 对我不起作用
  2. 禁用平滑滚动对我不起作用
  3. 滚动无效确实有效,但闪烁不好
  4. 禁用网格线确实有效,但没有它们,列表看起来不太好。

还有其他选择吗?谢谢!

4

5 回答 5

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();
    }
}

这有轻微的闪烁,但它比网格线完全混乱要好得多。

于 2009-09-14T08:02:38.980 回答
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);
  }
于 2009-09-15T02:27:07.690 回答
0

这是自 2001 年以来的 Win32 Usenet 常见问题解答,请参阅 Google Groups : Win32 Listview , C code (MS)

于 2009-09-18T16:37:01.977 回答
0

我有一个从 VB6 转换为 MS Vs2005 的项目,当我从项目属性 -> 应用程序设置中启用“启用 XP 视觉样式”时,它有同样的问题。然后我禁用该功能,它解决了问题。

于 2009-10-21T19:10:37.397 回答
0

您不能只是使控件无效并在用户完成滚动时重绘它吗?我不记得确切是如何做到这一点的,但我以前也遇到过类似的问题,我就是这样处理的。

于 2011-03-06T03:05:39.400 回答