ListView设计器中的重复组

时间:2012-11-20 13:34:46

标签: c# winforms listview

我有一个源自ListView的自定义控件(比如MyListView)。在设计器模式中,我在其中定义了几个ListViewGroup。不幸的是,如果我稍后在表单上使用此控件,每当我打开此表单的设计器时,相同的组添加到MyListView控件。因此,经过一些编辑后,其中会有大量重复的组。

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

1 个答案:

答案 0 :(得分:0)

这是因为您在构造函数中添加了组,这些组也在设计时运行,并且它们的值将保存在表单的Designer.cs文件中。构造函数运行得太早,以至于您无法通过InitializeComponent()查看将添加哪些组。它运行得太早,无法获得代码在设计模式下运行的可靠指示,DesignMode属性仍为false。

正确的解决方法是为控件提供自己的设计器,但这非常痛苦,特别是对于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
            //...
        }
    }
}