自绘ListView不断重绘

Owner-drawn ListView constantly redraws

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

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 呈现文本而不是解决了问题。

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

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