<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    ???? Asp.net的設(shè)計方式和設(shè)計理念和其他的如Asp,Jsp,Php,Perl

    等都不一樣,幾乎是完全的面向?qū)ο笤O(shè)計!代碼的復用就是其

    中差異較大的特點之一,Asp.net除了可以用Include以外,還提供

    了比較有特點的Web控件,包括:Ascx形式和帶設(shè)計時支持的控

    件[本文屬于后者],為了熟悉這些新概念,我自己寫了個Web控件。

    在實際項目中運行使用良好,以后,要有時間,我還將不斷改進。

    ValidateCode控件的使用方法:

    第一步:

    編譯我提供的原代碼, 然后,在Studio.net 2003工具欄上, 選擇"添加/移除項", 選中編譯好的dll文件。

    第二步:

    工具欄上就會多一個Web控件ValidateCode,做好一個Web窗體,在Studio.net 2003開發(fā)界面上,直接把控件拖到WebForm上,就OK!

    第三步:

    在該控件的GraphicOK事件中獲取,驗證碼的字符信息,用于和用戶錄入做比較!

    最后一步:

    在網(wǎng)站的根目錄下,建一個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 的摘要說明。
    ?/// 設(shè)計者:王海波 2004-11-20
    ?/// </summary>
    ?///
    ?public enum GraphicType
    ?{
    ??Jpg = 0,
    ??Gif = 1,
    ??Png = 2,
    ??Bmp = 3,
    ?}


    ?//[ToolboxBitmap(@"D:\DotnetApp\ValidateCode\ValidateCode.bmp") ]?//設(shè)置控件在工具箱上的圖標
    ?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;?? //在校驗圖片生成結(jié)束以后觸發(fā)

    ??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("生成驗證碼圖片的臨時存放路徑,要求必須是網(wǎng)站下的虛擬目錄!")]
    ??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>
    ??/// 將此控件呈現(xiàn)給指定的輸出參數(shù)。
    ??/// </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時候?qū)傩缘某跏蓟?br />??/// </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(120,30), Color.FromArgb(0,0,0,0),Color.FromArgb(255,255,255,255)),0,0,120,30);
    ???switch(pChartType)
    ???{
    ????case GraphicType.Jpg:
    ????
    ?????validateImage.Save(pAuthenImageFullname, ImageFormat.Jpeg);
    ?????break;
    ?
    ????case GraphicType.Gif:

    ?????validateImage.Save(pAuthenImageFullname, ImageFormat.Gif);
    ?????break;

    ????case GraphicType.Png:

    ?????validateImage.Save(pAuthenImageFullname, ImageFormat.Png);
    ?????break;
    ?
    ????case GraphicType.Bmp:

    ?????validateImage.Save(pAuthenImageFullname, ImageFormat.Bmp);
    ?????break;
    ?
    ????default:
    ?????validateImage.Save(pAuthenImageFullname, ImageFormat.Jpeg);
    ?????break;
    ???
    ???}
    ???????
    ???validateImage.Dispose();

    ???g.Dispose();
    ???
    ???
    ??
    ??}

    ??/// <summary>
    ??/// 動態(tài)從數(shù)字和字母組成的元素中動態(tài)選擇生成校驗碼
    ??/// </summary>
    ??private string GetValidateCode()
    ??{
    ???char[] s = new char[]{'0','1', '2','3','4','5','6','7','8','9','a'
    ????????? ,'b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q'
    ????????? ,'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G'
    ????????? ,'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W'
    ????????? ,'X','Y','Z'};
    ???string num = "";
    ???Random r = new Random();

    ???//根據(jù)用戶需要的長度來定義驗證碼的位數(shù)
    ???for(int i = 0; i < CodeLength; i++)
    ???{
    ????num += s[r.Next(0, s.Length)].ToString();
    ???}
    ???
    ???return num;
    ??}

    ??/// <summary>
    ??/// 清除時間超過20秒的臨時圖片記錄
    ??/// </summary>
    ??/// <returns>成功返回true,失敗返回false</returns>
    ??public bool EraseOldGraphic()
    ??{

    ???try
    ???{
    ????DirectoryInfo Dinfo=new DirectoryInfo(this.Page.MapPath(pTempImageURLPath));
    ????FileInfo[] FileSet;
    ?
    ????if(Dinfo.Exists)
    ????{????
    ?????switch(pChartType)
    ?????{
    ??????case GraphicType.Jpg:
    ????
    ???????FileSet=Dinfo.GetFiles("*.jpg");
    ???????break;
    ?
    ??????case GraphicType.Gif:

    ???????FileSet=Dinfo.GetFiles("*.gif");
    ???????break;

    ??????case GraphicType.Png:

    ???????FileSet=Dinfo.GetFiles("*.png");
    ???????break;
    ?
    ??????case GraphicType.Bmp:

    ???????FileSet=Dinfo.GetFiles("*.bmp");
    ???????break;
    ?
    ??????default:
    ???????FileSet=Dinfo.GetFiles("*.jpg");
    ???????break;
    ???
    ?????}

    ?????foreach(FileInfo fileInfo in FileSet)
    ?????{
    ??????if(fileInfo.Exists)
    ??????{
    ???????DateTime dts=DateTime.Now;
    ???????DateTime dtc=fileInfo.CreationTime;

    ???????TimeSpan ts=dts-dtc;
    ?
    ???????if(ts.Seconds>20)
    ???????{????????
    ????????fileInfo.Delete();
    ???????}
    ??????}
    ?????}
    ????}

    ????return true;
    ???}
    ???catch(IOException ioe)
    ???{
    ?????? return false;
    ???}
    ??}
    ??
    ?}
    }


    posted on 2007-02-01 10:43 SIMONE 閱讀(547) 評論(0)  編輯  收藏 所屬分類: .NET
    主站蜘蛛池模板: 在线看无码的免费网站| 精品在线免费视频| a毛片全部免费播放| 国产猛烈高潮尖叫视频免费| 亚洲一区二区三区电影| 十八禁视频在线观看免费无码无遮挡骂过| 四虎影视www四虎免费| 亚洲日韩精品无码专区加勒比☆ | 亚洲精品人成无码中文毛片| 亚洲中文字幕久久久一区| 99精品国产免费久久久久久下载| 亚洲av无码乱码国产精品| 久久九九免费高清视频| 亚洲综合久久夜AV | 四虎影视无码永久免费| 亚洲国产精品无码AAA片| 特级做A爰片毛片免费看无码 | 久久久久亚洲AV无码专区桃色| 国产偷国产偷亚洲高清在线| 亚洲无线码一区二区三区| 一级毛片a免费播放王色| 一个人看www在线高清免费看 | 亚洲大片免费观看| 国产h肉在线视频免费观看| 亚洲欧美日韩中文无线码| 亚洲Av无码乱码在线播放| 最近中文字幕免费大全| 亚洲综合久久综合激情久久| 国产精品69白浆在线观看免费| 亚洲私人无码综合久久网| 亚洲色欲久久久综合网东京热| 亚洲免费观看视频| 亚洲18在线天美| 亚洲成av人在片观看| 最近免费2019中文字幕大全| 亚洲s码欧洲m码吹潮| 久久亚洲精品中文字幕无码| 国产在线观看免费观看不卡| 一级毛片不卡免费看老司机| 久久精品亚洲一区二区三区浴池 | 亚洲综合精品网站在线观看|