我有一个源自ListView
的自定义控件(比如MyListView
)。在设计器模式中,我在其中定义了几个ListViewGroup
。不幸的是,如果我稍后在表单上使用此控件,每当我打开此表单的设计器时,将相同的组添加到MyListView
控件。因此,经过一些编辑后,其中会有大量重复的组。
表单设计者(毫不奇怪)似乎无法识别这些组已经添加到MyListView
构造函数中而不是表单本身,因此它不应该添加代码以在{{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
//...
}
}
}