Visual Form Inheritance 不适用于 Visual Studio 2008 中的智能设备/紧凑框架



当我尝试在Visual Studio 2008中为Windows CE应用程序创建继承窗体时,我收到错误消息:

无法显示此文件的设计器,因为无法设计其中的任何类。设计器检查了文件中的以下类: TestForm --- 无法加载基类"InheritanceTest.BaseForm"。确保已引用程序集,并且已生成所有项目。

Visual Studio 2008, Version 9.0.30729.1 SP
Microsoft .NET Framework 版本 3.5 SP1。

我可以在不编写任何代码的情况下解决问题,也无需以任何方式自定义表单。无论 BaseForm 是在同一项目中还是在单独的类库中,都没有区别。项目编译正常,问题在于在设计器中查看继承的表单。它发生在我的两台计算机上。我正在使用 C#。

获取问题的过程:
文件 - 新建项目 - Windows C# - 智能设备 - CeInheritanceTest (.Net Framework 3.5)
目标平台 - 视窗 CE - 设备应用程序
添加 – 新项 - Visual C# 项 - Windows 窗体 - Windows 窗体 - "BaseForm"
构建解决方案
添加 – 新项 - Visual C# 项 - Windows 窗体 – 继承窗体 – "测试窗体"
- 继承自基窗体

如果我对普通桌面应用程序做同样的事情,表单继承没有问题。

通过在网上搜索这个问题,看起来其他人正在使用紧凑框架进行表单继承工作,所以我一定错过了一些东西。

我没有编写或修改任何代码,所以基类不是抽象的,也没有使用 PInvoke。

有什么建议吗?

出现

此问题的原因是,不会自动创建 .NET CF 控件的设计器元数据并将其编译到项目中,以便减小设备的二进制大小。您必须手动创建所谓的"设计时属性文件"。

在包含基窗体的项目中,添加一个新项。从已安装模板列表中选择"设计时属性文件"。它将有一个.xmta扩展名。如果你打开它,你会注意到它是一个 xml 文件。您可以向此文件添加大量选项来控制自定义控件/窗体的设计和序列化方式,并且可以查找有关此内容的更多信息,但是如果您只想能够设计窗体,则只需添加一个属性:DesktopCompatible=True。

下面是一个示例:

<Classes xmlns="http://schemas.microsoft.com/VisualStudio/2004/03/SmartDevices/XMTA.xsd">
  <Class Name="CeInheritanceTest.BaseForm">    
    <DesktopCompatible>true</DesktopCompatible>
 </Class>
</Classes>

确保"类"节点中的名称是基窗体的完全限定名称。编译你的项目,你应该能够在设计器中打开它。您还会注意到,项目的输出文件夹中有一个扩展名为 .asmmeta.dll 的新程序集。此程序集包含对具有可设计零部件的库的设计器支持。Visual Studio 在尝试设计 .NET CF 组件时会自动加载它。

我也

努力寻找这个问题的解决方案,我终于解决了它。除了添加真对于基本窗体,您应该将以下内容添加到基本窗体的 Load 方法中:

if (this.Site != null && this.Site.DesignMode == true)
{
  // Design Mode
}
else
{
  // Run-time
}

这会阻止设计器执行 Load 事件处理程序中的代码。还有一件事,如果在继承的窗体中 设计器.cs 下一个是添加的

这。Load += new System.EventHandler(this.BaseForm_Load);这。关闭 += new System.ComponentModel.CancelEventHandler(this.BaseForm_Closing);

删除这些行,否则会出现错误at System.ComponentModel.Design.ServiceContainer.AddService(Type serviceType, ServiceCreatorCallback callback, Boolean promote)

相关内容

最新更新