|
Asp.net的设计方式和设计理念和其他的如Asp,Jsp,Php,Perl 等都不一样,几乎是完全的面向对象设计!代码的复用就是其 中差异较大的特点之一,Asp.net除了可以用Include以外,还提供 了比较有特点的Web控件,包括:Ascx形式和带设计时支持的控 件[本文属于后者],为了熟悉这些新概念,我自己写了个Web控件。 在实际项目中运行使用良好,以后,要有时间,我还将不断改进。
ValidateCode控件的使用方法: 第一步: 编译我提供的原代码, 然后,在Studio.net 2003工具栏上, 选择"添加/移除项", 选中编译好的dll文件。 第二步: 工具栏上就会多一个Web控件ValidateCode,做好一个Web窗体,在Studio.net 2003开发界面上,直接把控件拖到WebForm上,就OK! 第三步: 在该控件的GraphicOK事件中获取,验证码的字符信息,用于和用户录入做比较! 最后一步: 在网站的根目录下,建一个temp目录(也可以自己指定目录),用于存放验证码 图片,不用担心,代码会自动删除无用的图片! 原代码如下: using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; using System.IO; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; namespace WebValidateCode { /// <summary> /// ValidateCode 的摘要说明。 /// 设计者:王海波 2004-11-20 /// </summary> /// public enum GraphicType { Jpg = 0, Gif = 1, Png = 2, Bmp = 3, } //[ToolboxBitmap(@"D:\DotnetApp\ValidateCode\ValidateCode.bmp") ] //设置控件在工具箱上的图标 public class ValidateCode : System.Web.UI.WebControls.WebControl ,INamingContainer { private int pCodelen=5; private int pChartWidth=100; private int pChartHeight=20; private GraphicType pChartType; private string pAuthenCode; private string pTempImageURLPath="/temp"; private string pAuthenImageFullname; private string pAuthenImageFullURL; //生成校验码的变量 start private Bitmap validateImage; private Graphics g; //生成校验码的变量 End private TextBox txt=new TextBox(); private System.Web.UI.WebControls.Image img= new System.Web.UI.WebControls.Image(); #region 定义控件事件 public delegate void GraphicCreated(object sender, EventArgs e); public event EventHandler GraphicOK; //在校验图片生成结束以后触发 protected virtual void OnGraphicOK(object sender, EventArgs e) { if (GraphicOK != null) { //Invokes the delegates. GraphicOK(sender, e); } } #endregion #region 控件属性 //生成校验码的长度 [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(true),Description("需要验证码的长度,建议在5~8位之间!")] public int CodeLength { get { return pCodelen; } set { pCodelen = value; } } //生成校验码的长度 [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(true),Description("生成验证码图片的临时存放路径,要求必须是网站下的虚拟目录!")] public string TempImageURLPath { get { return pTempImageURLPath; } set { pTempImageURLPath = value; } } [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(GraphicType.Jpg),Description("选择生成校验图文件的类型(Jpg;Gif;Png;Bmp)!")] public GraphicType ChartType { get { return pChartType; } set { pChartType = value; } } //生成校验码图片的宽度 public int ChartWidth { get { return pChartWidth; }
set { pChartWidth = value; } } //生成校验码图片的高度 public int ChartHeight { get { return pChartHeight; } set { pChartHeight = value; } } //需要生成的校验码 public string AuthenCode { get { return pAuthenCode; } set { pAuthenCode = value; } } #endregion /// <summary> /// 将此控件呈现给指定的输出参数。 /// </summary> /// <param name="output"> 要写出到的 HTML 编写器 </param> protected override void Render(HtmlTextWriter output) { System.Web.UI.WebControls.Image objImage; //TextBox objTxt; //绘制包含的控件 objImage = (System.Web.UI.WebControls.Image) Controls[0]; //objTxt = (TextBox) Controls[1]; if(pAuthenCode==null) pAuthenCode=GetValidateCode(); OnGraphicOK(this,EventArgs.Empty ); GetRandomImage(pAuthenCode); objImage.ImageUrl=pAuthenImageFullURL; objImage.RenderControl(output); } /// <summary> /// 给控件添加子控件 /// </summary> protected override void CreateChildControls( ) { //Controls.Add(btn); Controls.Add(img); //Controls.Add(txt); } /// <summary> /// 控件Load时候属性的初始化 /// </summary> /// <param name="e"></param> protected override void OnLoad(System.EventArgs e) { EraseOldGraphic(); //删除过期的图片 } /// <summary> /// 生成随机的 /// </summary> private void MakeRandomFileName() { string strRandName=DateTime.Now.Ticks.ToString()+".jpg"; pAuthenImageFullname=this.Page.MapPath(TempImageURLPath)+@"\"+strRandName; pAuthenImageFullURL=TempImageURLPath+"/"+strRandName; } private void GetRandomImage(string strValidateCode) { //生成随即图片的全名,和全URL MakeRandomFileName();
validateImage = new Bitmap(pChartWidth, pChartHeight, PixelFormat.Format24bppRgb); // .Format24bppRgb); g = Graphics.FromImage(validateImage); g.Clear(Color.LightGray) ; //g.DrawString(strValidateCode , new Font("宋体",16,FontStyle.Bold),new SolidBrush(Color.DarkRed),new PointF(2,2)); for(int i=0;i<strValidateCode.Length;i++) { Random r = new Random(); PointF startPos=new PointF(r.Next(3,6)+(r.Next(12,14)*i ),r.Next(-1,2) ); g.DrawString(strValidateCode.Substring(i,1) , new Font("宋体",14,FontStyle.Italic),new SolidBrush(Color.Blue),startPos); } //g.FillRectangle(new LinearGradientBrush(new Point(0,0), new Point [1] [2] 下一页 [C语言系列]NET 中C#的switch语句的语法 [聊天工具]Gmail推出新功能:Web Clip__天极Yesky [聊天工具]Web MSN你玩了吗__天极Yesky [系统软件]托拽Explore中的文件到VB.net的窗口 [系统软件]Web Browser Express 概述 [系统软件]对Internet Explorer Web 控件做一点修改 [系统软件]Boost库在XP+Visual C++.net中的安装 [常用软件]小技巧:三步实现Web迅雷录制PPLive节目 [常用软件]新配色面板:Paint.Net3.0RC1官方下载 [常用软件]天网防火墙:打开WEB和FTP服务
|