我有一个从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
//...
}
}
}