「マイクロソフト系技術情報 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デザイナ上での外観」を一致させるには複雑な実装が必要になるため、プロジェクト部品でのサポートは考えなくて良いと考える。また、製品レベルの作り込みであっても、これらを「完全に」一致させるようなコードを実装するのは、無駄を含むため、避けた方が良い。