自定义控件学习笔记(3)

学了点皮毛,为了不忘,先做个组合控件,其下有两个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

该方法首先检查 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    窗口样式

你可能感兴趣的:(自定义控件)