看到这个问题,怎样让自定义控件的子控件不会自动生成变量定义? 研究了一下Table对象,发现,你需要使用自定义的集合编辑器,示范编码如下
namespace CSDNControls
{
[ToolboxData(“<{0}:ColorToolbar runat=server></{0}:ColorToolbar>”)]
public class ColorToolbar : System.Web.UI.WebControls.WebControl
{
ColorButtonCollection colorButtons;
[PersistenceMode(PersistenceMode.InnerProperty)]
public ColorButtonCollection Buttons
{
get
{
if (colorButtons == null)
colorButtons = new ColorButtonCollection(this);
return colorButtons;
}
}
}
[ToolboxItem(false)]
public class ColorButton : Button
{
}
[Editor(typeof(ColorButtonCollectionEditor),typeof(UITypeEditor))]
public class ColorButtonCollection : CollectionBase
{
private Control _owner;
internal ColorButtonCollection(Control owner)
{
this._owner = owner;
}
public ColorButton this[int Index]
{
get
{
return (ColorButton) List[Index];
}
}
public bool Contains(ColorButton btn)
{
return List.Contains(btn);
}
public int Add(ColorButton btn)
{
int i;
i = List.Add(btn);
_owner.Controls.Add(btn);
return i;
}
public void Insert( int index, ColorButton btn )
{
List.Insert( index, btn );
_owner.Controls.AddAt(index,btn);
}
public int IndexOf( ColorButton btn)
{
return List.IndexOf( btn );
}
public void Remove(ColorButton btn)
{
List.Remove(btn);
_owner.Controls.Remove(btn);
}
}
public class ColorButtonCollectionEditor : CollectionEditor
{
public ColorButtonCollectionEditor(Type type) : base(type){}
//protected override bool CanSelectMultipleInstances() {return false;}
protected override object CreateInstance(Type itemType)
{
return Activator.CreateInstance(itemType, BindingFlags.CreateInstance | (BindingFlags.Public | BindingFlags.Instance), null, null, null);
}
}
}