列表视图设计器中的重复组



我有一个从ListView派生的自定义控件(比如MyListView)。在设计器模式下,我在其中定义了几个ListViewGroup。遗憾的是,如果我以后在窗体上使用此控件,则每当我打开此窗体的设计器时,它都会向MyListView控件添加同一组组。因此,经过一些编辑后,其中有大量重复的组。

表单设计者(毫不奇怪)似乎无法识别组已经添加到MyListView构造函数中而不是表单本身中,因此它不应该添加代码以InitializeComponent()生成它们。我可以以某种方式防止这种情况吗?

这是因为您在构造函数中添加了组,该构造函数也在设计时运行,并且它们的值保存在窗体的 Designer.cs 文件中。 构造函数运行得太早,因此您无法看到稍后由 InitializeComponent() 添加哪些组。 并且它运行得太早,无法获得代码在设计模式下运行的可靠指示,DesignMode 属性仍然是假的。

正确的解决方法是为控件提供自己的设计器,但这非常痛苦,尤其是对于 ListView。 便宜的解决方法是推迟添加组并使用在 InitializeComponent 之后运行的事件。 HandleCreated 事件对此很有好处。 喜欢这个:

class MyListView : ListView {
    protected override void OnHandleCreated(EventArgs e) {
        base.OnHandleCreated(e);
        if (this.DesignTime && this.Groups.Count == 0) {
            // Add the groups here
            //...
        }
    }
}

最新更新