复合控件...


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

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

开发自定义控件的笔记 (2)public class SelectButton: System.Web.UI.WebControls.WebControl,INamingContainer
{
}


 然后重写CreateChildControls的方法

开发自定义控件的笔记 (2)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) 》介绍的方法加上设计时的外观

代码如下:
开发自定义控件的笔记 (2)using System;
开发自定义控件的笔记 (2)
using System.Web.UI;
开发自定义控件的笔记 (2)
using System.Web.UI.WebControls;
开发自定义控件的笔记 (2)
using System.ComponentModel;
开发自定义控件的笔记 (2)
using System.Drawing;
开发自定义控件的笔记 (2)
using System.Drawing.Drawing2D;
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)
namespace myControls.SelectButton
{

开发自定义控件的笔记 (2)    
/// WebCustomControl1 的摘要说明。
开发自定义控件的笔记 (2)    
/// </summary>
开发自定义控件的笔记 (2)    [DefaultProperty("Text"),
开发自定义控件的笔记 (2)        ToolboxData(
"<{0}:SelectButton1 runat=server></{0}:SelectButton1>")]
开发自定义控件的笔记 (2)    
public class SelectButton1: System.Web.UI.WebControls.WebControl,INamingContainer
{
开发自定义控件的笔记 (2)        
private string _select = "选择全部";
开发自定义控件的笔记 (2)        
private string _cancel = "取消选择";
开发自定义控件的笔记 (2)        
private string _invert = "反向选择";
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)        [Bindable(
false),
开发自定义控件的笔记 (2)        Category(
"Appearance"),
开发自定义控件的笔记 (2)        DefaultValue(
"")]
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)        
public string SelectText
{
开发自定义控件的笔记 (2)            
get
{
开发自定义控件的笔记 (2)                
return _select;
开发自定义控件的笔记 (2)            }

开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            
set
{
开发自定义控件的笔记 (2)                _select 
= value;
开发自定义控件的笔记 (2)            }

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

开发自定义控件的笔记 (2)        
public string CancelText
{
{
开发自定义控件的笔记 (2)                
return _cancel;
开发自定义控件的笔记 (2)            }

{
开发自定义控件的笔记 (2)                _cancel 
= value;
开发自定义控件的笔记 (2)            }

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

开发自定义控件的笔记 (2)        
public string InvertText
{
{
开发自定义控件的笔记 (2)                
return _invert;
开发自定义控件的笔记 (2)            }

{
开发自定义控件的笔记 (2)                _invert 
= value;
开发自定义控件的笔记 (2)            }

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

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

开发自定义控件的笔记 (2)        
/// 重写OnPreRender方法。
开发自定义控件的笔记 (2)        
/// </summary>
开发自定义控件的笔记 (2)        
/// <param name="e"></param>
开发自定义控件的笔记 (2)        protected override void OnPreRender(EventArgs e) 
{
开发自定义控件的笔记 (2)            
//Page.RegisterPostBackScript();
开发自定义控件的笔记 (2)
            string tempstr = "";
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            tempstr 
+="<script language=\"javascript\">";
开发自定义控件的笔记 (2)            tempstr 
+="    function SelectAll(){";
开发自定义控件的笔记 (2)            tempstr 
+="        var obj = document.getElementsByTagName(\"input\");";
开发自定义控件的笔记 (2)            tempstr 
+="        for(i=0;i<obj.length;i++){";
开发自定义控件的笔记 (2)            tempstr 
+="            if(obj[i].type==\"checkbox\"){";
开发自定义控件的笔记 (2)            tempstr 
+="                obj[i].checked = true;";
开发自定义控件的笔记 (2)            tempstr 
+="            }";
开发自定义控件的笔记 (2)            tempstr 
+="        }";
开发自定义控件的笔记 (2)            tempstr 
+="        window.event.returnValue=false;";
开发自定义控件的笔记 (2)            tempstr 
+="    }";
开发自定义控件的笔记 (2)            tempstr 
+="    function CancelAll(){";
开发自定义控件的笔记 (2)            tempstr 
+="        var obj = document.getElementsByTagName(\"input\");";
开发自定义控件的笔记 (2)            tempstr 
+="        for(i=0;i<obj.length;i++){";
开发自定义控件的笔记 (2)            tempstr 
+="            if(obj[i].type==\"checkbox\"){";
开发自定义控件的笔记 (2)            tempstr 
+="                obj[i].checked = false;";
开发自定义控件的笔记 (2)            tempstr 
+="            }";
开发自定义控件的笔记 (2)            tempstr 
+="        }";
开发自定义控件的笔记 (2)            tempstr 
+="        window.event.returnValue=false;";
开发自定义控件的笔记 (2)            tempstr 
+="    }";
开发自定义控件的笔记 (2)            tempstr 
+="    function InvertAll(){";
开发自定义控件的笔记 (2)            tempstr 
+="        var obj = document.getElementsByTagName(\"input\");";
开发自定义控件的笔记 (2)            tempstr 
+="        for(i=0;i<obj.length;i++){";
开发自定义控件的笔记 (2)            tempstr 
+="            if(obj[i].type==\"checkbox\"){";
开发自定义控件的笔记 (2)            tempstr 
+="                if(obj[i].checked){";
开发自定义控件的笔记 (2)            tempstr 
+="                    obj[i].checked = false;";
开发自定义控件的笔记 (2)            tempstr 
+="                }else{";
开发自定义控件的笔记 (2)            tempstr 
+="                    obj[i].checked = true;";
开发自定义控件的笔记 (2)            tempstr 
+="                }";
开发自定义控件的笔记 (2)            tempstr 
+="            }";
开发自定义控件的笔记 (2)            tempstr 
+="        }";
开发自定义控件的笔记 (2)            tempstr 
+="        window.event.returnValue=false;";
开发自定义控件的笔记 (2)            tempstr 
+="    }";
开发自定义控件的笔记 (2)            tempstr 
+="</script>";
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            
if(!Page.IsStartupScriptRegistered("SelectBtnFunction"))
{
开发自定义控件的笔记 (2)                Page.RegisterStartupScript(
"SelectBtnFunction",tempstr);
开发自定义控件的笔记 (2)            }

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

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

开发自定义控件的笔记 (2)        
/// 重写创建子控件的方法
开发自定义控件的笔记 (2)        
/// </summary>
开发自定义控件的笔记 (2)        protected override void CreateChildControls()
{
开发自定义控件的笔记 (2)            
this.Controls.Add(new LiteralControl("<table><tr><td>"));
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            Button but1 
= new Button();
开发自定义控件的笔记 (2)            but1.Text 
= this.SelectText;
开发自定义控件的笔记 (2)            but1.Attributes.Add(
"onclick","javascript:SelectAll()");
开发自定义控件的笔记 (2)            
this.Controls.Add(but1);
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            
this.Controls.Add(new LiteralControl("</td><td>"));
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            Button but2 
= new Button();
开发自定义控件的笔记 (2)            but2.Text 
= this.CancelText;
开发自定义控件的笔记 (2)            but2.Attributes.Add(
"onclick","javascript:CancelAll()");
开发自定义控件的笔记 (2)            
this.Controls.Add(but2);
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            
this.Controls.Add(new LiteralControl("</td><td>"));
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            Button but3 
= new Button();
开发自定义控件的笔记 (2)            but3.Text 
= this.InvertText;
开发自定义控件的笔记 (2)            but3.Attributes.Add(
"onclick","javascript:InvertAll()");
开发自定义控件的笔记 (2)            
this.Controls.Add(but3);
开发自定义控件的笔记 (2)
开发自定义控件的笔记 (2)            
this.Controls.Add(new LiteralControl("</td></tr></table>"));
开发自定义控件的笔记 (2)        }

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

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

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


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

相关文章:

  • 2021-10-27
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
  • 2022-01-29
  • 2022-12-23
  • 2022-02-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-03-02
  • 2022-12-23
  • 2022-12-23
  • 2021-07-12
  • 2021-07-12
相关资源
相似解决方案