自绘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 呈现文本而不是解决了问题。
根据我的评论,在绘画事件中更改数据通常是一个糟糕的设计。绘画事件应该只是绘画,其他很少。通过更改绘画事件中的数据,您迫使绘画事件一次又一次地绘制自己。
如果需要修改数据,需要不同的事件。
我有一个基本的所有者描述的列表视图(在详细信息模式下)设置了以下处理程序:
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 呈现文本而不是解决了问题。
根据我的评论,在绘画事件中更改数据通常是一个糟糕的设计。绘画事件应该只是绘画,其他很少。通过更改绘画事件中的数据,您迫使绘画事件一次又一次地绘制自己。
如果需要修改数据,需要不同的事件。