カウンタ

InputPanel を使用するとフォームデザイナでエラーが発生してしまう

ページ更新日:2008/10/15
概要
 独自のユーザーコントロールと列挙子を作成・配置して InputPanel を使用すると、フォームデザイナでエラーが発生します。
フォームデザイナでエラー
動作確認バージョン
.NET Compact Framework バージョン
  • 2.0
  • 3.5
Visual Studio バージョン
  • 2008
Windows Mobile SDK バージョン
  • 5
Tips

 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 を配置します。

フォームデザイナでエラー この状態でビルドをするとフォームデザイナでエラーが発生します。

 こうなった場合、デザイナで 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 ページ作成
広告
Copyright (C) since 2005 Yuichi Onodera (おのでら), All rights reserved.