用C#listview控件Details类型,发现当拉动表头调整列宽度过程时,listview会重画,造成不停的闪烁.有什么方法让它在宽度调整完后之后,listview才重画
1条回答 默认 最新
你知我知皆知 2024-08-02 01:54关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题可以通过使用
UpdateLayout()和Invalidate()的方法来解决。UpdateLayout()会在列表视图的布局发生改变时调用,而Invalidate()则会通知列表视图重新绘制。以下是一个简单的示例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ListViewWidthExample { class Program { static void Main(string[] args) { List<Details> details = new List<Details>(); // Add some data to the list var listView = new ListView(); listView.Details = details; listView.SelectedIndexChanged += ListView_SelectedIndexChanged; listView.Location = new Point(0, 0); listView.Size = new Size(250, 100); listView.UpdateLayout(); while (true) // Keep updating until we're done { listView.Invalidate(); listView.UpdateLayout(); } } static void ListView_SelectedIndexChanged(object sender, EventArgs e) { // Do something when the list view is selected } } public class Details { public string Column1 { get; set; } public int Column2 { get; set; } public double Column3 { get; set; } } }在这个例子中,我们创建了一个新的列表视图,并将一个包含两列的数据对象添加到列表中。然后我们为列表视图绑定了一个事件处理器,当用户选择列表中的行时,这个事件就会被触发。
在事件处理程序中,我们可以检查用户是否已经选择了某个行。如果是的话,我们就调用
ListView.UpdateLayout()方法,这样列表视图就会更新其布局并计算出正确的列宽。如果用户没有选中任何行,那么我们就可以直接进行更新。注意:这只是一个基本的例子,实际的应用可能会更复杂,例如可能需要处理更多的数据,或者可能需要处理更复杂的事件。
解决 无用评论 打赏 举报