我有一个基本的所有者绘制的列表视图(在详细信息模式下),使用以下处理程序进行设置:
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来渲染文本而不是修复问题。
答案 0 :(得分:1)
根据我的评论,在paint事件中更改数据通常是一个糟糕的设计。油漆事件应该只是绘画,而其他很少。通过更改paint事件中的数据,您强制paint事件一次又一次地绘制自己。
如果您需要修改数据,则需要另外的事件。