none
ASP.NETカスタムサーバコントロールのWinFormを使用したUI型エディタ RRS feed

  • 質問

  • こんにちは、さとくんパパこと古谷です。お世話になっています。

    本日はASP.NETのカスタムサーバコントロールのデザイン時拡張機能を利用して、
    WindowsFormを使用したカスタムUIエディタを作成する方法に関して一つ質問が
    あります。

    --------------------------------
    やろうとしている事&ここまでの経緯
    --------------------------------
    WindowsFormを使用したUI型エディタを作成してASP.NETカスタムサーバ
    コントロールのプロパティを設定させようとしています。

    参考にしたヘルプのトピックは『ユーザー インターフェイス型エディタ』と
    方法 : UI 型エディタを作成する』です。これによると作業手順は・・・

    ①System.Drawing.Design.UITypeEditorからの派生クラスとしてカスタムUI型
     エディタを定義する。
     
    ②SetEditorProps、EditValue、GetEditStyleの3つをオーバーライドする。

    という事でした。で、WinFormを継承するUI型エディタのサンプルは何故か
    何処にも無かったため自分で試行錯誤しながらやっている状況です。

    とりあえずオーバーライドしたEditValueメソッド内で、
    IWindowsFormsEditorServiceを取得して、その後でプレーンな
    WindowsフォームをShowDialog表示するところまでは上手く出来ました。

    ※)Windowsフォームは別途WindowsFormアプリケーションプロジェクト内で
    作成したものをコピーして、ソースファイルの名前空間をASP.NET側のアプリ
    に合わせて書き換えていります。

    即ち、UI型エディタを使用するプロパティを設定する際、プロパティグリッド
    上で参照ボタン(表題が『・・・』になっているボタン)をクリックすると、フォー
    ムが開くようになります。


    --------------------------------
    問題点
    --------------------------------
    ただし、ここでフォームのボタン等に専用の画像やiconを埋め込むと、プロパ
    ティグリッドで参照ボタンをでクリックした際に、以下のメッセージが表示
    されてエラーとなってしまいます。

    『指定されたカルチャまたはニュートラルカルチャに対して適切なリソースが
    見つかりませんでした。
    "[ASP.NETコンポーネントテストフォーム名].resource"が適切に埋め込まれた
    か、実行時にアセンブリ『App_Code.ml31jp1f"にリンクされたか、または必要
    なサテライトアセンブリが読み込まれて完全に署名されている事を確認してく
    ださい。』


    --------------------------------
    知りたい事
    --------------------------------
    フォーム作成用のWindowsアプリ側で設定した画像を保持するリソースファイル
    が上手く読めていないのは分かるのですが、対処方法が分かりません。
    .resxファイルはDesigner.csファイルと一緒にちゃんと持ってきております。

    解決方法をご存知の方いらっしゃいましたら、何卒よろしくご教授くださいませ。

    どうかよろしくお願いいたします。

    2009年8月24日 15:39

回答

  • こんにちは、古谷です。お世話になっています。

    お待たせしました。無事USサイトで解決しました。非常に単純な話しで、ASP.NET カスタムコントロールのUI型エディタで使用するWindowsFormをWindowsアプリのクラスライブラリとして作成し、それをカスタムコントロールプロジェクトから参照して、そのアセンブリ内の公開メソッドをコールすればよいだけでした。

    詳しくはこちらを参照ください。
    http://forums.asp.net/t/1467259.aspx


    これはよく考えれば直ぐに分かることでしたね。といっても、そのような話題について書いてある書籍やヘルプは見たことありません。やはりこういったマニアックな(=というより、デザイン時サポートのようにVisual Studioのプログラム中に踏み込むような.NETの内部に精通した人ではないと分からない)情報は、本場のフォーラムじゃないと情報が出てこないのかも知れませんね。

    たとえばもう一つのスレッド『WinFormを使用したUI型エディタでコレクションプロパティを設定する方法』の回答など、内部を知っている人ではないと絶対に分かるはずありません!


    以上、本件とコレクションプロパティを設定するUI型エディタの話しは、それなりに有益な情報と思われます。
    2009年9月7日 15:08

