「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
/// <summary>WebCustRadioButtonListのVSデザインサポートを実装する</summary> internal class WebCustRadioButtonListDesigner : ControlDesigner { /// <summary>メンバ変数にWebCustRadioButtonListを保持</summary> protected WebCustRadioButtonList wcrbl; /// <summary>初期化</summary> public override void Initialize(IComponent component) { if (component is WebCustRadioButtonList) { base.Initialize(component); this.wcrbl = (WebCustRadioButtonList)component; } } /// <summary>VSデザイナに表示するHTMLを返す。</summary> public override string GetDesignTimeHtml() { try { // 非常に単純なコードであるため、 // スタイル関係のプロパティ設定、子コントロールのインスタンス数のプロパティ設定を反映しない。 string ret = "" + "<table>" + " <tr>" + " <td>" + " <input type=\"radio\" value=\"選択項目1\" />" + " <label >選択項目1</label>" + " </td>" + " <td>" + " <input type=\"radio\" value=\"選択項目2\" />" + " <label>選択項目2</label>" + " </td>" + " <td>" + " <input type=\"radio\" value=\"選択項目3\" />" + " <label >選択項目3</label>" + " </td>" + " </tr>" + "</table>"; return ret; } catch (Exception ex) { // エラーの場合 return String .Concat("<h3>Error</h3>Stack Trace:<br>", ex.StackTrace); } } }
最後に、上記のデザイナ クラスを使用するように、カスタム ラベル コントロール(Ctrl.WebCustLabel?)のクラス定義に「Designer」 属性を使用してデザイナ クラスを指定する。
/// <summary>System.Web.UI.RadioButtonListのカスタム・コントロール</summary> [Designer("Ctrl.WebCustRadioButtonListDesigner"), ToolboxData("<{0}:WebCustRadioButtonList runat=server></{0}:WebCustRadioButtonList>")] public class WebCustRadioButtonList : RadioButtonList
このControlDesigner?クラスのGetDesignTimeHtml?メソッドのオーバーライドのサンプルは、非常に簡素な実装であるため、文字のフォント、サイズ、色などの、スタイル関係のプロパティ設定、子コントロールのインスタンス数のプロパティ設定は反映されない。これらをHTMLタグに反映させる場合は、スタイルのサポート コードを実装する必要がある。しかし、これらのプロパティ設定により可変となる「実際のWebアプリケーション上での外観」と「VSデザイナ上での外観」を一致させるには複雑な実装が必要になるため、プロジェクト部品でのサポートは考えなくて良いと考える。また、製品レベルの作り込みであっても、これらを「完全に」一致させるようなコードを実装するのは、無駄を含むため、避けた方が良い。