现在的位置: 首页 > 综合 > 正文

Developing ASP.NET Custom Control With C# Builder

2013年02月15日 ⁄ 综合 ⁄ 共 4011字 ⁄ 字号 评论关闭

Developing ASP.NET Custom Control With C# Builder

      不知有多少人还记得当初撰写Windows 3.1 程序时的情况,100 程序码, 只为在画面上秀出一个视窗, 如果要在视窗上加上一个TextBox 那么又再得加上几程序码, 其步骤之繁杂足以让许多程序设计师放弃往Windows 上移动。随着物件导向设计的进化脚步,这些折磨人的工作也慢慢的简化 借着Framework( MFCOWL)的帮助,只要1-20 程序码就能完成以往那1-200 程序码的工作。但是如同大部份的进化模式一样,齿一旦转动 向前走就是唯一的道。人们开始发现, 光是Framework 够的,她们需要大生产的工具才能以快的速设计出应用程序, 于是乎Visual Basic 出现!!正式的敲开RAD 时代的大门, 程序设计师只要动动鼠、设设属性, 程序码都用写就可以做到原本要写1-20 的应用程序才能完成的功能,也用一直重复执程序调测画面,因为所即所得正是RAD 的特色之一。Visual Basic 开启一个崭新时代,也启动Framework 之战后的另一场开发工具战役,强敌DELPHI 装备着同样的武器及强大的资库支援加入战场,并以自身独有的执优势停的往Visual Basic 先天的直译弱点攻击。直至今日,DELPHI Visual Basic 地互有消长, Windows 上的战争也慢慢趋向平淡。随着Internet 的普遍化,企业开始要求将原本在Windows 上的系统转移到Web 上, 这时人们开始发现,以往用建构小型Web 系统的CGIASPPHP的生产力不足以满足移转大型系统的需求,于是进化齿再一次的转动,RAD Web 的面容出现在人们眼前,再一次证明舞动鼠也可以写Web 程序,她的名字是AS P.NET。当然,将ASP.NET RAD 相提并似乎有点对称,因为RAD 属于开发工具层面,而ASP.NET 则是语言层面, 可否认的是这者共同实现人们以RAD 方式撰写Web 程序的梦想。既然是RAD 那么舞动鼠、拉拉元件、设设属性也是常态, 但期望着开发者为你预先建好所有元件是实际的, 总有些时候我们得自己动手做些元件,这是本文的主要目的,让我们开始这一趟程吧。

Whats ASP.NET Custom Control

在一开始, 元件这个名词的涵意指的是一个具备好封装、低藕合性、可独运作的程序单元, 随着元件化设计模式的普及化,这种过于广泛的定义慢慢被割成部份。一部份仍旧沿用元件之名,但其涵意已挶限在UI 介面上,另一部份则使用Control 之名, 指的是仅具备UI 的元件。在ASP.NET 上, 程序设计师大部份撰写的是后者, 也就是Custom C ontrol,她可以被安装在RAD 开发工具的元件盘中,使用者可藉由鼠拖放使用她。管是元件还是Co ntrol,其基本的要素是相同的,那就是Pr opertiesMethodsEventsProperties 指的是Control/Component 态,Control.ControlState 代表着该Control 目前的态是处于初始化或是绘制中,Methods 代表的是某一个动作, Control.RenderControl 会将该Control 绘制到HtmlTextWriter 中,Events 则是代表着目前元件的态发生了什么变化, 或是用通知某个动作即将执或是执完毕。这三个要素共同组成一个Control/Compon ent,也间接的提供RAD 工具一个通道Control/Component 互动。使用.NET相容语言实作这三个要素是件简单且再自然过的事,因此重点就在于如何撰写ASP.NET Custom Control ASP.NET 要求所有的Custom Control 必须继承至System.Web.UI.Control 亦或是其子System.Web.UI.WebControls.WebControl者之间的差别在于System.Web.UI.Control 仅具备一个Custom Control 所需的基本功能,WebControl 则同时具备Custom Control 的基本功能及Rending Style 的能 大部份的情况下设计者都会选择直接继承至WebControl 或是其子(TextBoxCheckBox),这样做可以下自撰写Rending Style 的工作。当设计者需要自Rending Style 或是需要此能时,那么直接继承至Control 就是明智的选择。

First Custom Control : NumberEdit

在许多线上购物的网页中常会遇到要输入信用卡号码的对话 某些设计较好的网页会限制该对话仅能接收字部份的输入, 这一节中所撰写的就是这一种Control 。在开始之前! 首先得先解这是如何做到的?无庸置疑!这个Control 一定是TextBoxHTML 中的TextBox 拥有一个名为onKeyPress JavaScript 事件, 此事件会在使用者键入某个字元至TextBox 时触发,只要截这个事件,那么限制使用者的输入就是问题,程序1 是完整的JavaScript 程序码 :( 程序1)

者们可以看到程序中只接受keycode0)keycode>57(ASCII 9)之间的输入,现在只要将这段JavaScript 结合TextBox 就可以完成这一节的NumberEditor Control (程序2 )(程序2)

using System; using System.Text; using System.Web.UI; using System.Web.UI.WebControls;

namespace SmartSuite.Web.Editors

{ public class NumberEditor:TextBox {

private void RenderJavaScript(HtmlTextWriter output)

{ StringBuilder sb=new StringBuilder(); sb.AppendFormat(""); output.Write(sb.ToString());

}

protected override void AddAttributesToRender(HtmlTextWriter writer)

{ base.AddAttributesToRender(writer); writer.AddAttribute("OnKeyPress",String.Format("return

{0}_KeyPress_Handle(this);",base.ID)); }

protected override void Render(HtmlTextWriter output)

{ RenderJavaScript(output); base.Render(output);

}

} }

NumberEditor 选择直接继承至TextBox 这可以下从头撰写一个TextBox 的时间。让我们从Render 函式开始讨起, 这个函式是由此Control Container Contro l(容器)所呼叫,

大多情况下这个Conatiner Control 就是Page ControlPage Control 在呼叫子Control Render 函式时会传入一个HtmlTextWriter 物件, Control 可以用这个物件绘出Control 所对应的HTML 程序码。NumberEditor 这个物件绘出JavaScript 程序码, 接着接父(TextBox)绘出预设的TextBox HTML 程序码。为JavaScript onKeyPress 结上NumberEditor 程序中覆载AddAttributesToRender 函式完成这个动作,这个函式是WebControl 所独有的,她负责绘出HTML Tag 中的參數部份,Style ValueOnKeyPressOnBlur 等等之

Debuging Custom Control

管是使用那种工具撰写何种程序, 除错都是最重要的动作, 程序是人写的, 怎可能出错呢?Custom Control 除错与除错一般程序大致相同,只要在原先的ASP.NET Project Group 中加入Custom Control Project 即可完成准备动作(1)

(1)


接着只需设定想要程序停下的中断点即可(2 ) (2)

具实用性的Custom Control : Spin Edit

Spin Edit Windows 中是相当常用的Control 通常是用调整一个对话中的字,但是这种Control 在网页中并 这一节中将开发运于网页上的Spin Edit Control。在开始之前!者们得先解一个重点,Spin Edit并非是一个单一Control ,她是由

抱歉!评论已关闭.