Discuz!NT控件剖析 之 Button [原创: 附源码]
Discuz!NT控件剖析 之 Button [原创: 附源码] 收藏
为了便于大家下载和使用这组控件,本人在源代码的基本上去掉了与项目相关的一些令人费解的的代码。同时把相关的控件与具体运行实例相绑定,这只是为了让大家使用和分析方便,必定不是库中所有控件大家都愿意用或感兴趣。正所谓投其所好嘛。另外下载包中的文件所在的项目和文件位置也是与开源项目中的配置相一致的,这么搞可以方便大家按图索骥,以便于同步开源项目中的文件。
因为要求做出多个显示样式,所以使用枚举方式显示可能选择的样式类型,相关代码如下:
2 public enum ButtonType
3 {
4 Normal, //普通
5 WithImage, //带图
6 XpStyle //不带图
7 }
8
9
10 public ButtonType ButtontypeMode
11 {
12 get
13 {
14 object obj = ViewState["ButtontypeMode"];
15 return obj == null ? ButtonType.WithImage : (ButtonType)obj;
16 }
17 set
18 {
19 ViewState["ButtontypeMode"] = value;
20 }
21 }
22 #endregion
23
24
而脚本注册属性为string ,用于输入和保存相关脚本信息
2 public string ScriptContent
3 {
4 get
5 {
6 object obj = ViewState["ScriptContent"];
7 return obj == null ? "" : (string)obj;
8 }
9 set
10 {
11 ViewState["ScriptContent"] = value;
12 }
13 }
14
2 private bool _validateForm = false;
3 //定义是否调用js函数validate(this.form);进行数据校验
4 public bool ValidateForm
5 {
6 set
7 {
8 this._validateForm = value;
9 }
10 get
11 {
12 return this._validateForm;
13 }
14 }
15 #endregion
16
2 {
3 //如果应用系统样式,这里只为当没有CSS文件时,则直接将样式写到控件中
4 if (ApplyDefaultStyle)
5 {
6 if (this.ButtontypeMode == ButtonType.Normal)
7 {
8 output.Write("<span><a href=\"javascript:void(0);\" style=\"BORDER-RIGHT:
9 #999999 1px solid; PADDING-RIGHT: 10px; BACKGROUND-POSITION: 1px 1px; BORDER-TOP:
10 #cccccc 1px solid; DISPLAY: inline-block; PADDING-LEFT: 10px; FONT-WEIGHT: bold;
11
12 }
13
14 if (this.ButtontypeMode == ButtonType.WithImage)
15 {
16 output.Write("<span><a href=\"javascript:void(0);\" style=\"BORDER-RIGHT: #999999 1px solid;
17 PADDING-RIGHT: 3px; BACKGROUND-POSITION: 1px 1px; BORDER-TOP: #cccccc 1px solid;
18 DISPLAY: inline-block; PADDING-LEFT: 22px; FONT-WEIGHT: bold; FONT-SIZE: 12px;
19 PADDING-BOTTOM: 3px; MARGIN: 1px; BORDER-LEFT: #cccccc 1px solid; CURSOR: pointer;
20
21 }
22
23 if (this.ButtontypeMode == ButtonType.XpStyle)
24 {
25 output.Write("<span style=\"BACKGROUND-POSITION: left top; DISPLAY: inline-block;
26 display: -moz-inline-box; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: 12px;
27 BACKGROUND-IMAGE: url(" + this.XpBGImgFilePath + "/xpbuttonbg_l.gif);
28
29 }
30 }
31
32
33 //表单验证属性判断,(注:要在web页面上FORM的submit中加入该函数,并进行相关声明
34 //即可,参见webtest页面)
35 if (ValidateForm)
36 {
37 sb.Append("if(validate(this.form)){");
38 //当验证通过后则执行向服务器提交内容的JS代码
39 sb.Append(Page.GetPostBackEventReference(this,"") + ";}");
40
41
42 //用户希望进行注册的JS代码,这块代码可放在表单验证属性判断之前。
43 if (ScriptContent != "")
44 {
45 sb.Append(ScriptContent);
46 }
47
48 //将上来的设置写入到客户端的onlick事件中。
49 output.WriteAttribute("onclick", sb.ToString());
50 }
51
52
53
54
2
3 public event EventHandler Click
4 {
5 add
6 {
7 Events.AddHandler(EventClick, value);
8 }
9 remove
10 {
11 Events.RemoveHandler(EventClick, value);
12 }
13 }
14
15 protected virtual void OnClick(EventArgs e)
16 {
17 EventHandler clickHandler = (EventHandler)Events[EventClick];
18 if (clickHandler != null)
19 {
20 clickHandler(this, e);
21 }
22 }
23
24
25 public void RaisePostBackEvent(string eventArgument)
26 {
27 OnClick(new EventArgs());
28 }
29
30
31 void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
32 {
33 this.RaisePostBackEvent(eventArgument);
34 }
35
36
这样就完成了这个控件的主干部分,而其它的一些属性,如图片路径之类的代码大家可参见一下源码,这里就不多做说明了。
转载于:https://blog.51cto.com/daizhj/230126
Discuz!NT控件剖析 之 Button [原创: 附源码]相关推荐
- Discuz!NT控件剖析 之 DataGrid(数据列表) [原创: 附源码]
自从 9月未开始写关于"ICONIX方法"的系列文章以来,到今天已有两个多月了,当初因为兴趣点的转移才划一 段落的Discuz!NT 系列文章,从今天开始又要开始续写了.这写这个系 ...
- asp.net服务器端对话框控件的简单实现(附源码)
最近项目要用到一个对话框控件,正好自己从前写了一个,拿了出来,看着自己从前写的东西,唏嘘不已. 下面是一个精简版的源代码,release在这里,谁喜欢,自己编译成dll吧. http://files. ...
- 【Kivy自学笔记】Python开发App必备!Kivy基础控件详解(含视频源码)
文章目录 基础控件 窗口坐标系 尺寸(通用) 位置(通用) Python与kv文件如何实现互相访问(Kivy中的特殊关键字) Button 按钮 Label 标签 Image 图片 TextInput ...
- 【办公-Word-VB】Word中VB控制ActiveX控件转换人民币大写并填充-源码带完整注释
2019.03.15更新:已经将个人做好的完整docm 代码附在文后,先上图. 记录几个开发过程中遇到的难点和注意点. Word中添加ActiveX控件,如输入框,需要放置在 文本框 中,或者放置在 ...
- Android App接管手势处理TouchEvnet中单点触摸和多点触控的讲解及实战(附源码 超简单实用)
运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.单点触摸 dispatchTouchEvent onInterceptTouchEvent onTouchEvent三个方法的输入参数都是手势 ...
- PHP疫情防控隔离酒店管理系统-计算机毕设 附源码96326
PHP隔离酒店管理系统 摘 要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,隔离酒店当然也不例外.隔离酒店管理系统是以实际运用为开发背 ...
- android如何创建进度条,Android控件ProgressBar--自定义进度条及源码分析
这里用SeekBar做演示,SeekBar继承自ProgressBar,拥有其一切特性,并且其支持拖动以及DPAD左右键的进退.一起学习吧! 一.自定义SeekBar进度条样式 原生SeekBar效果 ...
- Springboot疫情防控学生自助申报系统 毕业设计-附源码260839
springboot疫情防控学生自助申报系统 摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势.计算机的优势和普及使得各种信息系统的开发成为必需. 自从2020年新冠疫情爆发以来,防疫 ...
- opic4:Qt入门之常用qt控件认知之Button系列
opic4:Qt入门之常用qt控件认知之Button系列 2013-06-27 18:21:54 标签:QAbstractButton QPushButton QRadioButton 原创作品,允许 ...
最新文章
- Python求解最速降线问题
- 为什么大多数IP地址通常以192.168开头?
- 行业「趋轻」,尚美“共创品牌”推动酒店业进入春天
- 《机器学习》 周志华学习笔记第五章 神经网络(课后习题) python实现
- linux账号前有个base,安装 aconda 后Linux的终端界面前部出现(base)字样
- JavaWeb学习过程 之c3p0的使用
- Web框架——Flask系列之蓝图Blueprint(二十一)
- 纷享销客完成新一轮数亿元融资,持续领跑中国CRM产业发展
- syslog发送日志而docker容器接收不到的问题
- 编译pluma: pluma/Makefile.am:192: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
- 初等模型---交通流和道路通行能力
- 如何防御DOS和DDOS攻击
- 梅宫主:穷人的命富人的命
- 在PlatEMO v2.9中增加多模态多目标算法(1)
- 通识,修 还是不修?——多选一门通识课对绩点影响几何?
- 严格模式、混杂模式与怪异模式
- gps和惯性组合matlab程序,北航卡尔曼滤波与组合导航 第三次作业 SINS/GPS组合动态实验...
- Nest.js 怎样使用 hbs 的 partials?
- RESTClient 使用教程
- STK的CZML Exporter插件
热门文章
- geometry java_java程序操作Geometry对象(示例代码)
- 喜讯丨神策数据四大客户案例斩获大数据“星河”案例
- 精华自取:神策 2019 数据驱动大会亮点回顾
- 亲和属性和链路管理组的TE隧道路径控制原理
- java 网站源码 四套模版 兼容手机平板PC 在线编辑模版 freemaker 静态引擎
- Node.js Promise.all 限制并发数量
- change to port 80 instead of 8069
- php和mvc的认识
- 转)微软Olap服务MDX函数应用举例
- finite state machine drawer online