3

私はPDAのInputPanelを使ってユーザーと対話するコントロールを開発しました。コードの関連部分は以下の通りです:Compact Framework:コントロールでInputPanelを使用できません

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

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

私はFormControlをドラッグしようとするたびに、私は次のエラーを取得する:

System.IO.FileNotFoundException: Could not load file or assembly ‘Microsoft.WindowsCE.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=969db8053d3322ac’ or one of its dependencies. The system cannot find the file specified. File name: ‘Microsoft.WindowsCE.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac’

私は私ができるMyControlからInputPanel行を削除する場合Formに問題なく追加してください。 Controlが追加されたら、私は再び行を追加することができ、プログラム全体がコンパイルされて正常に動作します。

Controlのフォームをデザイナで表示すると、上記と同様のエラーでクラッシュし、もう一度他のFormに追加することはできません。

私はWindows Mobile 6 SDKと共にVisual Studio 2008 SP1を使用しています。


私の質問は次のようなものです:誰かが同様の問題を経験したか回避策を見つけましたか?


EDIT:親フォームをプロパティとして取得して使用しました。フォームは基本的にInputPanelゲッターとのインターフェースであるIInputPanelを実装します。それにもかかわらず、ctakeの答えは本当に洞察力があり、私をXMTAに紹介しました。

答えて

3

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

編集:この回答を延長する必要があります。 DesktopCompatible属性を設定すると、デザイナーはプロパティを直接クエリできなくなりますが、コントロール内にコードを呼び出すことができます(デザイナで実行されるコードでCE固有のコードが実行される場合)それを防ぐためのコード。 Environment.OSVersion.Platformを介して現在のプラットフォームをチェックすることはかなりうまくいくが、あなたがデザイナーにいるかどうかを判断するための、より畳み込まれた他のメカニズムがある。

+1

明らかに、DesktopCompatibleは、私が作成したすべてのコントロールに対してfalseに設定されていました。したがって、DesktopCompatibleをfalseに設定しても問題は解決しませんでした。 – xsl

+2

デザイナーが実行するコントロールのどこにでも、CE固有のコード(SIPを表示しようとするようなもの)を呼び出していますか?活性化中にSIPを表示するなど上記の私の編集を参照してください。 – ctacke

+2

私はまたあなたのコメントで多少混乱しています - あなたは驚いたか、知らなかったように、「明らかに」言っています。 XMTAファイルは手動で作成する必要があります - Studioはそれをあなたのためにしません - それは確かにあなたが設定する必要があるでしょう。 – ctacke

関連する問題