我有一个WinForm-UserControl,它具有控件的泛型类型。为了创建实例,我更改了Designer代码:
public class TimeBarForm<T> : where T : TimeBarPanel
{
protected void InitializeComponent()
{
// ...
this.m_timeBarPanel = (T)Activator.CreateInstance(typeof(T));
// ...
}
}
这在编译时工作正常,但在设计时它已经坏了。在TimeBarForm上:
Failed to parse method 'InitializeComponent'. The parser reported the following error
'Type parameters are not suppported Parameter name: typeSymbol'.
Please look in the Task List for potential errors.
派生类只显示空用户控件的默认设计器。
我也尝试在构造函数中传递类型,但VS抱怨我不应该触摸自动生成的代码(它不喜欢if条件)。我想要一个通用的UserControl,在那里我可以决定派生类型中抽象类/控件的特化,我仍然可以在基类中使用设计器。我愿意接受其他建议来解决这个问题,因为这可能不是最佳解决方案。我不习惯UserControl-design。
VS 2015 / .Net 4.6
答案 0 :(得分:0)
我做了一些有点脏的解决方法,但我可以使用设计器作为基类和派生类。我删除了泛型,并通过调用构造函数替换了Activator类。当我完成基类的设计时,我就会对这一行进行修改。派生类调用构造函数来传递实例:
public TimeBarForm(TimeBarPanel timeBarPanel)
{
this.m_timeBarPanel = timeBarPanel;
InitializeComponent();
}
为了使派生类的设计者满意,第二个构造函数提供了一个默认实例:
public TimeBarForm()
{
this.m_timeBarPanel = new TimeBarPanel();
InitializeComponent();
}
不漂亮,但我可以忍受它。