k1995888 2014-05-11 01:19 采纳率: 0%
浏览 2191

用C#listview控件Details类型,发现当拉动表头调整列宽度过程时,listview会

用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()方法,这样列表视图就会更新其布局并计算出正确的列宽。如果用户没有选中任何行,那么我们就可以直接进行更新。

    注意:这只是一个基本的例子,实际的应用可能会更复杂,例如可能需要处理更多的数据,或者可能需要处理更复杂的事件。

    评论

报告相同问题?