using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
namespace myWebControls {
/// <summary>
/// サンプルコントロール
/// 子としてChildItem要素を持つ
/// </summary>
[ControlBuilder(typeof(ChildControlBuilder))]
public class SampleList : Control {
//子供の要素のCollection
private ArrayList childItems_ = new ArrayList();
protected override void AddParsedSubObject(object obj) {
//子供の要素の追加
if (obj is ChildItem) {
childItems_.Add(obj);
}
}
protected override void Render(HtmlTextWriter render) {
// コントロールの描画
render.WriteLine("<select name=\"{0}\" id=\"{0}\" >",this.UniqueID);
render.Indent++;
foreach(ChildItem item in childItems_) {
render.WriteLine("<option value=\"{0}\">{1}</option>",item.Value,item.Text) ;
}
render.Indent--;
render.WriteLine("</select>");
}
}
/// <summary>
/// 子供のコントロール
/// 子はText要素しか持たない
/// その子の要素をTextとして保持する
/// </summary>
[ControlBuilder(typeof(LiteralControlBuilder))]
public class ChildItem : Control {
protected override void AddParsedSubObject(object obj) {
//子要素を取得
if (obj is LiteralControl) {
text_ = ((LiteralControl)obj).Text;
}
}
/// <summary>
/// Text保持するメンバ
/// </summary>
private string text_;
/// <summary>
/// Value保持するメンバ
/// </summary>
private string value_;
/// <summary>
/// Value属性から値を取得する
/// </summary>
public string Value {
get { return value_; }
set { value_ = value; }
}
/// <summary>
/// テキストを公開するためのプロパティ
/// </summary>
public string Text {
get { return text_; }
}
}
/// <summary>
/// 子供のコントロールを作成するクラス
/// </summary>
public class ChildControlBuilder : ControlBuilder {
public override Type GetChildControlType(string tagName, IDictionary attribs) {
// SampleControlの子供はすべてChildItemコントロールとなる
return typeof(ChildItem);
}
}
}
|