<?xml version="1.0" encoding="GBK" ?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dcterms="http://purl.org/dc/terms/">
 <channel>
  	  <title><![CDATA[shmily-no1的博客]]></title>
	  <link>http://shmily-no1.blog.163.com</link>
	  <description><![CDATA[梦里落花花无常，水中剪影影无双，折罢柳岸三千絮，烟点江风疑旧乡...... 天蝎gg的魅力四射,尤其是他的那双眼睛,深深的吸引住人。而天蝎最广为流传的佳话,便是对爱人的一心一意,虽然有时稍显霸道,在爱面前又有谁会苛责？王菲的“将爱”是同名专辑的主打歌曲,那种“将爱进行到底”的精神,的的确确是天蝎gg们不撞南墙不回头精神的超强体现。至于撞了南墙回不回头,这个这个……（汗￣）]]></description>
	  <language>zh-CN</language>
	  <pubDate>Fri, 18 Jul 2008 11:14:34 +0800</pubDate>
	  <lastBuildDate>Fri, 18 Jul 2008 11:14:34 +0800</lastBuildDate>
	  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
	  <generator><![CDATA[NetEase Space]]></generator>
	  <managingEditor><![CDATA[shmily-no1]]></managingEditor>
	  <webMaster><![CDATA[shmily-no1]]></webMaster>
		  <ttl>120</ttl>
	  <image>
	  	<title><![CDATA[shmily-no1的博客]]></title>
	  	<url>http://ava.blog.163.com/photo/l99VQHJX6vqaL0GcbawSwg==/181832834955097615.jpg</url>
	  	<link>http://shmily-no1.blog.163.com</link>
	  </image>
  <item>
  	<title><![CDATA[羽毛球用品之羽拍- KASON（凯胜）羽毛球拍性能]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/47650689200861895553431</link>
    <description><![CDATA[<div><P>KASON（凯胜）羽毛球拍适合类型图</P>
<P>羽毛球拍选购，羽毛球拍适合选手类型图是挑选球拍的重要依据。KASON羽毛球拍现有以下七大系列：</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、KASON TSF ENERGY&nbsp;&nbsp; 汤仙虎能量链系列羽毛球拍；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、KASON TSF GLORY 汤仙虎荣耀系列羽毛球拍；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、KASON COMPOSITION 聚合力量系列羽毛球拍；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、KASON PARTNERS 最佳拍档系列羽毛球拍；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、KASON K-MAX 新碳素时代系列羽毛球拍；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6、KASON LEPTON &amp;&nbsp; CARVEL 超轻碳素系列羽毛球拍；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7、KASON TROY 特洛伊系列羽毛球拍。</P>
<P><A href="http://img.blog.163.com/photo/inulKhOs3wWtFqbOqPfBWw==/1134344156144460737.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/inulKhOs3wWtFqbOqPfBWw==/1134344156144460737.jpg"></A></P>
<P>KASON （凯胜）羽毛球拍技术参数</P>
<P>&nbsp;&nbsp; HTS CARBON FIBERHTS<BR>&nbsp;&nbsp; HTS碳纱是一种使用在航太工程的材料,具有极佳的强度和轻质的特点使它在球拍的生产中具有着极大的优势。同时采用了不同方向的碳纱排列，碳纱在不用的角度的排列给予整个框架多重的保护和硬度的增强。<A href="http://img.blog.163.com/photo/cZaoOkLis9MIaMW5MnJokA==/4863324647607223929.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/cZaoOkLis9MIaMW5MnJokA==/4863324647607223929.jpg"></A></P>
<P>能量链设计<BR>&nbsp;&nbsp;&nbsp; Power+Speed+Duradility<BR>&nbsp;&nbsp; “能量链”将球线穿在一个比普通球拍更流线关的链状护线孔中，从而减少了球线与框架接触过程中的能量损失，并且整个系统创造出了一个链状的整体，一个完整结合的框架。在球拍击打的瞬间可以比一般的球拍储蓄更多的能量并传递给羽毛球，使之飞行的更快更有力。 出现在你面前的是一支结合了稳定性和耐久性的出色球拍，你可以随心所欲的使用这支充满活力的球拍进行各种的击打动作。</P>
<P>&nbsp;&nbsp;&nbsp; “能量链”把能量留在一个框体内，并快速的传递能量。即使经过多场的比赛，球线的紧力还是保持很好，让你可以更出色的发挥。同时，紧凑的整体更可以最大限度的提高框体的稳定性。<A href="http://img.blog.163.com/photo/HyffcCRRHcjk9c-PWQ66SA==/1419478307552626814.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/HyffcCRRHcjk9c-PWQ66SA==/1419478307552626814.jpg"></A><A href="http://img.blog.163.com/photo/8xedxFtyjCuvo26S_WxvOw==/1419478307552626855.jpg" target=_blank><IMG src="http://img.blog.163.com/photo/8xedxFtyjCuvo26S_WxvOw==/1419478307552626855.jpg"></A><A href="http://img.blog.163.com/photo/cZaoOkLis9MIaMW5MnJokA==/4863324647607223929.jpg" target=_blank></A></P>
<P>&nbsp;</P></div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/47650689200861895553431</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/47650689200861895553431</guid>
    <pubDate>Fri, 18 Jul 2008 09:55:53 +0800</pubDate>
    <dcterms:modified>2008-07-18T10:01:46+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[2008年4月18日]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/476506892008318322225</link>
    <description><![CDATA[<div><FONT color=#ff9900>
<P style="TEXT-INDENT: 2em"><A href="http://baike.baidu.com/pic/1/11922564967510541.jpg"></A></P></FONT><FONT color=#ff9900>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT> 
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp;&nbsp;shmily的意思为see how much i love you 中文的意思:看我有多爱你！此词多为表达爱意&nbsp; 时使用。</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>这个词的来源是这篇文章:</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>我的祖父和祖母结婚已逾半个世纪，然而多少年来，他们彼此间不倦地玩着一个特殊的游戏：在一个意想不到的地方写下“Shmily”这个词留待对方来发现。他们轮换着在屋前房后留下“Shmily”，一经对方发现，就开始新的一轮。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 他们用手指在糖罐和面箱里写下“Shmily”，等着准备下一餐饭的对方来发现；他们在覆着霜花的玻璃上写下“Shmily”；一次又一次的热水澡后，总可以看见雾气蒙罩的镜子上留下的“Shmily”。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 有时，祖母甚至会重卷一整卷卫生纸，只为了在最后一片纸上写下“Shmily”。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 没有“Shmily”不可能出现的地方。仓促间涂写的“Shmily”会出现在汽车坐垫上，或是一张贴在方向盘轴心的小纸条上。这一类的字条会被塞进鞋子里或是压在枕下。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; “Shmily”会被书写在壁炉台面的薄尘上，或是勾画在炉内的灰底上。这个神秘的词，像祖父母的家具一样成了他们房间的一部分。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 直到很久以后，我才能完全理解祖父母之间游戏的意义。年轻使我不懂得爱——那种纯洁且历久弥坚的爱。然而，我从未怀疑过祖父母之间的感情。他们彼此深爱。他们的小游戏已远非调情消遣，那是一种生活方式。他们之间的感情是基于一种深挚的爱和献身精神，不是每一个人都能体验到的。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 祖父和祖母一有机会就彼此执手相握。他们在小厨房里错身而过时偷吻；他们说完彼此的半截句子；他们一起玩拼字和字谜游戏。祖母常忘情地对我耳语祖父有多可爱迷人，依然还是那么帅气。她骄傲地宣称自己的确懂得“如何选择”。每次餐前他们垂首祈祷时，感谢他们受到的诸多福佑：一个幸福的家庭、好运道和拥有彼此。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 可是一片乌去遮蔽了祖父母的家：祖母的癌恶化了。首次发现是在10年前。跟以往一样，祖父总是跟祖母肩并肩地走过人生艰难之旅的每一步。为了安慰祖母，祖父将他们的卧房喷涂成黄色，这样在祖母病重不能出屋时，亦能感到周围的阳光。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 起先，在祖父坚实的手臂和拐杖的帮扶下，他们每天清晨一起去教堂散步和默祷。但随着祖母日见瘦弱，终于，祖父只能独自去教堂，祈求上帝看顾他的妻子。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 然而那一天，我们担心忧惧的事终于还是发生了，祖母去了。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; “Shmily”写在祖母葬礼上花束的黄色缎带上。当人群散去，叔伯、姑姑和其他的家庭成员又走上前来最后一次围聚在祖母身旁。祖父步向祖母的灵柩，用颤抖的声音轻轻的唱起“知道我有多么爱你……”透过悲伤的泪，这歌声低沉轻柔地飘入耳来…… </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 我终于明白了他们特殊小游戏的意义“S— h— m— I— l— y”：“See how much I love you（知道我多么爱你）”。 </FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp; &nbsp; 因悲伤而颤栗着，我永远无法忘记那一刻，这个令人震撼的发现。谢谢你们，祖父祖母，教我懂得了爱。 </FONT></P></div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/476506892008318322225</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/476506892008318322225</guid>
    <pubDate>Fri, 18 Apr 2008 03:22:02 +0800</pubDate>
    <dcterms:modified>2008-07-18T09:51:56+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[控件之ViewState ]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/4765068920083183135967</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>主题，控件的viewstate状态</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>一“七七八八”</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>有次，朋友开玩笑说，不知道什么时候，微软会取消viewstate，不再使用隐藏字段在服务器与客户端保存状态！虽然，可以使用客户端技术减少一些回传，但是，一些必要的服务器状态还是要保存的，现在网络带宽已经不是问题，所以在网络上适当的传递一些状态数据，还是可以容忍的！当然，如果终端是mobile，可以考虑把viewstate保存到服务器上！</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>二“误解viewstate”</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>&nbsp;&nbsp;&nbsp; 园子里,有不少描写viewstate的文字，也看了不少，知道Viewstate实现了IStateManager接口的一个属性和三个方法！刚接触“她”的时候，一直以为control对象直接实现了IStateManager接口,模糊的记得好象有几个LoadViewstate和SaveViewstate方法，也没有在意方法有没有override修饰！后来发现不是这样的，control并没有直接实现IStateManager接口，而是通过定义一个StateBar类型的Viewstate属性，委托Viewstate属性去管理状态，也就是让StateBar类型去真正实现状态的管理，这种方式可以使控件本身和viewState的实现完全分离！也许，这些经验，对高手谈不上是“经验”，希望刚入门的同仁能少走点弯路！</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>三“结合Style样式，浅谈Viewstate”</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>Viewstate属性能装载的数据类型比较有限，但是有些不能加载的类型怎么办呢？当然是重写IStateManager了，然后WebControl委托给ControlStyle属性来管理状态，有点象WebControl定义ViewState属性J</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>还是从简单的入手吧，直接使用Style类型的状态管理</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>目标，定义一个文本框和一个按钮的复合控件</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>要点，分别给文本框和按钮各自定义样式，并提升她们为顶级样式属性</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>图一</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff><IMG src="http://www.cnblogs.com/images/cnblogs_com/wmj/view1.JPG" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>图二 (文本框和按钮的样式)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff><IMG src="http://www.cnblogs.com/images/cnblogs_com/wmj/view2.JPG" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff00ff>图四 Demo</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" border=0>Code</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.Web.UI;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.Web.UI.WebControls;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.ComponentModel;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.ComponentModel.Design;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>namespace&nbsp;WebControlLibrary</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" border=0><IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;[</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;DefaultEvent("Button"),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;DefaultProperty("Text"),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;//Designer(typeof(WebControlLibrary.Design.CustomerControlDesigner))</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;]</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;WebCustomControl1&nbsp;:&nbsp;CompositeControl</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//声明变量</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Button&nbsp;_button;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;TextBox&nbsp;_textBox;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;readonly&nbsp;object&nbsp;EventButtonClick&nbsp;=&nbsp;new&nbsp;object();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Style&nbsp;_buttonStyle;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Style&nbsp;_textBoxStyle;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义属性Text，用于指定按钮上的文字</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bindable(true),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Category("Appearance"),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DefaultValue(""),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description("获取或设置显示显示在按钮上的文字")</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Text</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnsureChildControls();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;_button.Text;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnsureChildControls();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_button.Text&nbsp;=&nbsp;value;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义ButtonStyle属性</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Category("Style"),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description("设置Button的样式属性"),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DesignerSerializationVisibility(DesignerSerializationVisibility.Content),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NotifyParentProperty(true),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PersistenceMode(PersistenceMode.InnerProperty),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;virtual&nbsp;Style&nbsp;ButtonStyle</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_buttonStyle&nbsp;==&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_buttonStyle&nbsp;=&nbsp;new&nbsp;Style();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(IsTrackingViewState)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((IStateManager)_buttonStyle).TrackViewState();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;_buttonStyle;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义TextStyle属性</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Category("Style"),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Description("设置TextBox的样式属性"),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DesignerSerializationVisibility(DesignerSerializationVisibility.Content),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NotifyParentProperty(true),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PersistenceMode(PersistenceMode.InnerProperty),</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;virtual&nbsp;Style&nbsp;TextBoxStyle</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_textBoxStyle&nbsp;==&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_textBoxStyle&nbsp;=&nbsp;new&nbsp;Style();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(IsTrackingViewState)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((IStateManager)_textBoxStyle).TrackViewState();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;_textBoxStyle;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//重写Controls属性</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;ControlCollection&nbsp;Controls</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnsureChildControls();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;base.Controls;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//重写CreateChildControls方法，将子控件添加到复合控件中</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;void&nbsp;CreateChildControls()</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Controls.Clear();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_button&nbsp;=&nbsp;new&nbsp;Button();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_textBox&nbsp;=&nbsp;new&nbsp;TextBox();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_button.ID&nbsp;=&nbsp;"btn";</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_button.CommandName&nbsp;=&nbsp;"ButtonClick";</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.Controls.Add(_button);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.Controls.Add(_textBox);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//重写Render方法，呈现控件中其他的HTML代码</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;void&nbsp;Render(HtmlTextWriter&nbsp;output)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AddAttributesToRender(output);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_textBoxStyle&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_textBox.ApplyStyle(TextBoxStyle);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_buttonStyle&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_button.ApplyStyle(ButtonStyle);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.AddAttribute(HtmlTextWriterAttribute.Border,&nbsp;"0px");</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.AddAttribute(HtmlTextWriterAttribute.Cellpadding,&nbsp;"5px");</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.AddAttribute(HtmlTextWriterAttribute.Cellspacing,&nbsp;"0px");</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.RenderBeginTag(HtmlTextWriterTag.Table);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.RenderBeginTag(HtmlTextWriterTag.Tr);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.RenderBeginTag(HtmlTextWriterTag.Td);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_textBox.RenderControl(output);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.RenderEndTag();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.RenderBeginTag(HtmlTextWriterTag.Td);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_button.RenderControl(output);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.RenderEndTag();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.RenderEndTag();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.RenderEndTag();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//事件处理</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;event&nbsp;EventHandler&nbsp;ButtonClick</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Events.AddHandler(EventButtonClick,&nbsp;value);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remove</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Events.RemoveHandler(EventButtonClick,&nbsp;value);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;virtual&nbsp;void&nbsp;OnButtonClick(EventArgs&nbsp;e)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EventHandler&nbsp;buttonClickHandler&nbsp;=&nbsp;(EventHandler)Events[EventButtonClick];</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(buttonClickHandler&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buttonClickHandler(this,&nbsp;e);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;bool&nbsp;OnBubbleEvent(object&nbsp;sender,&nbsp;EventArgs&nbsp;e)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;handled&nbsp;=&nbsp;false;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(e&nbsp;is&nbsp;CommandEventArgs)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommandEventArgs&nbsp;ce&nbsp;=&nbsp;(CommandEventArgs)e;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ce.CommandName&nbsp;==&nbsp;"ButtonClick")</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnButtonClick(EventArgs.Empty);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handled&nbsp;=&nbsp;true;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;handled;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//样式状态管理，重写3个相关方法</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;void&nbsp;LoadViewState(object&nbsp;savedState)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(savedState&nbsp;==&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.LoadViewState(null);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(savedState&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object[]&nbsp;myState&nbsp;=&nbsp;(object[])savedState;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(myState.Length&nbsp;!=&nbsp;3)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;ArgumentException("无效的ViewState");</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.LoadViewState(myState[0]);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(myState[1]&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((IStateManager)TextBoxStyle).LoadViewState(myState[1]);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(myState[2]&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((IStateManager)ButtonStyle).LoadViewState(myState[2]);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;object&nbsp;SaveViewState()</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object[]&nbsp;myState&nbsp;=&nbsp;new&nbsp;object[3];</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myState[0]&nbsp;=&nbsp;base.SaveViewState();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myState[1]&nbsp;=&nbsp;(_textBoxStyle&nbsp;!=&nbsp;null)&nbsp;?&nbsp;((IStateManager)_textBoxStyle).SaveViewState()&nbsp;:&nbsp;null;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myState[2]&nbsp;=&nbsp;(_buttonStyle&nbsp;!=&nbsp;null)&nbsp;?&nbsp;((IStateManager)_buttonStyle).SaveViewState()&nbsp;:&nbsp;null;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;3;&nbsp;i++)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(myState[i]&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;myState;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;void&nbsp;TrackViewState()</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.TrackViewState();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_buttonStyle&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((IStateManager)_buttonStyle).TrackViewState();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(_textBoxStyle&nbsp;!=&nbsp;null)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((IStateManager)_textBoxStyle).TrackViewState();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" border=0>}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff99cc>Demo比较简单,在类顶部定义了两个Style类型的属性,然后重写维护状态的三个方法一个属性</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff99cc>注意</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff99cc>1.这里并不是直接重写IStateManager接口</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff99cc>2.重写 SaveViewState 方法以将附加样式属性保存到 ViewState</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff99cc>3.重写 LoadViewState 方法以自定义从 ViewState 的附加样式属性的还原</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff99cc>4.必须以添加它们的相同顺序检索</FONT></P>
<P style="TEXT-INDENT: 2em"></P></div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/4765068920083183135967</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/4765068920083183135967</guid>
    <pubDate>Fri, 18 Apr 2008 03:13:05 +0800</pubDate>
    <dcterms:modified>2008-04-18T03:13:05+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[验证码控件 ]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/4765068920083183637327</link>
    <description><![CDATA[<div><P style="TEXT-INDENT: 2em">自定义“验证码”控件</P>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;</P>
<P style="TEXT-INDENT: 2em">利用IHttpHandler接口，动态生成验证码</P>
<P style="TEXT-INDENT: 2em">图一（直接看效果吧）</P>
<P style="TEXT-INDENT: 2em"><IMG src="http://www.cnblogs.com/images/cnblogs_com/wmj/validater.jpg" border=0></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff0000>代码</FONT></P>
<P style="TEXT-INDENT: 2em">步骤一(新建一类库)</P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" border=0>Code</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.Collections.Generic;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.Text;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.Web;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.Web.SessionState;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.Web.UI;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>using&nbsp;System.Drawing;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>namespace&nbsp;ControlValidater</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" border=0><IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;CValidater:IHttpHandler,IRequiresSessionState</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpResponse&nbsp;response&nbsp;=&nbsp;null;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSessionState&nbsp;sessionState&nbsp;=&nbsp;null;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;ProcessRequest(HttpContext&nbsp;context)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;=&nbsp;context.Response;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionState&nbsp;=&nbsp;context.Session;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.GenImg(this.GenCode(4));</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;System.Web.IHttpHandler.IsReusable</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{&nbsp;return&nbsp;true;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//产生随机字符串</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;GenCode(int&nbsp;num)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string[]&nbsp;source&nbsp;=<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{"0","1","2","3","4","5","6","7","8","9",</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"A","B","C","D","E","F","G","H","I","J","K","L","M","N",</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"O","P","Q","R","S","T","U","V","W","X","Y","Z"};</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;code&nbsp;=&nbsp;"";</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;rd&nbsp;=&nbsp;new&nbsp;Random();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;num;&nbsp;i++)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;code&nbsp;+=&nbsp;source[rd.Next(0,&nbsp;source.Length)];</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;code;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//生成图片</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;GenImg(string&nbsp;code)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bitmap&nbsp;myPalette&nbsp;=&nbsp;new&nbsp;Bitmap(60,&nbsp;20);//定义一个画板</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics&nbsp;gh&nbsp;=&nbsp;Graphics.FromImage(myPalette);//在画板上定义绘图的实例</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rectangle&nbsp;rc&nbsp;=&nbsp;new&nbsp;Rectangle(0,&nbsp;0,&nbsp;60,&nbsp;20);//定义一个矩形</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gh.FillRectangle(new&nbsp;SolidBrush(Color.Silver),&nbsp;rc);//填充矩形</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gh.DrawString(code,&nbsp;new&nbsp;Font("宋体",&nbsp;16),&nbsp;new&nbsp;SolidBrush(Color.Gray),&nbsp;rc);//在矩形内画出字符串</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPalette.Save(response.OutputStream,&nbsp;System.Drawing.Imaging.ImageFormat.Jpeg);</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将图片显 示出来</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionState["ValidateCode"]&nbsp;=&nbsp;code;//将字符串保存到Session中，以便需要时进行验证</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gh.Dispose();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPalette.Dispose();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" border=0>}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>步骤二(使用方法)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>直接引用编译后的dll文件</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>在web.config的web节点,加入&lt;httpHandlers&gt;元素,</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>例如</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" border=0>Code</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>&lt;httpHandlers&gt;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0></FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;add&nbsp;path="CValidater.aspx"&nbsp;verb="*"&nbsp;type="ControlValidater.CValidater"&nbsp;/&gt;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/httpHandlers&gt;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>当然,如果直接把类库作为一个普通类,放在使用的Website的App_Data目录的话,就不需要配置了:)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>步骤三(使用方法)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>在需要使用验证码的页面,扔一个image标记,然后把他的url指向"类名.aspx"</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>例如</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" border=0>Code</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>&lt;asp:Image&nbsp;ID="Image1"&nbsp;runat="server"&nbsp;ImageUrl="~/CValidater.aspx"/&gt;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>到此配置完成)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>最后一个步骤代码</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" border=0>Code</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" border=0>protected&nbsp;void&nbsp;Button1_Click(object&nbsp;sender,&nbsp;EventArgs&nbsp;e)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" border=0><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>{</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strIn&nbsp;=&nbsp;this.TextBox1.Text;</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;strSess&nbsp;=&nbsp;Session["ValidateCode"].ToString();</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strIn&nbsp;==&nbsp;strSess)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button1.Text&nbsp;=&nbsp;"ok<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>";</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button1.Text&nbsp;=&nbsp;"error<IMG src="http://www.cnblogs.com/Images/dot.gif" border=0>";</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900><IMG src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" border=0>&nbsp;&nbsp;&nbsp;&nbsp;}</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>需要注意的几个地方:)</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>一,记得要实现IRequiresSessionState接口,虽然她只是一个标记,没有她,Session状态无法使用.</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>二,HttpSessionState的对象是通过上下文获得的.</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>三,配制config的时候,不要忘记path="CValidater.aspx",如果path="*.aspx",那你所有的页面都将被CValidater处理,这不是我们所要的.</FONT></P>
<P style="TEXT-INDENT: 2em"><FONT color=#ff9900>最后</FONT>
</P><P style="TEXT-INDENT: 2em"></P></div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/4765068920083183637327</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/4765068920083183637327</guid>
    <pubDate>Fri, 18 Apr 2008 03:06:37 +0800</pubDate>
    <dcterms:modified>2008-04-18T03:06:37+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[ASP.NET框架]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/47650689200831662226464</link>
    <description><![CDATA[<div><A href="http://video.baidu.com/v?ct=301989888&amp;rn=20&amp;pn=0&amp;db=0&amp;s=8&amp;word=asp.net%BF%F2%BC%DC">http://video.baidu.com/v?ct=301989888&amp;rn=20&amp;pn=0&amp;db=0&amp;s=8&amp;word=asp.net%BF%F2%BC%DC</A></div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/47650689200831662226464</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/47650689200831662226464</guid>
    <pubDate>Wed, 16 Apr 2008 18:22:26 +0800</pubDate>
    <dcterms:modified>2008-04-16T18:22:26+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[软件架构的实践方法 ]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/47650689200831662036970</link>
    <description><![CDATA[<div><P>架构是考虑系统或事物的组成结构和关系，是对事物本质的认识和理解。构造架构就是为了满足一定的需求。任何事物和东西都存在架构，我们不仅仅要认识到架构的无所不在，也要能创造新的架构。但要创造新架构，就必须理解架构的概念，一个对架构概念不理解或拒接架构的概念的人，本身就缺乏对系统的本质认识，因而谈不上如何改良系统架构和创造新的系统架构。软件系统，无论其价格的高低，建筑房屋，也无论其售价的高低，它们都具有一定的架构，这些架构决定了它们的形成和组织方式。 </P><BR>
<P>我们认识到架构的概念，才能去构造架构。在以往的软件开发实践经验中，大家都有个体会：不就是先做需求分析，然后做总体设计，再做详细设计，最后编写程序，然后测试，最后集成。其实我们在做这些活动当中，就已经隐含了架构在里面了，只是自身没有意识到，也没有明确的表示出来。现代的软件工程，看到了影响软件开发的两个根本因素：一个是项目管理，另一个就是软件架构。对此现代软件工程明确提出了架构的重要性，以及如何建立架构、如何评估架构的合理性。</P><BR>
<P>不考虑架构，软件可以胡乱编写；不考虑架构，软件可以不用考虑性能问题和可扩展问题；不考虑架构，我们开发软件还搞什么重用？直接不厌其烦的重复编写每一道程序得了...... </P><BR>
<P>具体说来，软件架构是一种动态结构和静态结构的组合，它为了满足系统的质量属性（比如性能、重用、扩展、安全等）和功能需求而建立的系统结构，这里的结构包括了静态的和动态的，在动态方面要反映的是系统运行时的行为本质特征，静态方面要反映系统的组成结构。从唯物辩证法来说，任何事物都是具有一定的静态结构和运动特征。所以，从这个观点，我们就可以推理出软件系统这个事物同样具有这两个特征，从这两个特征我们就可以建立和描述软件系统的本质 --- 软件架构！ </P><BR>
<P>在分析或构造软件架构的方法中，有一个方法是很有效的，那就是我称之为“架构维度分解法”：第一步先从层这个维度来划分；第二步在每个层里划分不同的模块或子系统；第三步再逐步细分。这种分解法与功能分解法不一样，功能分解法是站在功能的角度进行分解，而架构维度分解法是站在软件的内部结构和软件工程原则的基础上再结合系统的质量属性来分解。</P><BR>
<P>大家可以试着分析一下一些优秀系统的软件架构（研读其源代码是一个好办法，尽管有时有些枯燥），看看它们的合理之处和巧妙之处，从中可以学习怎样在系统整体上来把握和构建自己的软件架构。优秀的例子有：Sping、WebWork、JBoss、Eclipse、VC++、Delphi、.net、JDBC、JNDI、EJB等等。 </P><BR>
<P>举个例子：<BR>我们现在来看看TCP/IP，这个协议族软件就包含了一个高可用性和高扩展性的架构：从分离关注点的角度，把整个协议族分离成了物理链路层、网络层、数据传输层和应用层。分离出这4个不同的关注点，使我们的协议在支持各种各样的硬件设备、各种各样的操作系统、各种各样的应用程序成为了可能，并能不断的扩展出新的协议群，比如现在的SOAP协议就是通过建立在HTTP或SMTP协议之上来实现Web Service的。 </P><BR>
<DIV>再举个我本人实践的例子：</DIV><BR>
<DIV>这是本人刚完成的一个具体OA项目的设计，其中包含了与各个现有异构系统的交互。对于系统交互这个关注层面，我采用“架构维度分解法”先把整个系统分解成OA交互层、接口服务层；对于接口服务层，考虑分解出4个模块——公文交换模块、CEB转换和电子印章服务模块、条形码系统接口模块、内网和外网信息交换模块；对于公文交换模块这个维度，我再细分出了6个子系统——报文接收者子系统、报文发送者子系统、报文解析器子系统、队列管理器子系统、队列监听器子系统、公文交换业务控制子系统，这6个子系统互相协作完成与公文交换系统（客户已有系统）的两次握手通信与数据交换，满足了客户对性能、扩展性、安全性、重用性的要求： 
<DIV>（1）静态设计视图——子系统及依赖关系</DIV>
<DIV></DIV>
<DIV>（2）动态设计视图——发文交换</DIV>
<DIV></DIV>
<DIV>（3）动态设计视图——收文交换</DIV></DIV></div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/47650689200831662036970</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/47650689200831662036970</guid>
    <pubDate>Wed, 16 Apr 2008 18:20:36 +0800</pubDate>
    <dcterms:modified>2008-04-17T16:02:45+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[软件架构设计的深度 ]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/47650689200831661913498</link>
    <description><![CDATA[<div>从实现角度看，软件架构可以分为逻辑架构与物理架构两个紧密相关的视图。软件的逻辑架构规定了软件系统由哪些逻辑元素组成、以及这些逻辑元素之间的关系。软件的物理架构则关注“目标程序及其依赖的运行库和系统软件”最终如何安装或部署到物理机器，以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。以一个网络管理系统(NMS)为例，在设计其架构时，我们通常会首先想到将NMS在逻辑上分为5个功能模块:故障管理、记账管理、配置与命名管理、性能管理、安全管理。然后，可能会考虑采用Manager-Agent管理模型，以SNMP作为基本的通讯协议，以运行在局端的数据库集中存储MIB。Agent会用C语言实现，Manager采用C或者C++、Java实现，数据库采用Oracle或者MySQL之类。应该说这样的考虑在技术上未必有什么大的漏洞，但从架构设计的角度来说，显得过于简单含混，没有包含逻辑架构与物理架构的必要元素。如果将这样的论述交给marketing对客户做宣传的话，也许是可以的，但还不足以在此基础上进行深一步的开发，这也就是所谓的“高来高去”的系统架构吧。<BR><BR>那么软件的系统架构设计应该达到怎样的深度？<BR><BR>所谓架构，终究是技术的概念。对于成熟的客户而言，他们不会关心系统在技术上如何实现，而只注重系统能否满足他们的需求。架构本质上只是实现需求的一个台阶。这个台阶能否跨越过去呢？老一辈计算机专家认为“程序=算法+数据结构”，现代的专家们则认为只有算法和数据结构还不够，还需要设计方法、系统架构、设计模式、环境和工具等等。思维与系统于是同时变得复杂起来，而复杂性通常导致更多问题的出现。就系统架构而言，保持其简单性是至关重要的。<BR><BR>系统架构中包含了关于各元素应如何彼此相关的信息，架构必须省略各元素中与交互无关的某些信息。因此，架构首先是对系统的抽象，该抽象去除了不影响它们如何使用、其他元素如何使用以及如何与其他元素关联或交互的细节。在几乎所有的现代系统中，各元素都是通过接口实现交互的，而这些接口又将各元素的细节划分为公有和私有两大类。根据这种划分，架构属于公有部分，而私有部分——即仅与内部具体实现有关的细节——是不属于架构的。就此而言，架构设计存在于各级系统、子系统的开发过程，无论系统的粒度多小。<BR><BR>逻辑架构设计需要考虑职责划分，体现为层、子系统、模块等的划分决定。从软件开发生命周期看，软件架构设计属于design范畴，逻辑架构从静态视角为详细设计和编程实现提供切实的指导；有了分解就必然产生协作，逻辑架构还需要定义不同逻辑单元之间的交互接口和交互机制，而编程工作必须实现这些接口和机制。物理架构可以反映出软件系统动态运行时的组织情况，并以进程、线程、以及作为类的运行时实例的对象等方式体现出来，而进程调度、线程同步、进程或线程通信等则进一步反映物理架构的动态行为，数据的持久化、共享、传输则是反映了物理架构的运作状态。<BR><BR>由于用户需求是复杂多样的，软件架构也是一系列有层次性的决策是伴随着对软件系统的层层分解依次展开的。伴随着对软件系统的依次分解，软件架构师应当不断做出决策，例如需要划分成哪些模块、每个模块的职责为何、每个模块的接口如何定义、模块间采用何种交互机制、如何满足约束和质量属性需求、如何适应可能发生的变化等等。 之后，软件架构师必须规划整个系统的具体组成。通常，对于一个独立的软件系统而言，它常常被划分为不同的子系统或分系统，每个部分承担相对独立的功能，各部分之间通过特定的交互机制进行协作。软件架构师决策制定的顺序往往是先制定技术无关的决策、后制定技术相关的决策，后者在前者的指导下进行。<BR><BR>一项需求可能有多种方式实现，架构设计师必须与系统分析员确定该需求将采用何种方式实现，将达到何种效果，以消除将需求映射为设计的歧义；讨论过程中还可能会发现需求有不完备甚至错误的地方，在需求重新确定后设计者需修正设计。设计文档必须写清楚各个模块/接口/公共对象的定义，列明程序的各种执行条件与期望的运行效果，还要正确处理各种可能的异常。此外设计文档应该遵循一定的写作模式与版面风格，使用统一的术语或惯用语，使得开发团队成员很容易理解其内涵。当系统架构设计不可能穷尽每一个细节，只要分析与即将开发的模块相关的内容即可。一项设计任务可能需要多个程序员完成。比如用户界面一组程序员负责，而业务逻辑组件则由另一组负责，数据库部分则又由其他开发人员负责。架构设计师必须考虑他们的立场，以各方面都相对容易理解的方式写清楚主要的模块/接口/对象定义，明确相应的调用规则与主要逻辑处理。如果某项设计任务所涉及的内容太专业化，架构设计师并不熟悉相关的内容，他也可以用描述性的文字说明该部分的设计要求，并与其他成员协作补充。<BR><BR>软件架构设计是一个动态的过程，但无论怎样变化，需要时刻牢记架构设计的目标：(<A href="http://blog.sina.com.cn/u/5565cde00100077y" target=_blank><FONT color=#4d6c80>http://blog.sina.com.cn/u/5565cde00100077y</FONT></A>)<BR>1.最大化的重用<BR>2.尽可能的简单明了<BR>3.最灵活的拓展性<BR></div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/47650689200831661913498</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/47650689200831661913498</guid>
    <pubDate>Wed, 16 Apr 2008 18:19:13 +0800</pubDate>
    <dcterms:modified>2008-04-16T18:19:13+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[关于软件的架构设计]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/4765068920083166162197</link>
    <description><![CDATA[<div>好的开始相当于成功一半 <BR><BR>开始之初的架构设计决定着软件产品的生死存亡。“好的开始相当于成功一半”。 <BR><BR>开始的架构设计也是最难的，需要调研同类产品的情况以及技术特征，了解当前世界上对这种产品所能提供的理论支持和技术平台支持。再结合自己项目的特点(需要透彻的系统分析)，才能逐步形成自己项目的架构蓝图。 <BR><BR>比如要开发网站引擎系统，就从Yahoo的个人主页生成工具?到虚拟主机商提供的网站自动生成系统，以及IBM、Webphere、Portal的特点和局限?从而从架构设计角度定立自己产品的位置。 <BR><BR>好的设计肯定需要经过反复修改，从简单到复杂的循环测试是保证设计正确的一个好办法 <BR><BR>由于在开始选择了正确的方向，后来项目的实现过程也验证了这种选择，但在一些架构设计的细部方面，还需要对方案进行修改，属于那种螺旋上升的方式，显然这是通过测试第一的思想和XP工程方法来实现的。 <BR><BR>如果我们开始的架构设计在技术平台定位具有一定的世界先进水平，那么，项目开发实际有一半相当于做实验，是研发，存在相当的技术风险。 <BR><BR>因此，一开始我们不可能将每个需求都实现，而是采取一种简单完成架构流程的办法，使用最简单的需求将整个架构都简单的完成一遍（加入人工干预），以检验各个技术环节是否能协调配合工作(非常优秀先进的两种技术有时无法在一起工作)，同时也可以探知技术的深浅，掌握项目中的技术难易点。这个过程完成后，我们就对设计方案做出上面的重大修改，丰富完善了设计方案。 <BR><BR>设计模式是支撑架构的重要组件 <BR><BR>架构设计也类似一种工作流，它是动态的，这点不象建筑设计那样，一开始就能完全确定，架构设计伴随着整个项目的进行过程之中，有两种具体操作保证架构设计的正确完成，那就是设计模式(静态)和工程项目方法(RUP或XP?动态的)。 <BR><BR>设计模式是支撑架构的一种重要组件，这与建筑有很相象的地方，一个建筑物建立设计需要建筑架构设计，在具体施工中，有很多建筑方面的规则和模式。<BR><BR>我们从J2EE蓝图模式分类<A href="http://java.sun.com/blueprints/patterns/catalog.html" target=_blank><FONT color=#bc694c>http://java.sun.com/blueprints/patterns/catalog.html</FONT></A>中就可以很清楚的看到J2EE这样一个框架软件的架构与设计模式的关系。 <BR><BR>架构设计是骨架，设计模式就是肉 <BR><BR>这样，一个比较丰富的设计方案可以交由程序员进一步完成了，载辅助以适当的工程方法，这样就可保证项目的架构设计能正确快速的完成。 <BR><BR>时刻牢记架构设计的目标 <BR><BR>由于架构设计是在动态中完成的，因此在把握架构设计的目标上就很重要，因此在整个项目过程中，甚至每一步我们都必须牢记我们架构设计的总体目标，可以概括下面几点： <BR><BR>1、最大化的重用：这个重用包括组件重用?和设计模式使用等多个方面。 <BR><BR>比如，我们项目中有用户注册和用户权限系统验证，这其实是个通用课题，每个项目只是有其内容和一些细微的差别，如果我们之前有这方面成功研发经验，可以直接重用，如果没有，那么我们就要进行这个子项目的研发，在研发过程中，不能仅仅看到这个项目的需求，也要以架构的概念去完成这个可以称为组件的子项目。 <BR><BR>2、尽可能的简单明了：我们解决问题的总方向是将复杂问题简单化，其实这也是中间件或多层体系技术的根本目标。但是在具体实施设计过程中，我们可能会将简单问题复杂化，特别是设计模式的运用上很容易范这个错误，因此如何尽可能的做到设计的简单明了是不容易的。 <BR><BR>我认为落实到每个类的具体实现上要真正能体现系统事物的本质特征，因为事物的本质特征只有一个，你的代码越接近它，表示你的设计就是简单明了，越简单明了，你的系统就越可靠。更多情况是，一个类并不能反应事物本质，需要多个类的组合协调，那么能够正确使用合适的设计模式就称为重中之重。 <BR><BR>我们看一个具备好的架构设计的系统代码时，基本看到的都是设计模式，宠物店(pet?store)就是这样的例子。或者可以这样说，一个好的架构设计基本是由简单明了的多个设计模式完成的。 <BR><BR>3、最灵活的拓展性：架构设计要具备灵活性?拓展性，这样，用户可以在你的架构上进行二次开发或更加具体的开发。 <BR><BR>要具备灵活的拓展性，就要站在理论的高度去进行架构设计，比如现在工作流概念逐步流行，因为我们具体很多实践项目中都有工作流的影子，工作流中有一个树形结构权限设定的概念就对很多领域比较通用。 <BR><BR>树形结构是组织信息的基本形式，我们现在看到的网站或者ERP前台都是以树形菜单来组织功能的，那么我们在进行架构设计时，就可以将树形结构和功能分开设计，他们之间联系可以通过树形结构的节点link在一起，就象我们可以在圣诞树的树枝上挂各种小礼品一样，这些小礼品就是我们要实现的各种功能。 <BR><BR>有了这个概念，通常比较难实现的用户级别权限控制也有了思路，将具体用户或组也是和树形结构的节点link在一起，这样就间接实现了用户对相应功能的权限控制，有了这样的基本设计方案的架构无疑具备很灵活的拓展性。<BR>关于文档中观点的补充：<BR>1. 最大化的重用：<BR>提高重用，需要架构中的构件具有较高的独立性，构件的实现变更不导致其它构件的设计变更；另外一点是构件间接口的稳定性和可扩展性，如果因为实现新增需求必须对接口作变更，如果相关构件不支持这个新增需求，可以保持接口不变。<BR>提高重用的另外一个手段，是利用类似已有的构件。理想的重用是只需从不同地方拿来构件，经过简单的组合，可实现新的产品需求。<BR><BR>2. 尽可能的简单明了<BR>使设计简单的方式可以是对系统做分层，分层可以是基于功能需求的。比如协议方面的分层：协议的编解码、协议的可靠传输、协议的应用层适配。<BR>要使分层基于功能需求，需要对原始需求做功能需求分析，把原始需求总结归纳成几个或几十个类似或相近的功能需求，以这些功能需求搭建系统的功能框架，以此功能框架为基础，对原始需求在此功能架构上做运行分析。如果有需求不能实现，则调整架构。这个过程依赖于经验和能力。<BR><BR>3. 最灵活的拓展性<BR>灵活的拓展性，依赖于接口定义、模块间的松耦合性。</div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/4765068920083166162197</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/4765068920083166162197</guid>
    <pubDate>Wed, 16 Apr 2008 18:16:02 +0800</pubDate>
    <dcterms:modified>2008-04-16T18:16:02+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[利用ASP.NET框架创建网站登陆 ]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/4765068920083166124220</link>
    <description><![CDATA[<div><P>我看了有很多朋友都在尝试写出带有登陆这样功能的网站，其方法几乎都是验证用户的登陆合法，然后发送一个表示验证的Cookie，或者在Session中保存信息以便于追踪接下来的访问授权，其实，这些细节化的操作，.NET都提供了一种非常有效的解决办法，能使你从繁琐的安全验证上解脱出来，而且，尽管你可能很小心地定义那些页面不能被没有权限的人访问，然而还有可能出现一些无法被检查出来的漏洞让他们跳过安全验证 
</P><P><BR>好，废话少说，本文将介绍如下内容：<BR>1、关于登陆验证和授权<BR>2、使用Forms验证模式<BR>3、授权资源的访问<BR>4、基于角色的授权<BR><BR><BR>1、关于登陆验证和授权<BR>&nbsp;&nbsp;&nbsp;&nbsp;很多网站都有登陆对话框，让事先已经注册的用户验证，以便为他们提供个性化的服务等。可以把这个过程看作是两件事情的发生：验证和授权！登陆的作用是验证请求登陆的用户是否合法，而授权则是验证合法的用户在请求资源时，根据他们的权限决定是访问还是拒绝。<BR>&nbsp;&nbsp;&nbsp;&nbsp;以上这种网站本身提供对话框的作法在.NET中被称之为Forms验证模式，接下来将会讲述这种验证模式。在以前ASP程序员或者其他程序员，要想保存合法用户的验证，在以后的访问授权中使用，不得不使用写Cookie或者将信息保存在Session中的方法，而在需要授权的页面加载前添加一堆繁琐的代码来验证制定的用户是否具有访问权限否则的话就不能显示页面的内容，最恼火的是在授权页面上添加这些代码让人觉得重复和繁琐，而且可能不是最安全的，有一些比较隐蔽的方式可能会轻易绕过这种验证，因此程序员将来要做的很多事情就是再修改代码已堵住在运行过程中才发现的漏洞。在.NET的System.Web.Security中提供了一些网站安全方面的解决方案，尽管验证用户合法和授权的基本思路没有变化，但是授权的工作几乎已经交给.NET框架了，我们些代码之需要自己验证用户合法，并且告诉框架这个用户合法即可。<BR><BR>2、使用Forms验证模式<BR>&nbsp;&nbsp;&nbsp;&nbsp;要使用启用Forms验证模式，请在网站根目录下的web.config文件中添加如下配置：（注意区分大小写）<BR><BR><FONT color=#666666>&lt;configuration&gt;<BR>&nbsp;&nbsp;&lt;system.web&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;authentication mode="Forms" /&gt;<BR>&nbsp;&nbsp;&lt;/system.web&gt;<BR>&lt;/configuration&gt;</FONT><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;这将告诉.NET，你的网站使用Forms验证模式，.NET将不参与验证用户的工作，而是将这个工作交给你完成，你必须自己编写一些代码来验证用户合法，并且报告给.NET用户是合法的。.NET将会发送一个验证Cookie到用户，随后的访问中，.NET以此Cookie为依据，来执行授权的操作。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;例如我们在login.aspx界面中放置两个接受输入的文本框txtUserName和txtPassword，在数据库中，保存了用户名UserName和密码UserPassword，使用btnLogin按钮的Click事件来验证用户：<BR><BR><FONT color=#666666>private void btnLogin_Click(object sender, EventArgs e)<BR>{<BR>&nbsp;&nbsp;string sql = "SELECT userid FROM Users WHERE UserName = '" + txtUserName.Text.Replace("'","_") + "' AND UserPassword = '" + System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "md5") + "'";<BR>&nbsp;&nbsp;//使用上面类似的SQL语句向数据库执行查询，如果用户是合法的，将会返回数据。<BR>&nbsp;&nbsp;if (...) //根据条件判定用户是合法的<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//下面的语句告诉.NET发送一个验证Cookie给用户：<BR>&nbsp;&nbsp;&nbsp;&nbsp;System.Web.Security.FormsAuthentication.SetAuthCookie(userid, false)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Response.Redirect("afterlogin.aspx");&nbsp;&nbsp;//定位到登陆后页面<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp; //用户不合法，提示错误信息<BR>&nbsp;&nbsp;}<BR>}<BR></FONT><BR>以上代码中，<BR>txtUserName.Text.Replace("'","_")将用户输入的文本中单引号替换为下划线，以防止SQL注入攻击。<BR>System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "md5")方法将txtPassword.Text转换为MD5散列值，注意，在用户注册的时候，同样使用此方法将其输入的注册密码转换为散列值存储在数据库中，这里将用户输入的散列值进行对比以决定是否合法用户。任何时候不要将敏感的文本信息以明文方式存放在数据库中。通过MD5加密，即便此密文被截获，攻击者仍无法获得真实的密码。<BR><BR>当确认用户验证是合法的，则调用System.Web.Security.FormsAuthentication.SetAuthCookie(userid, false)方法，发送验证Cookie，此方法传递两个参数，一个是代表用户的标示，一般来说，在接下来确认用户唯一身份的就是从数据库中获得的userid。第二个参数告诉.NET是否写入持续的Cookie，如果为true，则Cookie将被持续，下次用户再次访问时，Cookie仍存在（相当于记住用户，可以提供这样的复选框让用户来决定是否持续Cookie）。发送了Cookie后，即可调用跳转语句跳转到指定地方。<BR><BR>另外还有一个方法：Web.Security.FormsAuthentication.RedirectFromLoginPage(string UserName, bool);将发送Cookie，并且根据传递的ReturnUrl参数来跳转到指定的页面（相当于将上面的两个步骤合为一步）。因此login.aspx隐含可以传递ReturnUrl，如果没有这个参数，这个方法将用户跳转到Default.aspx页。<BR><BR>3、授权资源的访问<BR>&nbsp;&nbsp;&nbsp;&nbsp;一旦验证了用户合法，接下来要做的事就是对于用户请求的资源，授权他们是否能够访问。重新回到web.config文件中，在网站的任何目录中都可以使用web.config，他们的设置是传递继承的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;例如在users目录中存放的均是当用户登录后才能访问的页面，则在这个目录中创建一个web.config文件，内容如下：<BR><BR><FONT color=#666666>&lt;?xml version="1.0" encoding="utf-8" ?&gt;<BR>&lt;configuration&gt;<BR>&nbsp;&nbsp;&lt;system.web&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;&nbsp;授权 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此节设置应用程序的授权策略。可以允许或拒绝不同的用户或角色访问<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用程序资源。通配符: "*" 表示任何人，"?" 表示匿名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(未经身份验证的)用户。<BR>&nbsp;&nbsp;&nbsp;&nbsp;--&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;authorization&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;deny users="?" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/authorization&gt;<BR>&nbsp;&nbsp;&lt;/system.web&gt;<BR>&lt;/configuration&gt;<BR></FONT><BR>上述内容中deny users="?" 将告诉.NET，此目录拒绝匿名用户的访问，也就是没有验证的用户。当用户试图请求此目录中的资源，将会被重新定向到login.aspx页面，要求登陆。没有登陆的情况下是无法访问的。<BR><BR>上述仅对目录进行定义，程序员不用在页面上添加任何代码，即可完整地实现了授权方案。<BR>当然，这种仅针对目录的授权配置可能有时候又会缺乏灵活，因此，.NET也提供location配置节，可以对指定的资源定义授权：<BR><FONT color=#666666>&lt;configuration&gt;<BR>&nbsp;&nbsp;&lt;location path="userabc.aspx"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;system.web&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;authorization&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;allow users="a,b,c" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/authorization&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/system.web&gt;<BR>&nbsp;&nbsp;&lt;/location&gt;<BR>&lt;/configuration&gt;<BR></FONT><BR>其中path是资源相对路径。<BR><BR>如果这还不够灵活的话，.NET也提供了在代码中使用的方法，ASP.NET页全局隐含了一个只读的User对象，通过获取User.Identity.IsAuthenticated属性，可探知用户是否验证（即是否登陆），User.Identity.Name属性可以获得用户的Name，即在验证时的SetAuthCookie方法中传递的userid。<BR><BR>4、基于角色的授权<BR>&nbsp;&nbsp;&nbsp;&nbsp;上面我们讲述的用户验证，只可能有两种情况，要么用户通过验证，可以授权访问资源，要么用户没有通过验证，不能访问需要授权的资源。但是即便是验证通过的用户，可能他们所持用的权限还需要再进一步区分。例如普通用户和管理员同样是需要验证通过的，但是普通用户显然不能够访问管理页面，而管理员可以。面对这种情况，.NET可以使用基于角色的授权模型。<BR>&nbsp;&nbsp;&nbsp;&nbsp;其基本原理是，一旦用户验证合法，他们就被分配角色，用户可以使一个或者若干和角色，而资源的授权面向角色，这样，针对不同的角色，就可以授予不同的权限，没有某种角色类型的用户试图访问需要这种角色的资源将会被拒绝。<BR>&nbsp;&nbsp;&nbsp;&nbsp;当网站开始接受用户请求时，就伴随着验证，将激发Application_AuthenticateRequest事件，在Global.asax文件中写代码以响应此事件。角色的分配工作就需要再这里进行。<BR><BR><FONT color=#666666>public void Application_AuthenticateRequest(object sender, EventArgs e)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.Request.IsAuthenticated)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这里简化了操作，可以从数据库中获得角色信息用以构造rolesStrArr数组。作为示例，我们为除了a之外的用户分配了管理员角色<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string[] rolesStrArr;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.Context.User.Identity.Name == "a")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rolesStrArr = new string[]{"普通用户"};<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rolesStrArr = new string[]{"普通用户","管理员"};<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.Context.User = new System.Security.Principal.GenericPrincipal(this.User.Identity, rolesStrArr);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR></FONT><BR>以上代码清晰明了，因此不再赘述。虽然在全局性有User对象，但是只有Context上下文中的User对象是可以写入的，我们调用System.Security.Principal.GenericPrincipal方法，在原有User对象的基础上为其加入角色。角色列表示一个字符串数组。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;一旦用户被授予访问角色之后，在web.config中就可以配置针对不同角色的访问。例如在管理员admin目录内<BR><BR><FONT color=#666666>&lt;configuration&gt;<BR>&nbsp;&nbsp;&lt;location path="userabc.aspx"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;system.web&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;authorization&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;allow roles="管理员" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;deny users="*" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/authorization&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/system.web&gt;<BR>&nbsp;&nbsp;&lt;/location&gt;<BR>&lt;/configuration&gt;<BR></FONT><BR>上述配置只允许管理员角色才能被授权。资源默认是任何人都访问的，所以要在下面再添加&lt;deny users="*" /&gt;表示对任何用户拒绝。<BR><BR>注意，无论对角色或者对用户指定资源的访问，如果对于多个角色或者读个资源，他们之间使用半角逗号隔开。同样，也可以使用上面讲到的方法，对指定的资源进行配置而不是对整个目录。<BR><BR>全局的User对象提供了一个方法IsInRole(string RoleName)方法用来在代码中检测用户是否拥有某种角色。如果他拥有这种角色，将返回true。<BR><BR><BR>后记<BR>&nbsp;&nbsp;&nbsp;&nbsp;.NET提供了完整的安全方面的解决方案，相对于ASP，这是激动人心的一个新特性。只是很多人可能并不能够熟练地运用，而且最痛心的是，很多书籍上甚至并没有这方面的任何描述，甚至连概念都没有。这就让人很怀疑编者的水平了。<BR>&nbsp;&nbsp;&nbsp;&nbsp;首先，还是要在不断的实践过程中去了解和体会.NET，其实最好的老师应当是MSDN，到论坛来发帖的用户，我都尽量建议去查阅MSDN的资料，MSDN除了教给你怎么写代码，其实他教给你的还有非常优秀的思想和整体概念。只要学会使用，没有这些书也可以。从写第一行代码到现在，除了一本启蒙书，其他的资源都是MSDN或者网上找的，还有就是在每次做项目中的心得。尽管现在看来，启蒙书中也没有非常全面地讲述这些东西。</P></div>]]></description>
	    <author><![CDATA[shmily-no1]]></author>
	    <comments>http://shmily-no1.blog.163.com/blog/static/4765068920083166124220</comments>
    <slash:comments>0</slash:comments>
    <guid isPermaLink="true">http://shmily-no1.blog.163.com/blog/static/4765068920083166124220</guid>
    <pubDate>Wed, 16 Apr 2008 18:12:42 +0800</pubDate>
    <dcterms:modified>2008-04-16T18:12:42+08:00</dcterms:modified>
  </item>    
  <item>
  	<title><![CDATA[VS2003 WEB应用程序向VS2005的移植]]></title>	
    <link>http://shmily-no1.blog.163.com/blog/static/47650689200831135111553</link>
    <description><![CDATA[<div><p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">源自网络》：<br></span></p><p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;"><br></span></p><p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">下面的向导将向你展示，如何快速简便地把</span><span lang="EN-US">VS2003 </span><span style="font-family: 宋体;">网络应用程序移植到</span><span lang="EN-US">VS2005</span><span style="font-family: 宋体;">平台。请详细阅读第一至第六条指引，目的是让你了解</span><span lang="EN-US">VS2005</span><span style="font-family: 宋体;">的网络应用程序的运行模式，因为这和以前</span><span lang="EN-US">BEAT1</span><span style="font-family: 宋体;">（和最终版的</span><span lang="EN-US">VS2005</span><span style="font-family: 宋体;">存在一定的差异，某些功能在</span><span lang="EN-US">BEAT</span><span style="font-family: 宋体;">版里不支持）</span> <span style="font-family: 宋体;">和</span><span lang="EN-US">VS2003</span><span style="font-family: 宋体;">的运行模式存在着差异。</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><strong style=""><span style="font-family: 宋体;">利用</span></strong><strong style=""><span style="" lang="EN-US">VS2005</span></strong><strong style=""><span style="font-family: 宋体;">的</span></strong><strong style=""><span style="" lang="EN-US">WEB APPLICATION PROJECT PREVIEW </span></strong><strong style=""><span style="font-family: 宋体;">时行</span></strong><strong style=""><span style="" lang="EN-US">VS2003</span></strong><strong style=""><span style="font-family: 宋体;">的程序移植</span></strong><strong style=""><span style="" lang="EN-US"></span></strong></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">有很多种不同的移植方案，一种默认的移植方式是通过网站应用程序模式。在此，我们利用的是一种非常简单的移植方案，和默认方式的原理一样，你不必要去对程序结构做任何修改。</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">唯一要做的是忽略</span><span lang="EN-US">API</span><span style="font-family: 宋体;">引用的警告。</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">在使用</span><span lang="EN-US">VS2005</span><span style="font-family: 宋体;">最终版时，当你打开</span><span lang="EN-US">VS2003</span><span style="font-family: 宋体;">的工程项目时，它会提示你，是否对当前打开的项目进行转换。</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">自动移植向导在第一版中并不支持，但是根据下面的指引，你可达到同样的效果。一般来说，你可以在</span><span lang="EN-US">15-20</span><span style="font-family: 宋体;">以内完成前八个步骤。（在这里写的太详细了，其实每步可能只要</span><span lang="EN-US">1,2</span><span style="font-family: 宋体;">分钟就可完成）。</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">请仔细按照步骤进行操作，如果在移植当中遇到问题（成功最好），那么请来信，我会在下一次的更新中回答你的疑问。</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><strong style=""><em style=""><span lang="EN-US">STEP 0</span></em></strong><strong style=""><em style=""><span style="font-family: 宋体;">：安装</span><span lang="EN-US">VS2005 </span></em></strong><strong style=""><em style=""><span style="font-family: 宋体;">网络应用程序工程项目预揽</span><span lang="EN-US"></span></em></strong></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">如果你安装的是</span><span lang="EN-US">VS2005 </span><span style="font-family: 宋体;">最终版，那么，你就不必要再进行安装了，因了这项功能已经内置在</span><span lang="EN-US">VS2005</span><span style="font-family: 宋体;">里面了，如果你用的</span><span lang="EN-US">VS2005</span><span style="font-family: 宋体;">没有此项功能，你可以点击</span><span lang="EN-US"><a href="http://webproject.scottgu.com/download.aspx"><span style="font-family: 宋体;" lang="EN-US"><span lang="EN-US">下载</span></span></a></span><span style="font-family: 宋体;">并安装，在使用前请仔细阅读说明。</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><strong style=""><em style=""><span lang="EN-US">STEP 1</span></em></strong><strong style=""><em style=""><span style="font-family: 宋体;">：备份你要转换的</span><span lang="EN-US">VS2003</span></em></strong><strong style=""><em style=""><span style="font-family: 宋体;">项目文件</span><span lang="EN-US"></span></em></strong></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">在尝试以下步骤之前，请确认你已经对你要转换的项目就行了完整的备份，这样以备不测。因为在转换的过程当中，我们很难保证不出问题，一但出了问题，我们可以利用这个备份进行回转。</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><strong style=""><em style=""><span lang="EN-US">STEP 2</span></em></strong><strong style=""><em style=""><span style="font-family: 宋体;">：打开你的</span><span lang="EN-US">VS2003</span></em></strong><strong style=""><em style=""><span style="font-family: 宋体;">项目，确保项目运行正常</span><span lang="EN-US"></span></em></strong></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span lang="EN-US">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt; color: rgb(51, 153, 102);"><span style="font-family: 宋体;">在进行转换之前，还要对你的项目做最后的编译和测试，保证没有错误之后，才可下面的步骤。这样做是为了在以后的步骤执行当中减少不必要麻烦（特别是，如果因为最后一次的文件移动所导致的问题）。</span></p>
<p style="margin: 0