代码之家  ›  专栏  ›  技术社区  ›  shadeMe

所有者绘制的ListView不断刷新

  •  1
  • shadeMe  · 技术社区  · 10 年前

    我已经使用以下处理程序设置了一个基本的所有者绘制列表视图(在详细信息模式下):

    void SinkHandlerDrawColumnHeader(Object Sender, DrawListViewColumnHeaderEventArgs E)
    {
         E.DrawDefault = true;
    }
    
    void SinkHandlerDrawItem(Object Sender, DrawListViewItemEventArgs E)
    {
        E.DrawDefault = true;
        TrackingMessage Data = (TrackingMessage)E.Item.Tag;
        E.Item.SubItems[0].Text = Data.Line().ToString();
        E.Item.SubItems[1].Text = Data.Message();
    }
    
    void SinkHandlerDrawSubItem(Object Sender, DrawListViewSubItemEventArgs E)
    {
        E.DrawDefault = true;
    }
    

    虽然上面的代码有效,但只要列表视图可见,它就会不断地被重新绘制。知道为什么吗?

    编辑:问题是我修改了所有者绘制处理程序中的子项文本。相反,使用E.Graphics.DrawString渲染文本解决了这个问题。

    1 回复  |  直到 10 年前
        1
  •  1
  •   LarsTech    10 年前

    根据我的评论,在绘制事件中更改数据通常是一个糟糕的设计。绘制事件应该只绘制,而很少其他。通过更改绘制事件中的数据,可以强制绘制事件一次又一次地绘制自己。

    如果需要修改数据,则需要不同的事件。

    推荐文章