复合控件...

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 完整代码下载 (嘿嘿,留到最后……)

转载于:https://www.cnblogs.com/voodooq/archive/2004/12/16/77661.html

开发自定义控件的笔记 (2)相关推荐

  1. 从零开发一款笔记APP——神马笔记WhatsNote

    从零开发一款笔记APP--神马笔记WhatsNote 一.主要功能 二.开发过程 三.优质的笔记应用 四.附录 一.主要功能 笔记的主要功能分为三个部分: 管理 目录--多层目录结构 标签--单层结构 ...

  2. 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记

    最近想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序,所以需要在本地搭建Node.js Web的开发测试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴 ...

  3. [云炬python3玩转机器学习笔记] 2-7开发环境搭建笔记

    开发环境搭建笔记

  4. 云炬Qtpy5开发与实战笔记 2PyCharm添加QTDesinger扩展并创建第一个.ui文件

    1.配置使用QTDesigner扩展工具 在pycharm的项目配置中配置扩展工具,将QTDesigner加入其中: 2.在pycharm中打开QTDesigner 或者: 此时,我们就可以使用QTD ...

  5. 云炬Qtpy5开发与实战笔记 1开发第一个桌面应用Hello World

    云炬Qtpy5开发与实战笔记 0搭建开发环境(傻瓜式安装) 1.打开 Pycharm,选择 Create New Project,创建一个新项目 2.选择Pure Python表示创建一个纯Pytho ...

  6. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  7. ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步

    http://blog.jobbole.com/85008/ ASP.Net MVC开发基础学习笔记(5):区域.模板页与WebAPI初步 2015/03/17 · IT技术 · .Net, Asp. ...

  8. 微信小程序开发:学习笔记[8]——页面跳转及传参

    微信小程序开发:学习笔记[8]--页面跳转及传参 页面跳转 一个小程序拥有多个页面,我们可以通过wx.navigateTo推入一个新的页面.在首页使用2次wx.navigateTo后,页面层级会有三层 ...

  9. sql 以a开头的所有记录_SQL开发与数据库管理笔记

    简介: SQL开发与数据库管理笔记,看过的都说好! 原创: 丶平凡世界 文章链接:https://mp.weixin.qq.com/s/Y9TmoHOyh7To7jUrMulvEw 一.开发管理篇 1 ...

最新文章

  1. 十年磨一剑!程序员老兵成新将
  2. 【消息队列】kafka是如何保证消息不被重复消费的
  3. SQLite学习手册(内置函数)
  4. c# 读取写入excel单元格基本操作
  5. 多重插补 均值插补_Feature Engineering Part-1均值/中位数插补。
  6. 适合程序员的画图工具
  7. c语言用链表写管理系统程序,c语言课程设计职工信息管理系统单链表实现程序源代码-20210401015126.docx-原创力文档...
  8. sob攻略超详细攻略_2020云南旅游超详细必看攻略(附带云南美食景点攻略)
  9. @Controller 不能访问到
  10. java字符串字节_Java中字符串与byte数组之间的相互转换
  11. C#开发命令执行驱动程序 之 控制标志的命令行参数
  12. 如何在MySQL中重置AUTO_INCREMENT?
  13. std::list 循环删除指针_数据结构_006_线性表_循环链表
  14. Android 代码混淆、第三方平台加固加密、渠道分发 完整教程(转)
  15. KBQA-Bert学习记录-CRF模型
  16. jmeter并发性能测试工具
  17. python金融分析小知识(25)——如何计算股票每日的收益率并进一步计算净值
  18. 【数据挖掘】知识总结——背景、定义、一般流程及应用(一)
  19. 利用Python实现scissors-rock-paper-lizard-Spock小游戏
  20. TLS1.3抓包分析(3)——EncryptedExtentions等

热门文章

  1. ubuntu中的日志文件位置,用于错误查找
  2. python和perl哪个好_做为脚本语言来说perl和python那个更有优势?
  3. 树莓派+神经计算棒2实时人脸检测
  4. linux 查看cpu和磁盘使用情况
  5. win10 + Ubuntu18.04 双系统,UEFI+GPT,从win10切换到Ubuntu时黑屏问题
  6. javabean自定义组件
  7. python __builtins__ float类 (25)
  8. 基于EasyNVR二次开发实现业务需求:直接集成EasyNVR播放页面到自身项目
  9. 人人网的系统架构 网上搜集
  10. pipenv 虚拟环境新玩法