开发自定义控件的笔记 (2)

复合控件...


1、什么是复合控件?
复合控件是由多个控件组成的控件(废话……),有点类似用户控件(*.ascx),但是却是用户自定义控件的。

2、如何做
首先要从 System.Web.UI.WebControls.WebControl 继承外,还有实现INamingContainer接口

public   class  SelectButton: System.Web.UI.WebControls.WebControl,INamingContainer
{
}


 然后重写CreateChildControls的方法

protected   override   void  CreateChildControls()
{}

在这里里面制作你想要添加的控件即可,比如添加几个按钮
Button but1 = new Button();
but1.Text = 'Button 1';
this.Controls.Add(but1);

Button but2 = new Button();
but2.Text = 'Button 2;
this.Controls.Add(but2);

这样运行之后就是有两个按钮的一个控件了。

这里我有个选择checkbox的控件例子,给大家看一下,由于没有进行设计时的设计,如果运行的话,会是一个空白的点,不过不影响使用, 如果干兴趣的话,可以按照我上一篇《 开发自定义控件的笔记(1) 》介绍的方法加上设计时的外观

代码如下:
using  System;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.ComponentModel;
using  System.Drawing;
using  System.Drawing.Drawing2D;


namespace  myControls.SelectButton
{
    
/// <summary>
    
/// WebCustomControl1 的摘要说明。
    
/// </summary>

    [DefaultProperty("Text"),
        ToolboxData(
"<{0}:SelectButton1 runat=server></{0}:SelectButton1>")]
    
public class SelectButton1: System.Web.UI.WebControls.WebControl,INamingContainer
    
{
        
private string _select = "选择全部";
        
private string _cancel = "取消选择";
        
private string _invert = "反向选择";

        [Bindable(
false),
        Category(
"Appearance"),
        DefaultValue(
"")]

        
public string SelectText
        
{
            
get
            
{
                
return _select;
            }


            
set
            
{
                _select 
= value;
            }

        }

        
public string CancelText
        
{
            
get{
                
return _cancel;
            }

            
set{
                _cancel 
= value;
            }

        }

        
public string InvertText
        
{
            
get{
                
return _invert;
            }

            
set{
                _invert 
= value;
            }

            
        }

        
*/
        
/// <summary>
        
/// 重写OnPreRender方法。
        
/// </summary>
        
/// <param name="e"></param>

        protected override void OnPreRender(EventArgs e) 
        
{
            
//Page.RegisterPostBackScript();
            string tempstr = "";

            tempstr 
+="<script language=\"javascript\">";
            tempstr 
+="    function SelectAll(){";
            tempstr 
+="        var obj = document.getElementsByTagName(\"input\");";
            tempstr 
+="        for(i=0;i<obj.length;i++){";
            tempstr 
+="            if(obj[i].type==\"checkbox\"){";
            tempstr 
+="                obj[i].checked = true;";
            tempstr 
+="            }";
            tempstr 
+="        }";
            tempstr 
+="        window.event.returnValue=false;";
            tempstr 
+="    }";
            tempstr 
+="    function CancelAll(){";
            tempstr 
+="        var obj = document.getElementsByTagName(\"input\");";
            tempstr 
+="        for(i=0;i<obj.length;i++){";
            tempstr 
+="            if(obj[i].type==\"checkbox\"){";
            tempstr 
+="                obj[i].checked = false;";
            tempstr 
+="            }";
            tempstr 
+="        }";
            tempstr 
+="        window.event.returnValue=false;";
            tempstr 
+="    }";
            tempstr 
+="    function InvertAll(){";
            tempstr 
+="        var obj = document.getElementsByTagName(\"input\");";
            tempstr 
+="        for(i=0;i<obj.length;i++){";
            tempstr 
+="            if(obj[i].type==\"checkbox\"){";
            tempstr 
+="                if(obj[i].checked){";
            tempstr 
+="                    obj[i].checked = false;";
            tempstr 
+="                }else{";
            tempstr 
+="                    obj[i].checked = true;";
            tempstr 
+="                }";
            tempstr 
+="            }";
            tempstr 
+="        }";
            tempstr 
+="        window.event.returnValue=false;";
            tempstr 
+="    }";
            tempstr 
+="</script>";

            
if(!Page.IsStartupScriptRegistered("SelectBtnFunction"))
            
{
                Page.RegisterStartupScript(
"SelectBtnFunction",tempstr);
            }

        }


        
/// <summary>
        
/// 重写创建子控件的方法
        
/// </summary>

        protected override void CreateChildControls()
        
{
            
this.Controls.Add(new LiteralControl("<table><tr><td>"));

            Button but1 
= new Button();
            but1.Text 
= this.SelectText;
            but1.Attributes.Add(
"onclick","javascript:SelectAll()");
            
this.Controls.Add(but1);

            
this.Controls.Add(new LiteralControl("</td><td>"));

            Button but2 
= new Button();
            but2.Text 
= this.CancelText;
            but2.Attributes.Add(
"onclick","javascript:CancelAll()");
            
this.Controls.Add(but2);

            
this.Controls.Add(new LiteralControl("</td><td>"));

            Button but3 
= new Button();
            but3.Text 
= this.InvertText;
            but3.Attributes.Add(
"onclick","javascript:InvertAll()");
            
this.Controls.Add(but3);

            
this.Controls.Add(new LiteralControl("</td></tr></table>"));
        }




    }

}



http://files.cnblogs.com/voodooq/SelectButton.rar 完整代码下载 (嘿嘿,留到最后……)

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