- バックアップ一覧
- ソース を表示
- バックアップ を表示
- 画面やコントロールにてコンストラクタで子要素を追加すると二重追加される件について。 は削除されています。
- 1 (2017-03-30 (木) 15:06:09)
- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>.NET開発]]
* 目次 [#a4f725bb]
#contents
*概要 [#mb024c27]
* [#i022b8ec]
-処理の移動
--コンストラクタに実装したデータバインド処理を、ロード イベントに移動する。
--ロード イベントにデータバインド処理を移動すると、~
今度は、デザイン時に限り表示が「バインドなし」という状態になってしまう。
-VSデザイン サポートによる処置~
VSデザイン サポート コードを、[[ControlDesignerクラス>http://msdn.microsoft.com/ja-jp/library/system.web.ui.design.controldesigner.aspx]]を継承するデザイナ クラスの[[GetDesignTimeHtmlメソッド>http://msdn.microsoft.com/ja-jp/library/system.web.ui.design.controldesigner.getdesigntimehtml.aspx]]のオーバーライドに実装する。
/// <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>http://msdn.microsoft.com/ja-jp/library/system.componentmodel.designerattribute.aspx]]」 属性を使用してデザイナ クラスを指定する。
/// <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デザイナ上での外観」を一致させるには複雑な実装が必要になるため、プロジェクト部品でのサポートは考えなくて良いと考える。また、製品レベルの作り込みであっても、これらを「完全に」一致させるようなコードを実装するのは、無駄を含むため、避けた方が良い。
-デザイン時に使用できる値
--デザインタイム・プロパティ([[Open棟梁のカスタムコントロールのチェック属性のような>https://opentouryo.osscons.jp/index.php?%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E6%A9%9F%E8%83%BD%E4%BB%98%E3%81%8D%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%20%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB]])
--app.configの値については、以下のようにデザインタイムで利用可能であるもよう。
---デザイン時に指定したDBのパス名を実行時に変更する方法 - Insider.NET - @IT~
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47969&forum=7
---外部ファイルにコントロールのプロパティを格納する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/programing/dynamicproperties.html
-アプリケーションが実行されていないので、共有メモリやグローバル変数などのデザイン時に読むことはできない。
----
Tags: [[:.NET開発]], [[:ASp]]