学了点皮毛,为了不忘,先做个组合控件,其下有两个imagebutton作为其子控件,作用就是可以用作Formview的Command按钮(具体作用不是最重要的,关键是怎么创建子控件,定义属性,重写render方法)
首先初始化两个ImageButton
private ImageButton tb_op;
private ImageButton tb_back;
然后定义三个属性:CommandA;CommandB;PostbackurlB并把属性添加到控件的类别中
[Bindable(true), Category("Behavior"), DefaultValue(""), Description("Button1's Commandname")]
public string CommandA
{
get { this.EnsureChildControls(); return ((ImageButton)Controls[0]).CommandName; }
set { this.EnsureChildControls(); ((ImageButton)Controls[0]).CommandName = value;}
}
[Bindable(true), Category("Behavior"), DefaultValue(""), Description("Button2's Commandname")]
public string CommandB
{
get { this.EnsureChildControls(); return ((ImageButton)Controls[1]).CommandName; }
set { this.EnsureChildControls(); ((ImageButton)Controls[1]).CommandName = value;}
}
[Bindable(true), Category("Behavior"), DefaultValue(""), Description("Button2's PostBackUrl")]
public string PostbackurlB
{
get { this.EnsureChildControls(); return ((ImageButton)Controls[1]).PostBackUrl; }
set { this.EnsureChildControls(); ((ImageButton)Controls[1]).PostBackUrl = value;}
}
ps:我用的中文版的vs,希望知道Category的所有类别,在元数据中查到了所有的类别,附文后表1;属性设置除了EnsureChildControls以外没有什么悬念,关于EnsureChildControls在msdn上查到相关描述如下:
EnsureChildControls
protected override void CreateChildControls()
{
//Add ImageButtonA
tb_op = new ImageButton();
this.Controls.Add(tb_op);
![]()
//Add ImageButtonB
tb_back = new ImageButton();
this.Controls.Add(tb_back);
}
protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
if (CommandA != "Edit")
{ tb_op.ImageUrl = "~/Images/qd.gif";}
else
{ tb_op.ImageUrl = "~/Images/xg.gif"; }
if (CommandB != "")
{ tb_back.ImageUrl = "~/Images/fh.gif"; }
else
{ tb_back.ImageUrl = "~/Images/cancel.gif"; }
base.Render(writer);
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
![]()
namespace SeyonControls.CommandButton
{
[DefaultProperty("Appearance")]
[ToolboxData(@"<{0}:CommandButton runat='server'></{0}:CommandButton>")]
public class CommandButton : WebControl, INamingContainer
{
Initial
![]()
Property
![]()
Method
}
}
Action 操作
Appearance 外观
Asynchronous 异步
Behavior 行为
Data 数据
Default 杂项
Design 布局
DragDrop 拖放
Focus 焦点
Format 格式
Key 键
Layout 布局
Mouse 鼠标
WindowStyle 窗口样式
首先初始化两个ImageButton
private ImageButton tb_op;
private ImageButton tb_back;然后定义三个属性:CommandA;CommandB;PostbackurlB并把属性添加到控件的类别中
[Bindable(true), Category("Behavior"), DefaultValue(""), Description("Button1's Commandname")]
public string CommandA
{
get { this.EnsureChildControls(); return ((ImageButton)Controls[0]).CommandName; }
set { this.EnsureChildControls(); ((ImageButton)Controls[0]).CommandName = value;}
}
[Bindable(true), Category("Behavior"), DefaultValue(""), Description("Button2's Commandname")]
public string CommandB
{
get { this.EnsureChildControls(); return ((ImageButton)Controls[1]).CommandName; }
set { this.EnsureChildControls(); ((ImageButton)Controls[1]).CommandName = value;}
}
[Bindable(true), Category("Behavior"), DefaultValue(""), Description("Button2's PostBackUrl")]
public string PostbackurlB
{
get { this.EnsureChildControls(); return ((ImageButton)Controls[1]).PostBackUrl; }
set { this.EnsureChildControls(); ((ImageButton)Controls[1]).PostBackUrl = value;}
}EnsureChildControls
该方法首先检查 ChildControlsCreated 属性的当前值。如果此值为假,则调用 CreateChildControls 方法。
第三步:创建子控件
protected override void CreateChildControls()
{
//Add ImageButtonA
tb_op = new ImageButton();
this.Controls.Add(tb_op);
//Add ImageButtonB
tb_back = new ImageButton();
this.Controls.Add(tb_back);
}本来这样就基本可以了,但我需要在render前对其输入的属性做一些判断,并由此改变子控件的属性,所以重写一下render方法
protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
if (CommandA != "Edit")
{ tb_op.ImageUrl = "~/Images/qd.gif";}
else
{ tb_op.ImageUrl = "~/Images/xg.gif"; }
if (CommandB != "")
{ tb_back.ImageUrl = "~/Images/fh.gif"; }
else
{ tb_back.ImageUrl = "~/Images/cancel.gif"; }
base.Render(writer);
}现在我的第一个控件就写好了:)
下面是全部代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace SeyonControls.CommandButton
{
[DefaultProperty("Appearance")]
[ToolboxData(@"<{0}:CommandButton runat='server'></{0}:CommandButton>")]
public class CommandButton : WebControl, INamingContainer
{
Initial
Property
Method
}
}
表1:
Action 操作
Appearance 外观
Asynchronous 异步
Behavior 行为
Data 数据
Default 杂项
Design 布局
DragDrop 拖放
Focus 焦点
Format 格式
Key 键
Layout 布局
Mouse 鼠标
WindowStyle 窗口样式

浙公网安备 33010602011771号