3

PDA を使用InputPanelしてユーザーと対話するコントロールを開発しました。コードの関連部分は次のとおりです。

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

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

を にドラッグしようとするとControlForm次のエラーが表示されます。

System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Microsoft.WindowsCE.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=969db8053d3322ac' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名: 'Microsoft.WindowsCE.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac'</p>

InputPanelから行を削除すると、問題なくMyControlに追加できます。が追加されFormたら、もう一度行を追加すると、プログラム全体がコンパイルされ、正常に動作します。Control

を含むフォームがデザイナーで表示されるとすぐに、Control上記と同様のエラーでクラッシュし、他のフォームにForm再度追加できなくなります。

Windows Mobile 6 SDK で Visual Studio 2008 SP1 を使用しています。


私の質問は次のとおりです。誰かが同様の問題を経験したか、回避策を見つけましたか?


編集:あきらめて、親フォームをプロパティとして使用しました。フォームは、基本的に InputPanel ゲッターとのインターフェイスである IInputPanel を実装します。それにもかかわらず、ctake の回答は非常に洞察力に富み、XMTA を紹介してくれました。

4

1 に答える 1

3

これは、デスクトップに SIP (入力パネル) がないため、デザイナーがそれを表示できないためです。XMTA の DesktopCompatible 属性を false に設定する必要があります。

編集:この回答を拡張する必要があると思います。DesktopCompatible 属性を設定すると、デザイナーはプロパティを直接照会できなくなりますが、それを呼び出す可能性のあるコードがコントロールにある場合 (つまり、デザイナーで実行されるコードが CE 固有のコードを実行する可能性がある場合) も追加する必要があります。それを防ぐコード。Environment.OSVersion.Platform を介して現在のプラットフォームを確認することはかなりうまく機能しますが、デザイナーにいるかどうかを判断するための他のより複雑なメカニズムもあります。

于 2009-04-08T12:50:16.047 に答える