所有者绘制的ListView不断重绘

时间:2015-03-14 17:28:57

标签: c# .net winforms listview ownerdrawn

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

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

虽然上面的代码有效,但只要可见,listview就会不断重绘。知道为什么吗?

编辑:问题在于我修改了所有者绘制处理程序中的子项文本。使用E.Graphics.DrawString来渲染文本而不是修复问题。

1 个答案:

答案 0 :(得分:1)

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

如果您需要修改数据,则需要另外的事件。