简单的自定义控件二
来源:互联网 发布:分层时序记忆网络 编辑:程序博客网 时间:2024/05/14 15:12
继上一篇《简单的自定义控件》http://blog.csdn.net/joyhen/article/details/8294951
今天我们来改进一下。还是原来的例子,照着修改,Render渲染输出的html
protected string NewUserLoginControl() { StringBuilder strb = new StringBuilder(""); strb.Append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http:/" + "/www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n"); strb.Append("<html xmlns=\"http:/" + "/www.w3.org/1999/xhtml\" >\r\n"); strb.Append("<head runat=\"server\">\r\n"); strb.Append(" <title>管理员登录登录</title>\r\n"); strb.Append(" <link href=\"style/login/base.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n"); strb.Append(" <link href=\"style/login/style.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n"); strb.Append(" <style type=\"text/css\" id=\"overridestyle\">\r\n"); strb.Append(" body{ background-color:#F2F9FD;}/*#ddd*/#box \r\n.block h2{ background-color:#2275b3;}/*#C66653,#646464*/\r\n"); strb.Append(" .text_field{ height:30px; line-height:30px; padding-left:5px;}\r\n.left{ line-height:30px;}\r\n"); strb.Append(" </style>\r\n"); strb.Append(" <!--[if lte IE 6]>\r\n"); strb.Append(" <script src=\"js/DD_belatedPNG_0.0.8a.js\" type=\"text/javascript\"></script>\r\n"); strb.Append(" <script type=\"text/javascript\">DD_belatedPNG.fix('.button img');</script>\r\n"); strb.Append(" <style type=\"text/css\">.block{border:1px solid #DEEFFA}</style>\r\n"); strb.Append(" <![endif]-->\r\n"); strb.Append(" <!--[if lte IE 8]>\r\n"); strb.Append(" <style type=\"text/css\">.block{border:1px solid #92b2d5}</style>\r\n"); strb.Append(" <![endif]-->\r\n"); strb.Append("</head>\r\n"); strb.Append("<body><%--onkeydown=\"onEnterDown();\"--%>\r\n"); strb.Append(" <div id=\"box\">\r\n<div style=\"height:129px;\"></div>\r\n"); strb.Append(" <div class=\"block\" id=\"block-login\">\r\n<h2>管理员登录</h2>\r\n"); strb.Append(" <div class=\"content login\">\r\n<div class=\"flash\">\r\n"); strb.Append(" <div class=\"message notice\"><p> 请输入正确的用户名和密码</p></div>\r\n"); strb.Append(" </div>\r\n<form id=\"form1\" class=\"form login\" action=\"###\">\r\n"); strb.Append(" <div class=\"group wat-cf\">\r\n"); strb.Append(" <div class=\"left\"><label class=\"label right\">" + Lbl_UserName + "</label></div>\r\n"); strb.Append(" <div class=\"right\"><input type=\"text\" class=\"text_field\"/></div>\r\n"); strb.Append(" </div>\r\n<div class=\"group wat-cf\">\r\n"); strb.Append(" <div class=\"left\"><label class=\"label right\">" + Lbl_UserPwd + "</label></div>\r\n"); strb.Append(" <div class=\"right\"><input type=\"password\" class=\"text_field\"/></div>\r\n"); strb.Append(" </div>\r\n<div class=\"group navform wat-cf\"><div class=\"right\">\r\n"); strb.Append(" <button class=\"button\"><%--onclick=\"submit_login();\"--%><img src=\"images/key.png\" alt=\"保存\" />登录</button>\r\n"); strb.Append(" </div>\r\n</div>\r\n</form>\r\n</div>\r\n</div>\r\n</div>\r\n"); strb.Append(" <%--<script src=\"js/jquery-1.7.2.min.js\" type=\"text/javascript\"></script>\r\n"); strb.Append(" <script src=\"js/js_login.js\" type=\"text/javascript\"></script>\r\n"); strb.Append(" <script type=\"text/javascript\">\r\n $(function() {$(\"input[type=text]\").focus();})\r\n"); strb.Append(" function onEnterDown() {if (window.event.keyCode == 13) {submit_login();}}\r\n</script>--%>\r\n"); strb.Append("</body>\r\n</html>"); return strb.ToString(); }
上面有2个参数,是文本框的标题,所有我们要写2个属性
private string lbl_userName = "用户名:"; [System.ComponentModel.Browsable(true)]//在属性窗口中是否可见 [System.ComponentModel.Category("Appearance")]//属性的分类,如,行为,外观,大家可以在属性窗口看见这样的分类 [System.ComponentModel.DefaultValue("用户名:")] [System.ComponentModel.Description("用户名:")]//这些是显示在属性窗口底下的 public virtual string Lbl_UserName { get { return lbl_userName; } set { lbl_userName = value; } } private string lbl_userPwd = "密 码:"; [System.ComponentModel.Browsable(true)] [System.ComponentModel.Category("Appearance")] [System.ComponentModel.DefaultValue("密 码:")] [System.ComponentModel.Description("密 码:")] public virtual string Lbl_UserPwd { get { return lbl_userPwd; } set { lbl_userPwd = value; } }
然后我们重写的Render部分这样
protected override void Render(System.Web.UI.HtmlTextWriter writer) { writer.Write(NewUserLoginControl()); base.Render(writer); }
好了,重写生成一下CustomerWebControls这个类,然后把web层清理下,重新生成,这时我们把左侧控件箱里的userlogin拖到页面(假如页面是RenderLoginControl.aspx)上
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RenderLoginControl.aspx.cs" Inherits="MyWebSiteTest.admin.RenderLoginControl" %><%@ Register Assembly="CustomerWebControls" Namespace="CustomerWebControls" TagPrefix="cc1" %><cc1:userlogin runat='server'></cc1:userlogin>
再去看看属性窗口
这就出来效果了。上面其实都是大段的html,根本说不上是用户控件。但是这是个思路,下一篇我们把html全部去掉,只留下基本骨架,也就是2个输入框+2个输入框标题 + 一个按钮,然后我们添加更具体的属性和事件。等待出炉吧
- 简单的自定义控件二
- android的自定义控件简单(二)
- 自定义控件<二> 通讯录的简单实现
- Android自定义简单控件(二)
- ALV控件的简单案例之二:自定义ALV…
- 简单的自定义控件
- 简单的自定义控件
- 自定义简单的控件
- 简单的自定义控件
- 简单的自定义控件
- 自定义控件其实很简单 二
- 自定义控件其实很简单 二
- 简单的自定义控件四简单的自定义控件四
- 开发简单的自定义控件
- 简单的自定义Combobox控件
- 简单的自定义控件三
- 自定义简单的ViewPagerIndicator控件
- 简单的自定义组合控件
- dcm4chee使用小结
- 投票协议:构建和解析协议消息
- Android:android.intent.category 定义
- android关于xml的解析
- 更改navigationController push和pop界面切换动画
- 简单的自定义控件二
- linux 进程ps
- usb_control_msg(drivers/usb/core/message.c)
- SQL Server Create/Update/Delete/Select Table/View/Procedure常见用法
- android组件
- 非 UI 线程 调用 Toast
- flex 常用正则验证举例
- php-fcgi进程数超过预设值问题的解决
- java中list、set和map 的区别