我有一个基类,定义如下(我也使用DevExpress组件):
public abstract partial class BaseFormClass<R> : XtraForm where R : DataRow
{
...
}
与我从其他地方读到的内容相反,我仍然能够设计这门课程。我没有必要从中创建一个具体的类。但是,当我创建一个来自它的具体类(如下所示)时,该类将无法在设计器中工作。
public partial class ConcreteFormClass : BaseFormClass<StronglyTypedRow>
{
...
}
我收到此消息:
无法展示设计师 这个文件因为没有类 在其中可以设计。该 设计师检查了以下内容 文件中的类: ConcreteFormClass ---基础 类 'BaseFormClass' 无法加载。确保 已经引用了程序集 所有项目都已建成。
有没有人见过这个?任何已知的解决方法?
答案 0 :(得分:4)
很抱歉,但这不会起作用(这是一种耻辱 - 我过去曾希望你能做到这一点。)问题是设计师的基本方法。
为了向您展示您的表单模型,它实际上并不尝试构建表单本身;如果它这样做,你会遇到其他问题 - 如果你的表单没有无参数构造函数怎么办?相反,它实际上实例化了表单基类的实例。然后,它会扫描您的InitializeComponents()
方法,并将您在其中定义的所有控件“叠加到”基础表单上。
所以很明显为什么这不起作用。您可以设计BaseFormClass
的实例,因为要设计它,它会创建一个XtraForm
的实例,这是具体的。但是你不能设计ConcreteFormClass
的实例,因为要这样做,它需要创建一个BaseFormClass
的实例,它是抽象的。
最简单的解决方法是让BaseFormClass
非抽象。 (如果你想绝对确定没有人可以创建一个,也许你可以将默认构造函数设为私有?我不确定设计师是否可以处理它,但我不明白为什么它不能。)糟透了,但是这就是人生。抱怨微软,也许它在Visual Studio 2012中会更好。
答案 1 :(得分:0)
这听起来像是一个非常类似的问题,让设计师渲染具有抽象基类的表单。我没有做任何通用的多重继承,但你至少可以尝试my approach并查看它是否有效。
编辑:是的,好的,只是尝试过,我的解决方案确实有效。您只需修改中间类定义和表单定义(包含在#if DEBUG
)
如果你能尝试的话,请告诉我!