gpt4 book ai didi

c# - 通用表单的具体实现在设计器中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:21 24 4
gpt4 key购买 nike

我有一个基类,定义如下(我也在使用 DevExpress 组件):

public abstract partial class BaseFormClass<R> : XtraForm where R : DataRow
{
...
}

与我从其他地方读到的相反,我仍然能够设计这个类。我不必为此创建一个具体的类。但是,当我创建一个从它派生的具体类时(如下所示),该类在设计器中不起作用。

public partial class ConcreteFormClass : BaseFormClass<StronglyTypedRow>
{
...
}

我收到这条消息:

The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file: ConcreteFormClass --- The base class 'BaseFormClass' could not be loaded. Ensure the assembly has been referenced and that all projects have been built.

有没有人见过这个?任何已知的解决方法?

最佳答案

抱歉,但这行不通(真可惜——我过去希望你也能这样做。)问题在于设计师的基本方法。

为了向您展示您的表单模型,它实际上并没有尝试构建表单本身;如果这样做,您会遇到其他问题——如果您的表单没有无参数构造函数怎么办?相反,它实际上实例化了表单基类的一个实例。然后它会扫描您的 InitializeComponents() 方法,并将您在此处定义的所有控件“叠加”到基本表单上。

所以很明显为什么这行不通。您可以设计一个 BaseFormClass 实例,因为要设计它,它会创建一个具体的 XtraForm 实例。但是您不能设计 ConcreteFormClass 的实例,因为这样做需要创建一个抽象的 BaseFormClass 实例。

最简单的解决方法是让 BaseFormClass 成为非抽象的。 (如果你想绝对确保没有人可以创建一个,也许你可以将默认构造函数设为私有(private)?我不确定设计者是否可以处理这个问题,但我不明白为什么它不能。)糟透了,但是这就是人生。向 Microsoft 投诉,也许在 Visual Studio 2012 中会更好。

关于c# - 通用表单的具体实现在设计器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/869941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com