如何在ListView的null SmallImageList属性之后删除图标空间

时间:2010-07-06 15:43:38

标签: winforms listview

问题是,一旦SmallImageList设置为imgList1,它就永远不会 “释放”图标间距,即使SmallImageList设置为null也是如此。 无论是否有图标,该项目始终缩进。

任何解决方案?

2 个答案:

答案 0 :(得分:4)

这是一件不寻常的事情,.NET ListView包装器无法处理它。您可以尝试重新创建本机Windows控件以重置它。不确定这会产生副作用,你必须尝试。在项目中添加一个新类并粘贴下面显示的代码。编译。从工具箱顶部删除新控件,替换原始控件。

using System;
using System.Windows.Forms;

class MyListView : ListView {
    public new ImageList SmallImageList {
        get { return base.SmallImageList; }
        set {
            base.SmallImageList = value;
            if (value == null && base.IsHandleCreated) this.RecreateHandle();
        }
    }
}

答案 1 :(得分:0)

感谢汉斯的解决方案。下面的代码遵循他的示例,但使用反射调用RecreateHandle方法。

this.listView1.SmallImageList = null;
MethodInfo mInfo = this.listView1.GetType().GetMethod(
    "RecreateHandle", BindingFlags.Instance | BindingFlags.NonPublic);
mInfo.Invoke(this.listView1, null);

HTH!