【发布时间】: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