【问题标题】:Owner-drawn ListView constantly redraws所有者绘制的 ListView 不断重绘
【发布时间】:2015-03-14 17:28:57
【问题描述】:

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

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 来渲染文本解决了这个问题。

【问题讨论】:

  • 我没有看到你在做除了默认绘图之外的任何绘图。在绘画事件中更改数据通常是个坏主意。
  • 在绘图事件中更改数据 明确指出:不要更改绘图/绘图事件中的文本!
  • @LarsTech,哎呀,这显然是问题所在。手动绘制所需的字符串可以解决问题。

标签: c# .net winforms listview ownerdrawn


【解决方案1】:

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

如果你需要修改数据,你需要一个不同的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多