收藏--《自己动手做聊天机器人》

自己动手做WEB控件

02-19

新年,把自己刚做的一个控件拿出来给大家分享,给自己动手做控件的朋友切磋切磋。 rn 现在在山西长治带一帮童子军做一个警用地理信息系统,前期一直在做设计,现在项目刚刚进入编码阶段。一日有组员做一个数据录入界面,有日期输入字段。该老弟直接用一个TEXTBOX就完事了,我批评说应该使用日历控件让用户可以选择。 rn 该老弟就在界面上直接拖了一个Calendar控件,我说你能不能做一个弹出式的,该老弟说微软没有提供弹出式的日历控件。我一查,果真如此,说那只能自己定义一个控件了。该老弟说不会。有项目组成员踊跃自荐,说他来做。我想想应该鼓励,就让他做了。晚上我来检查成果,他是提交了。他使用一个select和一个Calendar控件包装成了一个下拉式日历控件,具体源码如下: rn前台: rn<%@ Control Language="C#" AutoEventWireup="true" CodeFile="dpList.ascx.cs" ClassName="dpList" Inherits="dpList" %> rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn后台: rnusing System; rnusing System.Data; rnusing System.Configuration; rnusing System.Collections; rnusing System.Web; rnusing System.Web.Security; rnusing System.Web.UI; rnusing System.Web.UI.WebControls; rnusing System.Web.UI.WebControls.WebParts; rnusing System.Web.UI.HtmlControls; rnrnrnpublic partial class dpList : System.Web.UI.UserControl rn rn protected void Calendar1_SelectionChanged(object sender, EventArgs e) rn rn Select1.Items[0].Value = Calendar1.SelectedDate.ToShortDateString(); rn rn rn rnrn 应该说这是一个用户定义的控件,但是该老兄将代码提交给使用者的时候竟然不知道怎么样将选定的日期传出,要调用者使用会话变量去取。我想这也是初学者容易犯的一个错误。 rn 在又好气又好笑的同时,我给他添加了一个GET/SET函数,解决了他的设置和取值的问题: rn public DateTime myDate rn rn get rn rn return Calendar1.SelectedDate; rn rn set rn rn Calendar1.SelectedDate = value; rn Select1.Items[0].Value = value.ToShortDateString(); rn rn rnrn public string getDateString() rn rn return Calendar1.SelectedDate.ToShortDateString(); rn rnrn 解决了设置和读取值的问题后,调用者开始接入界面,到调用人员调试界面的时候,问题开始出现:当界面上有几个日期控件的时候,所有的弹出的日历只能在第一个日期控件的位置下显示,所有的修改日期只能影响到第一个日期控件的值。 rn 我看了看,只能一笑了之。这是因为他使用的是客户端的DIV和SELECT的原因,实例化后并没有生成不同的名称的标签。 rn 叹了口气,我只能重做。 rn 花了大约15分钟,重新制作了这个日期控件: rn前台: rn<%@ Control Language="C#" AutoEventWireup="true" CodeFile="dpList.ascx.cs" Inherits="dpList" %> rnrn rnrn rn rnrn rn rn rn rn rn rn rn rn rn rn rn后台: rnusing System; rnusing System.Data; rnusing System.Configuration; rnusing System.Collections; rnusing System.Web; rnusing System.Web.Security; rnusing System.Web.UI; rnusing System.Web.UI.WebControls; rnusing System.Web.UI.WebControls.WebParts; rnusing System.Web.UI.HtmlControls; rnusing System.Text; rnrn/// rn///模块编号: rn///编写日期:2010-02-07 rn/// rnpublic partial class dpList : System.Web.UI.UserControl rn rn protected void Page_Load(object sender, EventArgs e) rn rn if (IsPostBack) rn rn if (Calendar1.Visible) rn rn Calendar1.Visible = false; rn div1.Style.Value = "width: 268px; height: 20px; display: block; position: absolute; clear: none;"; rn rn rn rnrnrn public DateTime myDate rn rn get rn rn return Calendar1.SelectedDate; rn rn set rn rn Calendar1.SelectedDate = value; rn TextBox1.Text = value.ToString("yyyy-MM-dd"); rn rn rnrn public string getDateString() rn rn return Calendar1.SelectedDate.ToShortDateString(); rn rnrn protected void Calendar1_SelectionChanged(object sender, EventArgs e) rn rn TextBox1.Text = Calendar1.SelectedDate.ToString("yyyy-MM-dd"); rn Calendar1.Visible = false; rn div1.Style.Value = "width: 268px; height: 20px; display: block; position: absolute; clear: none;"; rn rnrn protected void Button1_Click(object sender, EventArgs e) rn rn Calendar1.Visible = true; rn div1.Style.Value = "width: 268px; height: 180px; display: block; position: absolute; clear: none;"; rn rnrn protected void TextBox1_TextChanged(object sender, EventArgs e) rn rn if (TextBox1.Text.Trim() != "") rn rn Calendar1.SelectedDate = Convert.ToDateTime(TextBox1.Text); rn rn rnrn //选择月份重新打开的函数: rn protected void reOpen(object sender, MonthChangedEventArgs e) rn rn Calendar1.Visible = true; rn div1.Style.Value = "width: 268px; height: 180px; display: block; position: absolute; clear: none;"; rn rn rn然后又加上了TEXTBOX输入的检验控件,交付调用人员后基本可以使用了。 rn在进一步测试的过程中又发现当客户端中弹出日历后从TEXTBOX直接失去焦点关闭不了日历,又花了两个多小时去修改。 rn由于DIV没有失去焦点的事件,所以在处理的过程中花费了一些力气。 rn本来是想直接提供源码给大家的,一来上面的代码可是使用,二来春节准备写该贴的时候儿子(中学生)说花了那么大的力气,应该可以收点费,于是就让儿子去淘宝注册了一个账号,当成宝贝来卖了,以资其游戏费用。 rn下载完整源码请登录:http://item.taobao.com/auction/item_detail-0db2-6be85da63eee3578daab35dca554e380.jhtml# rn收费5元,也测试一下开源软件能否赢利。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试