开发自定义控件的笔记 (2)
复合控件...
1、什么是复合控件?
复合控件是由多个控件组成的控件(废话……),有点类似用户控件(*.ascx),但是却是用户自定义控件的。
2、如何做
首先要从 System.Web.UI.WebControls.WebControl 继承外,还有实现INamingContainer接口
{
}
然后重写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.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)相关推荐
- 从零开发一款笔记APP——神马笔记WhatsNote
从零开发一款笔记APP--神马笔记WhatsNote 一.主要功能 二.开发过程 三.优质的笔记应用 四.附录 一.主要功能 笔记的主要功能分为三个部分: 管理 目录--多层目录结构 标签--单层结构 ...
- 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记
最近想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序,所以需要在本地搭建Node.js Web的开发测试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴 ...
- [云炬python3玩转机器学习笔记] 2-7开发环境搭建笔记
开发环境搭建笔记
- 云炬Qtpy5开发与实战笔记 2PyCharm添加QTDesinger扩展并创建第一个.ui文件
1.配置使用QTDesigner扩展工具 在pycharm的项目配置中配置扩展工具,将QTDesigner加入其中: 2.在pycharm中打开QTDesigner 或者: 此时,我们就可以使用QTD ...
- 云炬Qtpy5开发与实战笔记 1开发第一个桌面应用Hello World
云炬Qtpy5开发与实战笔记 0搭建开发环境(傻瓜式安装) 1.打开 Pycharm,选择 Create New Project,创建一个新项目 2.选择Pure Python表示创建一个纯Pytho ...
- Java高级开发工程师面试笔记
最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...
- ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步
http://blog.jobbole.com/85008/ ASP.Net MVC开发基础学习笔记(5):区域.模板页与WebAPI初步 2015/03/17 · IT技术 · .Net, Asp. ...
- 微信小程序开发:学习笔记[8]——页面跳转及传参
微信小程序开发:学习笔记[8]--页面跳转及传参 页面跳转 一个小程序拥有多个页面,我们可以通过wx.navigateTo推入一个新的页面.在首页使用2次wx.navigateTo后,页面层级会有三层 ...
- sql 以a开头的所有记录_SQL开发与数据库管理笔记
简介: SQL开发与数据库管理笔记,看过的都说好! 原创: 丶平凡世界 文章链接:https://mp.weixin.qq.com/s/Y9TmoHOyh7To7jUrMulvEw 一.开发管理篇 1 ...
最新文章
- 十年磨一剑!程序员老兵成新将
- 【消息队列】kafka是如何保证消息不被重复消费的
- SQLite学习手册(内置函数)
- c# 读取写入excel单元格基本操作
- 多重插补 均值插补_Feature Engineering Part-1均值/中位数插补。
- 适合程序员的画图工具
- c语言用链表写管理系统程序,c语言课程设计职工信息管理系统单链表实现程序源代码-20210401015126.docx-原创力文档...
- sob攻略超详细攻略_2020云南旅游超详细必看攻略(附带云南美食景点攻略)
- @Controller 不能访问到
- java字符串字节_Java中字符串与byte数组之间的相互转换
- C#开发命令执行驱动程序 之 控制标志的命令行参数
- 如何在MySQL中重置AUTO_INCREMENT?
- std::list 循环删除指针_数据结构_006_线性表_循环链表
- Android 代码混淆、第三方平台加固加密、渠道分发 完整教程(转)
- KBQA-Bert学习记录-CRF模型
- jmeter并发性能测试工具
- python金融分析小知识(25)——如何计算股票每日的收益率并进一步计算净值
- 【数据挖掘】知识总结——背景、定义、一般流程及应用(一)
- 利用Python实现scissors-rock-paper-lizard-Spock小游戏
- TLS1.3抓包分析(3)——EncryptedExtentions等
热门文章
- ubuntu中的日志文件位置,用于错误查找
- python和perl哪个好_做为脚本语言来说perl和python那个更有优势?
- 树莓派+神经计算棒2实时人脸检测
- linux 查看cpu和磁盘使用情况
- win10 + Ubuntu18.04 双系统,UEFI+GPT,从win10切换到Ubuntu时黑屏问题
- javabean自定义组件
- python __builtins__ float类 (25)
- 基于EasyNVR二次开发实现业务需求:直接集成EasyNVR播放页面到自身项目
- 人人网的系统架构 网上搜集
- pipenv 虚拟环境新玩法