<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Two Man - 网站编程</title><link>http://www.blog-design.cn/</link><description>SEO博客,兔漫设计,网站建设 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 81206</generator><language>zh-CN</language><copyright>Copyright 2008 SEO博客 Some Rights Reserved.Two Man兔漫设计 网站备案号:粤ICP备08014898号</copyright><pubDate>Sun, 05 Sep 2010 04:01:48 +0800</pubDate><item><title>手机开发中你需要注意的问题</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/186.html</link><pubDate>Thu, 26 Aug 2010 16:22:44 +0800</pubDate><guid>http://www.blog-design.cn/post/186.html</guid><description><![CDATA[<p>继续转载挨踢民工的文章，手机网站开发应注意的事项。肯定的说：文章很不错，很仔细。带上原文链接：<a href="http://www.fool2fish.cn/?p=324#more-324">http://www.fool2fish.cn/?p=324#more-324</a>&nbsp;。</p><ol>    <li><strong>手机网页编码需要遵循什么规范？</strong><br />    遵循XHTML Mobile Profile规范（<a title="http://www.openmobilealliance.org/tech/affiliates/LicenseAgreement.asp?DocName=/wap/wap-277-xhtmlmp-20011029-a.pdf" rel="nofollow" href="http://www.openmobilealliance.org/tech/affiliates/LicenseAgreement.asp?DocName=/wap/wap-277-xhtmlmp-20011029-a.pdf">WAP-277-XHTMLMP-20011029-a.pdf</a>），简称为XHTML MP，也就是通常说的WAP2.0规范。&nbsp;<acronym title="Extensible HyperText Markup Language">XHTML</acronym>MP是为不支持XHTML的全部特性且资源有限的客户端所设计的。它以XHTML Basic为基础，加入了一些来自XHTML 1.0的元素和属性。这些内容包括一些其他元素和对内部样式表的支持。和XHTML Basic相同，XHTML MP是严格的XHTML 1.0子集。</li>    <li><strong>网页文档推荐使用扩展名？</strong><br />    推荐命名为xhtml，按WAP2.0的规范标准写成html/htm等也是可以的。但少数手机对html支持的不好。</li>    <li><strong>为什么现今大多数的网站一行字数上限为14个中文字符？</strong><br />    由于手持设备的特殊性，其页面中实际文字大小未必是我们在CSS中设定的文字大小，尤其是在第三方浏览器中。例如Nokia5310，其内置浏览器 页面内文字大小与CSS设定相符，但是第三方浏览器OperaMini与UCWEB页面内文字大小却大于CSS设定。经测试，其文本大概在16px左右。 假如屏幕分辨率宽度为240px，去除外边距，那么其一行显示14个字以内，是比较保险（避免文本换行）的做法。</li>    <li><strong>使用WCSS还是CSS？</strong><br />    WCSS (WAP Cascading Style Sheet 或称 WAP CSS)是移动版本的CSS样式表。它是CSS2的一个子集，去掉了一些不适于移动互联网特性的属性，并加入一些具有WAP特性的扩展（如-wap-input-format/-wap-input-required/display:-wap-marquee等）。 需要留意的是，这些特殊的属性扩展并不是很实用，所以在实际的项目开发当中，不推荐使用WCSS特有的属性。</li>    <li><strong>避免空值属性</strong><br />    如果属性值为空，在web页面中是完全没有问题的，但是在大部分手机网页上会报错。</li>    <li><strong>网页大小限制</strong><br />    建议低版本页面不超过15k，高版本页面不超过60k。</li>    <li><strong>用手机模拟器和第三方手机浏览器的在线模拟器来测试页面是不是靠谱？</strong><br />    有条件的话，我们当然建议在手机实体上进行测试，因为目标客户群的手机设备总是在不断变化的，这些手机模拟器通常不能完全正确的模拟页面在手机上的显示情况，比如图片色彩，页面大小限制等就很难再模拟器上测试出来。当然，一些第三方手机浏览器的在线模拟器还是可以进行测试的，第三方浏览器相对来说受手机设备的影响较小。</li></ol><p>&nbsp;</p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/186.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=186</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=186&amp;key=b8e48ed9</trackback:ping></item><item><title>手机浏览器兼容性测试结果概要</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/185.html</link><pubDate>Thu, 26 Aug 2010 16:09:19 +0800</pubDate><guid>http://www.blog-design.cn/post/185.html</guid><description><![CDATA[<p>最近公司项目有意要加入手机网站的想法，于是说，看了一些关于手机网站的资料。看了资料后才发现还是在06年接触过手机编程的我，还停留在WAP1.1，够火星吧！ 看了XHTML MP后才发现3G时代终于到了，手机浏览器居然比PC机还多，那就意味着可怜的我们做手机网站的测试工作进一步加重。不多说，看看网站当过来的<a target="_blank" href="http://www.fool2fish.cn/">挨踢民工</a>写的文章吧。</p><p><strong>注意：</strong>以下所说的&ldquo;大多数&rdquo;是指在我们测试过的机型中，发生此类状况的手机占比达50%及以上，&ldquo;部分&rdquo;为20%到50%；&ldquo;少数&rdquo;为20%及以下。而这个概率也仅仅只限于我们所测试过的机型，虽然我们采集的样本尽量覆盖各种特征的手机，但并不代表所有手机的情况。</p><h3>XHTML部分</h3><p><strong>大多数手机不支持的：</strong></p><ul>    <li>表单元素的&ldquo;disable&rdquo;属性</li></ul><p><strong>部分手机不支持的：</strong></p><ul>    <li>&ldquo;button&rdquo;标签</li>    <li>&ldquo;input[type=file]&ldquo;标签</li>    <li>&ldquo;iframe&rdquo;标签。</li></ul><p>虽然只有部分手机不支持这几个标签，但因为这些标签在页面中往往具有非常重要的功能，所以属于高危标签，要谨慎使用。</p><p><strong>少数手机不支持的：</strong></p><ul>    <li>&ldquo;select&rdquo;标签：该标签如果被赋予比较复杂的CSS属性，可能会导致显示不正常，比如&rdquo;vertical-align:middle&rdquo;。</li></ul><h4>CSS部分</h4><p><strong>大部分手机不支持的：</strong></p><ul>    <li>&ldquo;font-family&rdquo;属性：因为手机基本上只安装了宋体这一种中文字体；</li>    <li>&ldquo;font-family:bold;&rdquo;：对中文字符无效，但一般对英文字符是有效的；</li>    <li>&ldquo;font-style: italic;&rdquo;：同上；</li>    <li>&ldquo;font-size&rdquo;属性：比如12px的中文和14px的中文看起来一样大，当字符大小为18px的时候你也许能看出来一些区别；</li>    <li>&ldquo;white-space/word-wrap&rdquo;属性：无法设置强制换行，所以当你网页有很多中文的时候，需要特别关注不要让过多连写的英文字符撑开页面；</li>    <li>&ldquo;background-position&rdquo;属性：但背景图片的其他属性设定是支持的；</li>    <li>&ldquo;position&rdquo;属性；</li>    <li>&ldquo;overflow&rdquo;属性；</li>    <li>&ldquo;display&rdquo;属性；</li>    <li>&ldquo;min-height&rdquo;和&rdquo;min-weidth&rdquo;属性；</li></ul><p><strong>部分手机不支持的：</strong></p><ul>    <li>&ldquo;height&rdquo;属性：对&rdquo;height&rdquo;的支持不太好，奇怪的是在我们的测试当中，仅仅只有很少部分手机不支持&rdquo;width&rdquo;属性；</li>    <li>&ldquo;pading&rdquo;属性</li>    <li>&ldquo;margin&rdquo;属性：更高比例的手机不支持&rdquo;margin&rdquo;的负值。</li></ul><p><strong>少数手机不支持的：</strong></p><ul>    <li>少数手机对CSS完全不支持；</li></ul><h4>JavaScript部分</h4><p>这部分测试相对不那么让人抓狂，要么干脆不支持，如果支持的话，对基本的dom操作、事件等支持度都还不错。但我们没有测试过很复杂的脚本。</p><p>在我们测试过的手机当中，支持（包括不完全支持）JavaScript的手机比例大约在一半左右，当然，对于我们来说，最重要的不是这个比例，而是要如何做好JavaScript的优雅降级。</p><h4>其他</h4><ul>    <li>部分手机不支持png8和png24，所以尽量使用jpg和gif的图片</li>    <li>另外对于平滑的渐变等精细的图片细节，部分手机的色彩支持度并不能达到要求，所以慎用有平滑渐变的bar设计</li>    <li>部分手机对于超大图片，既不进行缩放，也不显示横下滚动条</li>    <li>少数手机在打开超过20k的测试页面时，会显示内存不足</li></ul>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/185.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=185</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=185&amp;key=d6486573</trackback:ping></item><item><title>asp.net+jquery滚动滚动条加载数据下拉控件</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/181.html</link><pubDate>Wed, 23 Jun 2010 17:22:31 +0800</pubDate><guid>http://www.blog-design.cn/post/181.html</guid><description><![CDATA[<p>由于需求需要用到一个滚动滚动条加载数据的下拉列表（假如数据1000条，下拉列表开始只显示100条，当用户下拉滚到条到最底下时，再加载下一个100条，如此循环），这样的需求貌似自己感觉不是很合理，因为数据多了如此下拉无论从人还是机器操作都比较痛苦。</p><p>没办法由于需求下来了，只能按需求操作。网上找了很多相关控件都感觉有点庞大，占资源比较多。没办法自己花半天时间弄出个半成品自定义控件，拿出来分享下，如有高手看了请多指点。</p><p>需求：AJAX滚动滚动条加载数据的下拉列表<br />控件名称：Webcombo<br />所用技术：ASP.NET(C#)，jQuery，ASP.NET一般处理文件（.ashx）</p><p>下拉列表具体实现：用DIV模拟下拉列表，input和图片模拟下拉框。最终结果如下图</p><p style="text-align: center">&nbsp;<img alt="asp.net 滚动条滚动加载数据控件" src="http://www.blog-design.cn/upload/2010/6/201006231724127152.JPG" /></p><p>先分析下jQuery这边的插件写法吧</p><p>AJAX加载有jQuery Ajax完成<br />&nbsp;&nbsp;$.ajax({<br />&nbsp;&nbsp;&nbsp;&nbsp; type: options.getMethod,<br />&nbsp;&nbsp;&nbsp;&nbsp; url: options.jsonUrl,<br />&nbsp;&nbsp;&nbsp;&nbsp; data: params,<br />&nbsp;&nbsp;&nbsp;&nbsp; success: function(data){<br />&nbsp;&nbsp;&nbsp;&nbsp; if(isScroll)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.CreateListItem(showbox,data,options);<br />&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.CreateBox(showbox,data,options);<br />&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp; complete:function(){ },<br />&nbsp;&nbsp;&nbsp;&nbsp; error:function(e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(options.loadBox).css('background-image','none');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(options.loadBox).append('&lt;span&gt;data connect error!'+e+'&lt;/span&gt;'); <br />&nbsp;&nbsp;&nbsp;&nbsp; }</p><p>而滚动条滚动加载数据则由下拉DIV的onscroll事件完成，具体核心代码如下：</p><p>&nbsp;&nbsp;$(showbox).scroll(function(){<br />&nbsp;&nbsp;&nbsp;if(options.total==$(this).children(&quot;ul&quot;).children(&quot;li&quot;).length)<br />&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;var scrolltop=$(showbox).attr('scrollTop');<br />&nbsp;&nbsp;&nbsp;var scrollheight=$(showbox).attr('scrollHeight');<br />&nbsp;&nbsp;&nbsp;var windowheight=$(showbox).attr('clientHeight');<br />&nbsp;&nbsp;&nbsp;var scrolloffset=20;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;$(options.loadBox).css('top',scrolltop);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;if(scrolltop&gt;=(scrollheight-(windowheight+scrolloffset))&amp;&amp;!loading)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;loading=true;<br />&nbsp;&nbsp;&nbsp;&nbsp;$(options.loadBox).show(); <br />&nbsp;&nbsp;&nbsp;&nbsp;options.total=$(this).children(&quot;ul&quot;).children(&quot;li&quot;).length;<br />&nbsp;&nbsp;&nbsp;&nbsp;$.WebComboGetData(showbox,options,true);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;});</p><p>该插件的完整代码再源文件中可以找到，文件名：simulateddl.js</p><p>其实这个滚动条滚动加载数据的jQuery插件写好了就已经可以实现该功能了，只是由于项目中用到的地方比较多又无赖的将其封装到asp.net自定义控件中。之所以说半成品就是这个自定义控件自定义的有些不人性化，高手们见了望指点指点。具体代码可以下载后查看，本人不是控件制作高手，就不搬出来献丑了。有问题建议的朋友可以提出来大家讨论讨论。</p><p><a target="_blank" href="http://files.cnblogs.com/Araneid/WebCombo.rar">asp.net+jQuery滚动条滚动加载数据控件源代码下载</a></p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/181.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=181</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=181&amp;key=7c30fea5</trackback:ping></item><item><title>jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/179.html</link><pubDate>Tue, 13 Apr 2010 19:51:36 +0800</pubDate><guid>http://www.blog-design.cn/post/179.html</guid><description><![CDATA[<p>初到公司从事web应用程序的开发，接上级命令需要做一个AJAX的GridView来显示数据，当然按照现在流行的首选是Jquery。理由：jquery简单，兼容性好且容易封装。废话不多说，马上开始我们的Jquery插件编写吧。应该有很多人写过类似的插件，我也是有些模仿flexGrid的形式。</p><p>需求：GridView显示数据，无刷新分页，无刷新排序，无刷新过滤（搜索数据），基于ASP.NET(我们这里有ashx一般处理文件来实现)。</p><p>使用到技术：asp.net2.0, jquery,css</p><p>首先写的是jquery插件方面，使用的核心函数还是jquery的ajax函数，方便快捷。</p><p>&nbsp; $.ajax({<br />&nbsp;&nbsp;&nbsp;&nbsp; type: p.method,<br />&nbsp;&nbsp;&nbsp;&nbsp; url: p.url,<br />&nbsp;&nbsp;&nbsp;&nbsp; data:param,<br />&nbsp;&nbsp;&nbsp;&nbsp; success: function(msg){<br />&nbsp;&nbsp;&nbsp; $.AddData(msg,showbox,p);<br />&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp; error: function(msg){$.ErrorAjax(showbox,p.errorMsg);},<br />&nbsp;&nbsp;&nbsp;&nbsp; beforeSend:function(){$.AddLoading(showbox);},<br />&nbsp;&nbsp;&nbsp;&nbsp; complete:function(){$.MoveLoading(showbox);}<br />&nbsp; });</p><p>看了就这么简单的一句，jquery就是比较爽的。具体的代码请下载下面的附件查看哦。</p><p>先发张生成后结果图来看看（样式不是很好看，需要的自己掂量着修改吧）</p><p>&nbsp;<img title="" alt="" onload="ResizeImage(this,520)" src="http://www.blog-design.cn/upload/2010/4/1.jpg" /></p><p>排序和过滤功能</p><p><img title="" alt="" onload="ResizeImage(this,520)" src="http://www.blog-design.cn/upload/2010/4/2.jpg" /></p><p>jquery+ashx的无刷新分页功能</p><p><img title="" alt="" onload="ResizeImage(this,520)" src="http://www.blog-design.cn/upload/2010/4/3.jpg" /></p><p>其实这里除了jquery充当整个插件的主要架构外，另外一个重要的文件就是ashx这个一般处理文件啦。ashx在我整个jqueryGrid插件中输出{\n page:1,\ntotal:0,pages:1,rows:'',cols:''}这样的json代码，相信用过josn的朋友都明白。其中为了减少错误我用了一个第三方插件Newtonsoft.Json，这是格式化json字符串的JsonConvert.DeserializeObject()这个函数就是啦。</p><p>当然该功能插件之适合用于web应用程序和内部网站中，对于网站来说有些不适合，毕竟从SEO角度来讲jquery直接生成的数据是不是很好的显示方式。不多说了，大家可以看看我的代码，如果对该插件有更好的建议或者修改欢迎交流。</p><p><a target="_blank" href="http://www.blog-design.cn/UPLOAD/2010/4/JqueryGrid.rar">jquery+ashx无刷新GridView数据显示插件下载</a></p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/179.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=179</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=179&amp;key=dfd838b8</trackback:ping></item><item><title>document.body.scrollTop为0的解决方案</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/176.html</link><pubDate>Mon, 08 Mar 2010 17:30:13 +0800</pubDate><guid>http://www.blog-design.cn/post/176.html</guid><description><![CDATA[<p>Jquery用多了，对单纯JS却发现有些问题。今天做浮动就碰上了document.body.scrollTop总为0的问题。百度一下终于得到解决方法。</p><p>在页面中加一个随着页面滚动条滚动的小图片广告，但是却发现document.body.scrollTop这个属性在本地的时候能取到值，但是传到服务器上的时候取到的值一直不变。</p><p>解决方案<br />1、原来在HTML文件头部声明了这样一句：<br />&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>&quot;&gt; 原来在此DTD下面的document.body是针对整个网页真正的body了，而document.documentElement才是真正的浏览器显示区域。</p><p>改成这样就好了：<br />&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;</p><p>但是W3c的标准的引用，样式会发生变化。</p><p>2、将document.body.scrollTop改为document.documentElement.scrollTop<br />&nbsp;</p><p>类推：document.body.clientHeight也改成document.documentElement.clientHeight</p><p>帖下我的简单右下角图片浮动js代码（兼容IE7,火狐，其他未测试）：</p><p>document.writeln(&quot;&lt;div id=\&quot;ad_DIV\&quot; style=\&quot;z-index:99999; left:0px;&nbsp;&nbsp; width:200px;&nbsp; position:absolute; top:20px; height:116px; \&quot;&gt;&quot;);<br />document.writeln(&quot;&lt;a href=\&quot;http://www.blog-design.cn\&quot;&gt;&lt;img src=\&quot;ad.png\&quot; border=\&quot;0\&quot; width=\&quot;200\&quot; height=\&quot;116\&quot;&gt;&lt;\/a&gt;&lt;\/div&gt;&quot;);<br />document.getElementById(&quot;ad_DIV&quot;).style.top=(document.documentElement.clientHeight-116)+&quot;px&quot; ;<br />document.getElementById(&quot;ad_DIV&quot;).style.left=(document.documentElement.clientWidth-200)+&quot;px&quot;;<br />moveR();<br />function moveR() {<br />&nbsp;document.getElementById(&quot;ad_DIV&quot;).style.top=(document.documentElement.clientHeight+document.documentElement.scrollTop-116)+&quot;px&quot;;<br />&nbsp;document.getElementById(&quot;ad_DIV&quot;).style.left=(document.documentElement.clientWidth+document.documentElement.scrollLeft-200)+&quot;px&quot;;<br />&nbsp;setTimeout(&quot;moveR();&quot;,80)<br />}&nbsp;</p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/176.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=176</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=176&amp;key=457aefd6</trackback:ping></item><item><title>ASP.NET 两种超强SQL 注入免费解决方案( 基于IIS) </title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/175.html</link><pubDate>Fri, 05 Mar 2010 15:02:56 +0800</pubDate><guid>http://www.blog-design.cn/post/175.html</guid><description><![CDATA[<p>不可否认，SQL注入是现在网站攻击的主要手段，而在我以往做网站中都是利用字符串过滤和错误隐藏来避免这种攻击。这种方法只是从程序可以有效避免一些侵略，但实际如果在你没能力改变代码的情况下该如何防止这样的问题呢？下面我找到的两中办法，都是利用IIS来进行设置的。</p><p><strong>UrlScan 3.1</strong><br />UrlScan 3.1是一个安全方面的工具，微软官方的东西。它会检查所有IIS处理的HTTP请求。UrlScan 可以在有安全问题的HTTP请求到达应用程序之前就阻止这个请求。UrlScan 3.1 是UrlScan 2.5的一个升级版本，支持Windows Vista 和Windows Server 2008系统之上的IIS 5.1, IIS 6.0 和 IIS 7.0。</p><p>链接地址：<a href="http://www.iis.net/expand/UrlScan">http://www.iis.net/expand/UrlScan</a> 这里还有很多非常有用的IIS扩展，可以看看。</p><p><strong>IIS 6 SQL Injection Sanitation ISAPI Wildcard</strong></p><p>这个ISAPI dll 也是通过检查HTTP请求避免SQL注入。只兼容windows 2003上的 IIS 6.0。对于Windows XP 上的 IIS 5 不支持。</p><p>这是一个开源项目：<a href="http://www.codeplex.com/IIS6SQLInjection">http://www.codeplex.com/IIS6SQLInjection</a></p><p>&nbsp;</p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/175.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=175</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=175&amp;key=7fc204a5</trackback:ping></item><item><title>优腾网小游戏程序即将出炉</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/flash-1.html</link><pubDate>Fri, 15 May 2009 00:08:43 +0800</pubDate><guid>http://www.blog-design.cn/post/flash-1.html</guid><description><![CDATA[<p>为自己将投入运营的网站做了一程序。主要功能，用户可以通过程序来玩本网站搜有小游戏。下面先show一下这C#写的小游戏程序&nbsp;。基本功能暂时确定，过两天将提供下载，希望有朋友喜欢玩。</p><p><img title="" alt="" src="http://www.blog-design.cn/upload/2009/5/flash.gif" onload="ResizeImage(this,520)" /></p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/flash-1.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=157</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=157&amp;key=405522d7</trackback:ping></item><item><title>可拖动的层(jquery插件)</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/jquery-drag.html</link><pubDate>Mon, 16 Mar 2009 17:52:01 +0800</pubDate><guid>http://www.blog-design.cn/post/jquery-drag.html</guid><description><![CDATA[<p>最近学习jquery编程，整出个可拖动的层(jquery插件)，虽然这类插件在网上很多，但终究不是为自己定制的。下面写下我自己第一个jquery插件的源码吧。</p><p>jquery.drag.arain.js<br />// JavaScript Document<br />// arain<br />// 2009 03 03<br />// div drag<br />var listZIndex = 100; <br />(function($){<br />$.fn.Drags=&nbsp;function(options){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var lastMouseX = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var lastMouseY = 0;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var defaults = {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; posx : 0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; posy : 0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handle: this,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; draggable: true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var options = $.extend(defaults, options);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; var setFocus = function($obj){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $obj.css(&quot;z-index&quot;,listZIndex++);<br />&nbsp;&nbsp;&nbsp;&nbsp; };<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; var move = function($obj, x, y){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $obj.attr(&quot;lastX&quot;,x)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .attr(&quot;lastY&quot;,y)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .css(&quot;left&quot;, x)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .css(&quot;top&quot;, y);<br />&nbsp;&nbsp;&nbsp;&nbsp; };</p><p>&nbsp;&nbsp;&nbsp;&nbsp; var dragging = function(e, $obj){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(options.draggable){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e = e ? e : window.event;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var newx = parseInt($obj.css(&quot;left&quot;)) + (e.clientX - lastMouseX);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var newy = parseInt($obj.css(&quot;top&quot;)) + (e.clientY - lastMouseY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastMouseX = e.clientX;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastMouseY = e.clientY;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; move($obj,newx,newy);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; };<br />&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; $(options.handle).bind('mousedown', function(e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $obj = $(e.target).parent();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setFocus($obj);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($obj.attr(&quot;state&quot;) == &quot;normal&quot;){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e = e ? e : window.event;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastMouseX = e.clientX;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastMouseY = e.clientY;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).bind('mousemove', function(e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dragging(e, $obj);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).bind('mouseup', function(e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).unbind('mousemove');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).unbind('mouseup');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; move($(this),options.posx,options.posy);<br />&nbsp;&nbsp;&nbsp;&nbsp; $(this).attr(&quot;state&quot;,&quot;normal&quot;);<br />&nbsp;<br />}})(jQuery);</p><p>调用：在页面的</p><p>&nbsp;$(document).ready(function(){// drag move<br />&nbsp;$(&quot;#UserList&quot;).Drags({<br />&nbsp;&nbsp;&nbsp;&nbsp; posx:50,<br />&nbsp;&nbsp;&nbsp;&nbsp; posy:50,<br />&nbsp;&nbsp;&nbsp;&nbsp; handle:&quot;#UserList&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp; draggable:true<br />&nbsp;});});</p><p>呵呵，这样一个插件就写好了。</p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/jquery-drag.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=136</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=136&amp;key=35f9c03d</trackback:ping></item><item><title>In search for the fastest IList to IList&amp;lt;T&amp;gt; conversion</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/200925111013.html</link><pubDate>Thu, 05 Feb 2009 11:10:13 +0800</pubDate><guid>http://www.blog-design.cn/post/200925111013.html</guid><description><![CDATA[<p>转载一篇文章，关于IList转换成IList&lt;T&gt;的三种方法，分析较透彻。没翻译，下面是原文地址。</p><p><a href="http://bloggingabout.net/blogs/ramon/archive/2007/06/18/in-search-for-the-fastest-ilist-to-ilist-lt-t-gt-conversion.aspx">http://bloggingabout.net/blogs/ramon/archive/2007/06/18/in-search-for-the-fastest-ilist-to-ilist-lt-t-gt-conversion.aspx</a></p><p>I was yet again busy with a generic data layer. I like type safety as it provides compile time safety instead of run-time. The current released Db4o build (6.1) does not support type safe result list thus I had a need to convert these. My first approach was to just do a foreach like the following example:</p><p>Conversion one&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static System.Collections.Generic.IList&lt;T&gt; Convert1&lt;T&gt;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Collections.IList source<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Collections.Generic.IList&lt;T&gt; result = new System.Collections.Generic.List&lt;T&gt;(source.Count);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (T o in source)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.Add(o);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;</p><p>But after I had this working I thought that this could be slow and that another solution was probably faster. I did a quick google search and ended up at a post of <a href="http://weblogs.asp.net/bsimser/archive/2007/05/08/generic-list-converter-snippet.aspx">Bil Simser</a>. There I saw some approaches in the comments but without additional information about its performance. So I made a little performance test where I tested not only the first example but also two others:</p><p>Conversion two&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static System.Collections.Generic.IList&lt;T&gt; Convert2&lt;T&gt;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Collections.IList source<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Collections.ArrayList list = new System.Collections.ArrayList(source);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new List&lt;T&gt;(list.ToArray(typeof(T)) as T[]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;</p><p>&nbsp;<br />Conversion three&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static System.Collections.Generic.IList&lt;T&gt; Convert3&lt;T&gt;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Collections.IList source<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T[] output = new T[source.Count];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; source.CopyTo(output, 0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return output;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;</p><p>After creating an ArrayList I initialized it with 20.000.000 instances of my test class and then converted it to a type-safe IList&lt;T&gt;. After running it several times with no load on my system I got the following results:</p><blockquote><p>Conversion one : ~2175ms<br />Conversion two : ~ 884ms<br />Conversion three : ~133ms</p></blockquote><p>So my &quot;vingerspitsgevoel&quot; was right again! What amazes me is that the conversions timings are so far apart. At first I didn't think that the second conversion would differ that much compared with the first but I think the .ToArray(..) method has CLR optimizations just as .CopyTo(..) method in the third example. The third conversion is more then 16 times faster then the first and even more then 6,5 times faster then the second.</p><p>The third conversion is even faster with much smaller arrays and lists (200.000 items). Then it is ~26 times faster then the first and ~7 times faster then the second conversion. I did this test on a Intel 3GHz D processor with 2GB of RAM on Windows XP Pro with the .net 2.0 framework.<br />&nbsp;</p><p>So if you were searching for (probably the fastest) ArrayList / IList to IList&lt;T&gt; conversion then you have found it. I immediately added the third conversion method to my personal framework code and I suggest that you do to after seeing these results.</p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/200925111013.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=133</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=133&amp;key=72693b46</trackback:ping></item><item><title>自动为c#变量生成属性(VS2005)</title><author>abcily@126.com (Arain)</author><link>http://www.blog-design.cn/post/20081030114434.html</link><pubDate>Thu, 30 Oct 2008 11:44:34 +0800</pubDate><guid>http://www.blog-design.cn/post/20081030114434.html</guid><description><![CDATA[<p><font style="font-size: 10pt; font-family: Verdana" face="#ce_temp_font#">在编写c#代码的时候，我们经常需要做一些重复枯燥的工作。例如，编写DTO（数据访问对象），通常就是为一个类定义一系列的变量和属性。</font></p><p><font style="font-size: 10pt; font-family: Verdana" face="#ce_temp_font#">有一些第三方的IDE辅助工具，可以为我们生成一些代码，减少工作量。例如，Assist X就是一款很值得推荐的工具，使用其提供的Encapsulate Field功能，可以很方便地将一个类地编写封装为属性。</font></p><p><font style="font-size: 10pt; font-family: Verdana" face="#ce_temp_font#">我今天需要介绍的如何使用Visual Studio 2005 IDE中自带的宏实现类似的功能。</font></p><p><font style="font-size: 10pt; font-family: Verdana" face="#ce_temp_font#">打开Visual Studio 2005 IDE，选择&ldquo;工具&rdquo; &gt; &quot;宏&quot; &gt; &ldquo;宏 IDE&rdquo;，选择&ldquo;添加模块&rdquo;。例如，我是在MyMacros项目中新增了一个EditorHelper模块，代码如下：<br /></font><font face="宋体" size="3"> </font></p><div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">Imports&nbsp;System<br />Imports&nbsp;EnvDTE<br />Imports&nbsp;EnvDTE80<br />Imports&nbsp;System.Diagnostics<br /><br /></span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;Module&nbsp;EditorHelper<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">为一个参数封装一般属性访问器</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;EncapsulateField()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;projectItem&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;ProjectItem&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DTE.ActiveDocument.ProjectItem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;fileCodeModel&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;FileCodeModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;projectItem.FileCodeModel<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">得到当前选定的内容</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;selectText&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextSelection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DTE.ActiveDocument.Selection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">获取到当前光标的位置</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;point&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;selectText.ActivePoint<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeElement&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeElement&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileCodeModel.CodeElementFromPoint(point,&nbsp;vsCMElement.vsCMElementVariable)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(codeElement&nbsp;</span><span style="color: #0000ff">Is</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Nothing</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Assert(codeElement.Kind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vsCMElement.vsCMElementVariable)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeVar&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeVariable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CType(codeElement,&nbsp;CodeVariable)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;fieldName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeVar.Name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeClass&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CType(codeVar.Parent,&nbsp;CodeClass)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddPropertyToClass(codeClass,&nbsp;fieldName,&nbsp;codeVar.Type)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Catch&nbsp;ex&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">吃掉异常，不做处理或者提示</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;Try<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;EncapsulateAllFields()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;projectItem&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;ProjectItem&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DTE.ActiveDocument.ProjectItem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;fileCodeModel&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;FileCodeModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;projectItem.FileCodeModel<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">得到当前选定的内容</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;selectText&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextSelection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DTE.ActiveDocument.Selection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">获取到当前光标的位置</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;point&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;selectText.ActivePoint<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeElement&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeElement&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileCodeModel.CodeElementFromPoint(point,&nbsp;vsCMElement.vsCMElementClass)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeClass&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CType(codeElement,&nbsp;CodeClass)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;codeClass.Members.Count<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">如果属性已经定义，会抛出异常</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">在这里处理异常，即使新增的属性已经定义，也可以继续处理下面的代码</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;element&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeElement&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeClass.Members.Item(i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(element.Kind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vsCMElement.vsCMElementVariable)&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeVariable&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeVariable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CType(element,&nbsp;CodeVariable)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">Not</span><span style="color: #000000">&nbsp;codeVariable.IsShared)&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">静态变量不需要增加属性</span><span style="color: #008000"><br /></span><span style="color: #000000">&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;AddPropertyToClass(codeClass,&nbsp;codeVariable.Name,&nbsp;codeVariable.Type)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Catch&nbsp;ex&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">吃掉异常</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Next</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Catch&nbsp;ex&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">可能并没有选择有效的类定义，这时会抛出异常，忽略</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">根据成员的名称的类型，在类对象中插入属性</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;AddPropertyToClass(ByVal&nbsp;codeClass&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeClass,&nbsp;ByVal&nbsp;fieldName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;ByVal&nbsp;fieldType&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">生成属性的名称，规则是首先字母大写。如果变量的开头为&ldquo;_&rdquo;，移除</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;propertyName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fieldName<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(propertyName.StartsWith(</span><span style="color: #000000">&quot;</span><span style="color: #000000">_</span><span style="color: #000000">&quot;</span><span style="color: #000000">))&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;propertyName.TrimStart(</span><span style="color: #000000">&quot;</span><span style="color: #000000">_</span><span style="color: #000000">&quot;</span><span style="color: #000000">c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;propertyName.Substring(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">).ToUpper()&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;propertyName.Substring(</span><span style="color: #000000">1</span><span style="color: #000000">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">创建属性对象</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">-1表示代码插入到类的最下方</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">vsCMAccess.vsCMAccessPublic表示为public</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeProperty&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeProperty&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeClass.AddProperty(propertyName,&nbsp;propertyName,&nbsp;fieldType,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;vsCMAccess.vsCMAccessPublic)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">Getter</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;getter&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeFunction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeProperty.Getter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;getterPoint&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getter.GetStartPoint(vsCMPart.vsCMPartBody)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;getterEditPoint&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;EditPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getterPoint.CreateEditPoint()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getterEditPoint.Delete(getter.GetEndPoint(vsCMPart.vsCMPartBody))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getterEditPoint.Insert(vbCrLf)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">插入回车符</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getterEditPoint.LineUp()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getterEditPoint.Indent(,&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">缩进4个位置</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getterEditPoint.Insert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">return&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;fieldName&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">;</span><span style="color: #000000">&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">Setter</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;setter&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeFunction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeProperty.Setter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;setterPoint&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;setter.GetStartPoint(vsCMPart.vsCMPartBody)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;setterEditPoint&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;EditPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;setterPoint.CreateEditPoint()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setterEditPoint.Insert(vbCrLf)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">插入回车符</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setterEditPoint.LineUp()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setterEditPoint.Indent(,&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">缩进4个位置</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setterEditPoint.Insert(fieldName&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;=&nbsp;value;</span><span style="color: #000000">&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;Module<br /></span></div><p><br /><br />我定义了两个Public方法：EncapsulateField和EncapsulateAllFields，分别用于为类的一个变量封装属性，或者为类中所有的变量（非静态）封装属性。<br /><br />使用上面的宏的方法很简单，选择&ldquo;工具&rdquo;&gt;&ldquo;宏&rdquo;&gt;&ldquo;宏资源管理器&rdquo;就可以看到我们已经创建的宏方法，如下图所示：<br /><img height="101" alt="" src="http://images.cnblogs.com/cnblogs_com/scdsun/Macros.jpg" width="216" border="0" /><br /><br />假如你已经编写了这样一段代码：<br />&nbsp;</p><div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br /><br /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Demo<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;_name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;DateTime&nbsp;_birthDay;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><p><br />将光标移到&ldquo;_name&rdquo;变量上，然后双击&ldquo;EncapsulateField&rdquo;宏，就运行了该宏。运行后，你可以得到这样的代码：<br />&nbsp;</p><div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br /><br /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Demo<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;_name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;DateTime&nbsp;_birthDay;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><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;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_name;<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;</span><span style="color: #0000ff">set</span><span style="color: #000000"><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;_name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><p><br />可以看到&ldquo;EncapsulateField&rdquo;宏已经为private string _name;创建了相应的属性。<br />EncapsulateAllFields宏只需要将光标放在Person类的代码区域中，就可以正常执行。例如针对上面的代码，EncapsulateAllFields后可以为Person类中的每一个变量都生成相应的属性。（注：上面的代码中Name属性已经有定义，所有试图再添加Name属性时会抛出异常，在EncapsulateAllFields宏定义中，已经将该异常吃掉，所以，可以正确地为所有变量生成属性）。运行后的代码如下：<br />&nbsp;</p><div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br /><br /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;Demo<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;_name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;DateTime&nbsp;_birthDay;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><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;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_name;<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;</span><span style="color: #0000ff">set</span><span style="color: #000000"><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;_name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Id<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><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;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_id;<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;</span><span style="color: #0000ff">set</span><span style="color: #000000"><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;_id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;System.DateTime&nbsp;BirthDay<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><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;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_birthDay;<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;</span><span style="color: #0000ff">set</span><span style="color: #000000"><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;_birthDay&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><p><br /><br />在确认上面的宏可以正确运行的情况下，我们还可以为其定义快捷键，进一步提高我们的工作效率。<br />在Visual Studio 2005 IDE中选择&ldquo;工具&rdquo; &gt; &ldquo;选项&rdquo;<img height="349" alt="" src="http://images.cnblogs.com/cnblogs_com/scdsun/options.jpg" width="644" border="0" /><br /><br />在&ldquo;选项&rdquo;对话框中选择&ldquo;环境&rdquo;&gt;&ldquo;键盘&rdquo;。<br />在【显示命令包含】中输入Encap...，可以帮你快速定位到相应的宏命令；<br />【新快捷键用于】选项中选择&ldquo;文本编辑器&rdquo;；<br />激活【按快捷键】输入框，选择你所希望的快捷键，例如我这里为EncapsulateField定义的快捷键为&ldquo;Ctrl + `&rdquo;，为EncapsulateAllFields定义的快捷键为&ldquo;Ctrl + Shift + `&rdquo;<br />点击分配按钮<br /><br />你就可以在文本编辑器中尽情享用宏给你带来的方便。<br /><br /><br />补充在Visual Studio 2003中使用的宏：<br />Visual Studio 2003 IDE与Visual Studio 2005 IDE在处理上稍微有些不一致的地方，需要做如下的调整：<br />&nbsp;</p><div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">Imports&nbsp;System<br />Imports&nbsp;EnvDTE<br />Imports&nbsp;System.Diagnostics<br /><br /></span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;Module&nbsp;EditorHelper<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">为一个参数封装一般属性访问器</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;EncapsulateField()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;projectItem&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;ProjectItem&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DTE.ActiveDocument.ProjectItem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;fileCodeModel&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;FileCodeModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;projectItem.FileCodeModel<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">得到当前选定的内容</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;selectText&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextSelection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DTE.ActiveDocument.Selection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">获取到当前光标的位置</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;point&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;selectText.ActivePoint<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeElement&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeElement&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileCodeModel.CodeElementFromPoint(point,&nbsp;vsCMElement.vsCMElementVariable)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(codeElement&nbsp;</span><span style="color: #0000ff">Is</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Nothing</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Assert(codeElement.Kind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vsCMElement.vsCMElementVariable)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeVar&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeVariable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CType(codeElement,&nbsp;CodeVariable)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;fieldName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeVar.Name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeClass&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CType(codeVar.Parent,&nbsp;CodeClass)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddPropertyToClass(codeClass,&nbsp;fieldName,&nbsp;codeVar.Type)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Catch&nbsp;ex&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">吃掉异常，不做处理或者提示</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">MsgBox</span><span style="color: #000000">(ex.Message)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;Try<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;EncapsulateAllFields()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;projectItem&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;ProjectItem&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DTE.ActiveDocument.ProjectItem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;fileCodeModel&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;FileCodeModel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;projectItem.FileCodeModel<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">得到当前选定的内容</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;selectText&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextSelection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DTE.ActiveDocument.Selection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">获取到当前光标的位置</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;point&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;selectText.ActivePoint<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeElement&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeElement&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileCodeModel.CodeElementFromPoint(point,&nbsp;vsCMElement.vsCMElementClass)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeClass&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CType(codeElement,&nbsp;CodeClass)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">To</span><span style="color: #000000">&nbsp;codeClass.Members.Count<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">如果属性已经定义，会抛出异常</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">在这里处理异常，即使新增的属性已经定义，也可以继续处理下面的代码</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;element&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeElement&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeClass.Members.Item(i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(element.Kind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vsCMElement.vsCMElementVariable)&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeVariable&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeVariable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;CType(element,&nbsp;CodeVariable)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">Not</span><span style="color: #000000">&nbsp;codeVariable.IsShared)&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">静态变量不需要增加属性</span><span style="color: #008000"><br /></span><span style="color: #000000">&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;AddPropertyToClass(codeClass,&nbsp;codeVariable.Name,&nbsp;codeVariable.Type)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Catch&nbsp;ex&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">吃掉异常</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Next</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Catch&nbsp;ex&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;Exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">可能并没有选择有效的类定义，这时会抛出异常，忽略</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">MsgBox</span><span style="color: #000000">(ex.Message)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">根据成员的名称的类型，在类对象中插入属性</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;AddPropertyToClass(ByVal&nbsp;codeClass&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeClass,&nbsp;ByVal&nbsp;fieldName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;ByVal&nbsp;fieldType&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">生成属性的名称，规则是首先字母大写。如果变量的开头为&ldquo;_&rdquo;，移除</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;propertyName&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fieldName<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;(propertyName.StartsWith(</span><span style="color: #000000">&quot;</span><span style="color: #000000">_</span><span style="color: #000000">&quot;</span><span style="color: #000000">))&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;propertyName.TrimStart(</span><span style="color: #000000">&quot;</span><span style="color: #000000">_</span><span style="color: #000000">&quot;</span><span style="color: #000000">c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;propertyName.Substring(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">).ToUpper()&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;propertyName.Substring(</span><span style="color: #000000">1</span><span style="color: #000000">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">创建属性对象</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">-1表示代码插入到类的最下方</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">vsCMAccess.vsCMAccessPublic表示为public</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;codeProperty&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeProperty&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeClass.AddProperty(propertyName,&nbsp;propertyName,&nbsp;fieldType,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;vsCMAccess.vsCMAccessPublic)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">Getter</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;getter&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeFunction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeProperty.Getter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;getterPoint&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getter.GetStartPoint(vsCMPart.vsCMPartBody)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;getterEditPoint&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;EditPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getterPoint.CreateEditPoint()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getterEditPoint.Delete(getter.GetEndPoint(vsCMPart.vsCMPartBody))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getterEditPoint.Insert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">get{&nbsp;return&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;fieldName&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">;&nbsp;}</span><span style="color: #000000">&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">Setter</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;setter&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;CodeFunction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;codeProperty.Setter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;setterPoint&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;TextPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;setter.GetStartPoint(vsCMPart.vsCMPartBody)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;setterEditPoint&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;EditPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;setterPoint.CreateEditPoint()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setterEditPoint.Delete(setter.GetEndPoint(vsCMPart.vsCMPartBody))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setterEditPoint.Insert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">set{&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;fieldName&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;=&nbsp;value;&nbsp;}</span><span style="color: #000000">&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br /></span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;Module<br /></span></div><p><br /><br />另外，在2003中使用EncapsulateAllFields的宏时，也需要注意一点：在使用时，光标的应该停留在类定义的空白位置，否则使用Dim codeClass As CodeClass = CType(codeElement, CodeClass)方法不能正确获取到类对象（例如，如果光标在构造函数里，获取到的是构造函数对象，这点与2005还是有所区别的）。<br /><br /><br />参考：<br />《用Visual Studio 2005创建宏代码生成器》：转载太多，已经不知道原出处</p>]]></description><category>网站编程</category><comments>http://www.blog-design.cn/post/20081030114434.html#comment</comments><wfw:comment>http://www.blog-design.cn/</wfw:comment><wfw:commentRss>http://www.blog-design.cn/feed.asp?cmt=116</wfw:commentRss><trackback:ping>http://www.blog-design.cn/cmd.asp?act=tb&amp;id=116&amp;key=d00ea714</trackback:ping></item></channel></rss>
