
InputPanel は SIP (SoftwareInputPanel) を制御できる便利なコンポーネントです。SIP とは画面上にキーボードなどの入力インターフェースを表示する機能で、そこで直接文章を入力できるようになっています。
しかし、以下のような特定の条件で InputPanel を使用するとフォームデザイナでエラーが発生して編集できなくなってしまいます。
再現方法ですが、まず独自にユーザーコントロールを作成します。
次に列挙子 (enum) を独自に作成します。
public enum Enum1 { A, B }
作成した列挙子をユーザーコントロールのプロパティとして作成します。
public partial class UserControl1 : UserControl { public Enum1 Param { get; set; } public UserControl1() { InitializeComponent(); } }
作成したユーザーコントロールと
InputPanel を配置します。
この状態でビルドをするとフォームデザイナでエラーが発生します。
こうなった場合、デザイナで InputPanel が外せなくなりますので、「XXXXX.Designer.cs (または .vb など)」のコードファイルから InputPanel を直接削除してください。
どうやら独自にユーザーコントロール、またはカスタムコントロールを作成して配置するとこのようなエラーになるようです。プロパティを設定しない場合はデザイナでの編集はできるようになりますが、右のようにコントロールが正常に表示されません。
また、InputPanel はデザイナで配置しなくても、「private InputPanel inputPanel = null;」のように変数として宣言するだけでエラーになってしまうようです。おそらく InputPanel の参照時になんらかの不具合が発生していものだと思われます。
この現象はフォームデザイナで発生しているだけなので、実際にプログラムはビルドでき、実行環境でも正常に動作させることができます。もし、InputPanel を使わずに SIP を制御したい場合は、P/Invoke を使って API を呼び出す必要があります。これについては別の機会で説明したいと思います。
この件については Microsoft Connect の方にバグとして報告してあります。
また、続きの記事を書きました。
| ファイル | サイズ | .NET Compact Frameworkバージョン | 作成日 |
|---|---|---|---|
| windows_mobile_inputpaneldesignererror.zip | 392 KB | 3.5 | 2008/10/11 |
| 更新日時 | 更新内容 |
|---|---|
| 2008/10/11 | ページ作成 |