我开发了一个使用PDA的InputPanel与用户进行交互的控件。代码的相关部分如下:

namespace MyNamespace
{
     // ...
     using Microsoft.WindowsCE.Forms;
     // ...

     public class MyControl
     {
         // ...
         public InputPanel MyPanel { get; set; }
         // ...
     }
}

每当我尝试将Control拖到Form时,都会出现以下错误:

System.IO.FileNotFoundException:可以
无法加载文件或程序集
‘Microsoft.WindowsCE.Forms,
版本= 2.0.0.0,文化=中性,
PublicKeyToken = 969db8053d3322ac”或
它的依赖项之一。系统
找不到指定的文件。文件
名称:‘Microsoft.WindowsCE.Forms,
版本= 2.0.0.0,文化=中性,
PublicKeyToken = 969db8053d3322ac”

如果我从InputPanel中删除了MyControl行,则可以毫无问题地将其添加到Form中。添加了Control后,我可以再次添加该行,整个程序可以编译并正常运行。

一旦在设计器中查看了带有Control的表单,它就会崩溃,并产生与上述类似的错误,并且我无法将其再次添加到其他Form中。

我将Visual Studio 2008 SP1与Windows Mobile 6 SDK一起使用。

所以我的问题是:有人遇到过类似的问题或找到了解决方法吗?

编辑:放弃并使用父窗体作为属性。该窗体实现了IInputPanel,它基本上是一个与InputPanel getter的接口(interface)。但是,ctake的回答确实很有见识,并向我介绍了XMTA。

最佳答案

这是因为台式机没有SIP(输入面板),因此设计人员无法显示它。您需要将XMTA中的DesktopCompatible属性设置为false。

编辑:我想我应该扩展这个答案。设置DesktopCompatible属性将阻止设计器直接查询该属性,但是如果控件中有任何可以调用它的代码(因此,如果将在设计器中运行的任何代码都可以执行CE特定的代码),则还必须添加代码来防止这种情况。通过Environment.OSVersion.Platform检查当前平台的效果很好,尽管还有其他更复杂的机制也可以确定您是否在设计器中。

10-08 01:05