科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用ASP.NET创建自定义文本框

用ASP.NET创建自定义文本框

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

    在一个.NET的应用程序中使用自己创建的控件可以大大增强应用程序的功能,你可以在原有控件的基础上加入想要的属性和行为,甚至创建自定义的控件。在asp.net中,我们更可以往一些控件中增加一些客户端的javascript功能。

作者:中国IT实验室 来源:中国IT实验室 2007年10月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  


  上面的代码,是典型的对属性的赋值和存取的语句了,相信大家都很熟悉了。要提及一点的是,第2行和第9行的category和descriptiton属性,是该控件的属性窗口中,对backcoloron和backcoloroff两个属性的一个描述。注意,我们使用了color类,这样比较方便,可以用vs.net自带的颜色选择器,而不用输入颜色的十六进制值。

  接着,下面是比较重要的部分。在这个新的控件, 我们将用重载一个AddAttributesToRender()的方法输出新的内容到浏览器中。其中,将加入对客户端的onfocus和onblur事件的响应。另外,要注意的是,当在VS.NET创建该控件时,会自动调用该方法,所以我们可以在设计期间对其中的属性进行设置。

line 1: protected override void AddAttributesToRender( HtmlTextWriter writer )
line 2: {
line 3: base.AddAttributesToRender( writer );
line 4: //only add the client-side javascript for design mode or IE
line 5: if( inDesignMode() || System.Web.HttpContext.Current.Request.Browser.Type.IndexOf( "IE" ) > -1 )
line 6: {
line 7: writer.AddAttribute( "onFocus", "JavaScript:this.style.backgroundColor=@#" + ColorTranslator.ToHtml( _colOn ) + "@#;" );
line 8: if( _colOff.Equals( Color.Empty ) )
line 9: {
line 10: _colOff = this.BackColor;
line 11: }
line 12: writer.AddAttribute( "onBlur", "JavaScript:this.style.backgroundColor=@#" + ColorTranslator.ToHtml( colOff ) + "@#;" );
line 13: }
line 14: }


  其中第3行的目的是,调用基类,继承原有的文本框的属性。AddAttributesToRender的方法使用HtmlTextWriter流作为参数。在第9,第12行,分别通过调用HTML文本流的AddAttribute方法增加其客户端的输出。其中传入了两个参数,第一个参数是HTML的属性,第二个是属性对应的值。它们经过浏览器输出后,变为<input type="text" onBlur="JavaScript...">的形式。

  因为浏览器使用的是十六进制的颜色,所以我们采用ColorTranslator类去将.NET的颜色类型转换为浏览器中能识别的颜色类型(第7和第12行)。在第8行,先检查_coloroff属性是否没被赋值,如果没赋值,则backcoloroff的颜色设置为原来文本框的背景色。

  而在第5行,我们检查浏览器的类型是否支持onfocus和onblur事件,并且由于想在VS.NET的设计时就能对控件的属性进行改变,所以增加了一个判断的函数indesignmode:

line 1: private bool inDesignMode()
line 2: {
line 3: bool blnOut = false;
line 4: if( object.ReferenceEquals( System.Web.HttpContext.Current, null ) )
line 5: {
line 6: blnOut = true;
line 7: }
line 8: else
line 9: {
line 10: blnOut = false;
line 11: }
line 12: return blnOut;
line 13: }


  在上面代码的第4行,通过判断如果HttpContext实例是否为null,如果为null的话,则证明当前是处于VS.NET的设计模式下,没响应HTTP请求。接下来,我们测试一下所做的控件。


  首先,我们编译做好的控件工程,之后,我们在ASP.NET的工程中,加入刚做好的控件。方法是,鼠标右键点击webapplication中的增加引用,其中选择刚才编译好的控件库目录中的dll文件即可。再在vs.net的工具箱中,同样增加新的项,选择刚做好的控件库目录中的dll,这时,你会发现在工具箱中多了刚才做的pimedouttextbox。



  接着,从工具箱中将我们做的控件拖拉到页面中来。注意,这个时候该控件的属性页中,会自动定位在BackColoron属性中。这是因为之前我们设置了DefaultProperty属性。同时注意该属性下的说明文字,这是因为设置了description属性。再切换到HTML视图中去,你会看到

<%@ Register TagPrefix="lib" Namespace="ControlLib" Assembly="ControlLib" %>


  这是由于之前对

[assembly: TagPrefix ( "ControlLib" , "lib" )]


  的定义而产生的。

  再切换回设计视图,将该文本框控件的颜色设置为灰色,会发现同时backcoloroff也同样设置为同样的颜色了,因为之前backcoloroff是没有被赋值的。再改变文本框的背景色,这是会发现backcoloroff的值没变化了,因为这个时候backcoloroff的值已经不是空值了(具体可以再看上文的代码)。接下来,将文本框的背景颜色设置为除白色外的任一种颜色,运行程序。结果时,当该文本框控件获得焦点时,文本框的颜色以backcoloron的颜色显示,当文本框失去焦点时,文本框的颜色以backcoloroff显示。

  如果你想对客户端的代码进行单步跟踪,可以将debugger;加入到要调试的javascript语句中去,如

JavaScript:debugger;this.style.backgroundColor=@#blue@#;


  运行程序,则可以通过监视窗口监视相关的变量,如输入document.forms[0].all[1].name等。

  以上只是简单介绍了asp.net中如何创建自定义的控件,相信读者会有所启发。程序可以在vs.net 2002,2003上调试运行。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件