すべての返信

  • ここは ASP.NET のフォーラムですから、ASP.NET ベースの Web アプリの話題と理解して
    レスします。

    多分以下のサイトを参考にされているのだと思いますが、表題には「Windows フォームのプ
    ログラミング」と書いてあります。

    Windows フォームのプログラミング
    ユーザー インターフェイス型エディタの概要
    http://msdn.microsoft.com/ja-jp/library/ms171839.aspx

    Windows フォームのプログラミング
    方法 : UI 型エディタを作成する
    http://msdn.microsoft.com/ja-jp/library/fd3kt7d5.aspx

    中身は詳しく見てませんが、これらは Windows アプリに用いる Windows フォームコントロ
    ールであり、Web アプリケーションには使えないのでは? 例えば MessageBox はサーバ
    ーのディスプレイでは表示されますが、クライアントは見ることができないように。

    ブラウザで動くエディタが必要なのでしょうか? そうであれば、FreeTextBox やTinyMCE
    などが利用できるかもしれません。検討してみてください。

    FreeTextBox
    http://freetextbox.com/

    TinyMCE - Javascript WYSIWYG Editor
    http://tinymce.moxiecode.com/index.php

    思い違いでしたら失礼しました。

     

    2009年8月25日 12:36
  • SurferOnWwwさん、こんにちは、さとくんパパこと古谷です。レスありがとうございました。

    仰るとおり参照したMSヘルプの表題には『Windowsフォームの・・・』とあり、また
    そこに掲載されているUI型エディタ及びそれを搭載するカスタムコントロールの
    サンプルプログラムのソースコードは全て、WindowsForm用のものである事は
    存じております。

    しかしながらMSヘルプにおけるこれらのトピックのトップ『デザイン時サポートの拡張』や
    その傘下の『デザイン時アーキテクチャ』を見る限り、UI型プロパティエディタを利用できる
    のは、WindowsFom用コントロールのプロパティだけではないと解釈できます。

    >ブラウザで動くエディタが必要なのでしょうか?
    いや、そうではありません。
    デザインモードでWebページに自分が作ったカスタムコントロールをツールボックスから
    D&Dして配置した後、そのプロパティを設定する際
    に、Visual Studio上でパッと開く
    使い勝手の良いエディタが欲しいのです。

    で、殆ど途中まで出来ていて、Visual Studio上でWindowsフォームがパッと開くように
    はなったのですが、

    そのフォーム上のボタンに画像を配置すると、エラーになってしまう!

    というのが問題なのです。
    2009年8月25日 17:08
  • こんにちは、さとくんパパこと古谷です。お世話になっています。

    一つだけ自己レスです。(まだ問題が解決したわけではありません。)

    上で『WinFormを継承するUI型エディタのサンプルは何処にも無かったため・・・』
    と書きましたが、探したらちゃんと存在しました。

    IWindowsFormsEditorService インターフェイス
    のヘルプの使用例の中にちゃんと載っています。上で拙者がやっている通り、
    IWindowsFormsEditorServiceを取得して、その後で専用フォームをShowDialog
    して、結果がOKであればフォーム上の選択値を取得するという方法が採られて
    いました。

    ただし残念ながら、このサンプルには肝心の『画像リソースを取得する方法
    が載っていませんでした。ということで、問題は残ったままです。

    何方かご存知の方いらしたら、どうかよろしくお願いいたします。

    2009年8月25日 17:10
  • よく分かりませんが、Web アプリケーションの開発の話ではないですよね。

    自分がレスできる範囲の話ではなさそうです。他の方の回答をお待ちください。

    2009年8月26日 13:28
  • こんにちは、古谷です。お世話になっています。

    お待たせしました。無事USサイトで解決しました。非常に単純な話しで、ASP.NET カスタムコントロールのUI型エディタで使用するWindowsFormをWindowsアプリのクラスライブラリとして作成し、それをカスタムコントロールプロジェクトから参照して、そのアセンブリ内の公開メソッドをコールすればよいだけでした。

    詳しくはこちらを参照ください。
    http://forums.asp.net/t/1467259.aspx


    これはよく考えれば直ぐに分かることでしたね。といっても、そのような話題について書いてある書籍やヘルプは見たことありません。やはりこういったマニアックな(=というより、デザイン時サポートのようにVisual Studioのプログラム中に踏み込むような.NETの内部に精通した人ではないと分からない)情報は、本場のフォーラムじゃないと情報が出てこないのかも知れませんね。

    たとえばもう一つのスレッド『WinFormを使用したUI型エディタでコレクションプロパティを設定する方法』の回答など、内部を知っている人ではないと絶対に分かるはずありません!


    以上、本件とコレクションプロパティを設定するUI型エディタの話しは、それなりに有益な情報と思われます。
    2009年9月7日 15:08