<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Better Code, Better Life</title><subtitle type="text">月白风清</subtitle><id>http://feed.cnblogs.com/blog/u/24989/rss</id><updated>2011-05-10T02:35:50Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/24989/rss"/><entry><id>http://www.cnblogs.com/rickiedu/archive/2011/05/10/2041894.html</id><title type="text">WPF - Displaying enums in ComboBox control</title><summary type="text">&amp;#171; Hiding from Debugger | Main | WPF: Gadget-Style User Experience &amp;#187; WPF - Displaying enums in ComboBox controlDisplaying enums in ComboBox in WPF isn&amp;#39;t really rocket science. The issue however comes when you want to display user friendly strings against the enum values. Enum unfortunat</summary><published>2011-05-10T02:36:00Z</published><updated>2011-05-10T02:36:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2011/05/10/2041894.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2011/05/10/2041894.html"/><content type="html">&lt;p &gt;&lt;a href="http://www.infosysblogs.com/microsoft/2008/09/hidding_from_debugger.html"&gt;&amp;#171; Hiding from Debugger&lt;/a&gt; | &lt;a href="http://www.infosysblogs.com/microsoft/"&gt;Main&lt;/a&gt; | &lt;a href="http://www.infosysblogs.com/microsoft/2008/09/wpf_gadgetstyle_user_experienc.html"&gt;WPF: Gadget-Style User Experience &amp;#187;&lt;/a&gt; &lt;/p&gt;&lt;a id="a001887"&gt;&lt;/a&gt;&#xD;
&lt;div id="entry-1887" &gt;&#xD;
&lt;h3 &gt;WPF - Displaying enums in ComboBox control&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="margin-bottom: 4px; float: right; margin-left: 10px"&gt;&lt;/script&gt;&lt;/div&gt;&#xD;
&lt;p&gt;Displaying enums in ComboBox in WPF isn't really rocket science. The issue however comes when you want to display user friendly strings against the enum values. Enum unfortunately doesn't support this by a simple override to the ToString method. &lt;/p&gt;&#xD;
&lt;p&gt;The usual approach people take is the use the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.descriptionattribute.aspx" target="_blank"&gt;DescriptionAttribute&lt;/a&gt;. This attribute is assigned to each enum value and at runtime, using reflection, the value of the attribute is queried and is then displayed. The approach is definitely worth considering and I found an implementation of the same and a custom WPF ComboBox that will display such user friendly enum strings &lt;a href="http://roecode.wordpress.com/2008/01/15/wpf-enumcombobox-usercontrol/" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div id="more" &gt;&#xD;
&lt;p&gt;However reflection does mean a bit of performance impact and depending on the size of the enum, this can vary. In the above implementation, the values are hence cached for any reuse and improve efficiency. However if the&amp;nbsp;binding happens only once, this has no effect. &lt;/p&gt;&#xD;
&lt;p&gt;I was hence wondering on how to do this without having to use reflection. I then hit upon an idea of using a dictionary object with the enum as the key and the value as the user friendly string. It was then a matter of binding this with the ComboBox and set the DisplayMemberPath appropriately. In order to ensure that the enum and this dictionary collection go hand in hand, I decided to encapsulate them in a single class. There is definitely a maintenance overhead of ensuring that appropriate key value pair is added to the dictionary for each enum. See the code for this class below.&lt;/p&gt;&#xD;
&lt;div style="font-family: Lucida Sans Unicode;background: white; color: black; font-size: 9pt"&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;internal&lt;/span&gt; &lt;span style="color: red"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Utility&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;static&lt;/span&gt; Utility()&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;//initialize the collection with user friendly strings for each enum&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;_monthCol = &lt;span style="color: red"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;, &lt;span style="color: red"&gt;string&lt;/span&gt;&amp;gt;(){&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Jan, &lt;span style="color: #a31515"&gt;"January"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Feb, &lt;span style="color: #a31515"&gt;"February"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Mar, &lt;span style="color: #a31515"&gt;"March"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Apr, &lt;span style="color: #a31515"&gt;"April"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.May, &lt;span style="color: #a31515"&gt;"May"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Jun, &lt;span style="color: #a31515"&gt;"June"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Jul, &lt;span style="color: #a31515"&gt;"July"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Aug, &lt;span style="color: #a31515"&gt;"August"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Sep, &lt;span style="color: #a31515"&gt;"September"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Oct, &lt;span style="color: #a31515"&gt;"October"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Nov, &lt;span style="color: #a31515"&gt;"November"&lt;/span&gt;},&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;.Dec, &lt;span style="color: #a31515"&gt;"December"&lt;/span&gt;}};&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;}&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;public&lt;/span&gt; &lt;span style="color: red"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Jan,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Feb,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Mar,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Apr,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;May,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Jun,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Jul,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Aug,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Sep,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Oct,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Nov,&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;Dec&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;}&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;private&lt;/span&gt; &lt;span style="color: red"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;, &lt;span style="color: red"&gt;string&lt;/span&gt;&amp;gt; _monthCol;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;public&lt;/span&gt; &lt;span style="color: red"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;, &lt;span style="color: red"&gt;string&lt;/span&gt;&amp;gt; MonthCollection&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;get&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;return&lt;/span&gt; _monthCol;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;}&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;}&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;}&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;!--EndFragment--&gt;and in XAML,&amp;nbsp;this Utility class can be instantiated as a resource and&amp;nbsp;then referenced in the&amp;nbsp;ComboBox creation. &amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="font-family: Lucida Sans Unicode;background: white; color: black; font-size: 9pt"&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: #a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ComboBox&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;ItemsSource&lt;/span&gt;&lt;span style="color: blue"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; Source&lt;/span&gt;&lt;span style="color: blue"&gt;={&lt;/span&gt;&lt;span style="color: #a31515"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red"&gt; monthCollection&lt;/span&gt;&lt;span style="color: blue"&gt;},&lt;/span&gt;&lt;span style="color: red"&gt; Path&lt;/span&gt;&lt;span style="color: blue"&gt;=MonthCollection}"&lt;/span&gt;&lt;span style="color: red"&gt; SelectedIndex&lt;/span&gt;&lt;span style="color: blue"&gt;="0"&lt;/span&gt;&lt;span style="color: red"&gt; DisplayMemberPath&lt;/span&gt;&lt;span style="color: blue"&gt;="Value"&lt;/span&gt;&lt;span style="color: red"&gt; SelectedValuePath&lt;/span&gt;&lt;span style="color: blue"&gt;="Key"&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;!--EndFragment--&gt;Note that the SelectedValuePath property has also been set to point to the Key in the dictionary. with this, it is easy to handle the selection changed event and the combobox's SelectedValue property will then be the enum value and you can then easily use a switch/case block to handle it appropriately. If&amp;nbsp; you don't do it, you can still easily cast this to get to the enum value as below&lt;/p&gt;&#xD;
&lt;div style="font-family: Lucida Sans Unicode;background: white; color: black; font-size: 9pt"&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;switch&lt;/span&gt;(((&lt;span style="color: #2b91af"&gt;KeyValuePair&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Utility&lt;/span&gt;.&lt;span style="color: #2b91af"&gt;Months&lt;/span&gt;, &lt;span style="color: red"&gt;string&lt;/span&gt;&amp;gt;)cmbBox.SelectedValue).Key)&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;{&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;//your case statements here&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;default&lt;/span&gt;:&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;//custom logic&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;&lt;span style="color: red"&gt;break&lt;/span&gt;;&lt;/p&gt;&#xD;
&lt;p style="margin: 0px"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/rickiedu/aggbug/2041894.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rickiedu/archive/2011/05/10/2041894.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2010/06/15/1758617.html</id><title type="text">节能的荧光胶带让你起夜不开灯</title><summary type="text">夜间难免会有起身上厕所或是接水喝之类的琐事，开灯费电又刺眼，不开灯磕磕绊绊的又不方便&amp;#8230;&amp;#8230;这款荧光胶带（Neon Tape lights），可以粘贴在家具、楼梯、家电的边缘，或者门把手、冰箱门、水杯等等小件物品上，夜间这些胶带就会发出幽幽的绿光（好像有点恐怖 &amp;#8211; -），勾勒出物品的轮廓，无需开灯即可行动自如。</summary><published>2010-06-15T06:13:00Z</published><updated>2010-06-15T06:13:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2010/06/15/1758617.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2010/06/15/1758617.html"/><content type="html">&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="safety_line" border="0" alt="safety_line" src="http://rssimg.mail.qq.com/readpic?key=c0fddfbefce29dfaf96cca1e1e92927f6cdba6c1f625a021&amp;amp;url=http://since1984.cn/blog/wp-content/uploads/2010/02/64ecd28ee431_C14A/safety_line.jpg" width="550" height="382" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;夜间难免会有起身上厕所或是接水喝之类的琐事，开灯费电又刺眼，不开灯磕磕绊绊的又不方便&amp;#8230;&amp;#8230;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="safety_line6" border="0" alt="safety_line6" src="http://rssimg.mail.qq.com/readpic?key=f16d272f2cbd8de566d3c4e6707ea4a048b830a895a1b47a&amp;amp;url=http://since1984.cn/blog/wp-content/uploads/2010/02/64ecd28ee431_C14A/safety_line6.jpg" width="550" height="119" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这款荧光胶带（&lt;a href="http://www.yankodesign.com/2010/06/10/neon-tapelights-are-the-new-glo-friends" target="_blank"&gt;Neon Tape lights&lt;/a&gt;），可以粘贴在家具、楼梯、家电的边缘，或者门把手、冰箱门、水杯等等小件物品上，夜间这些胶带就会发出幽幽的绿光（好像有点恐怖 &amp;#8211; -），勾勒出物品的轮廓，无需开灯即可行动自如。&lt;span id="more-5628"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="safety_line4" border="0" alt="safety_line4" src="http://rssimg.mail.qq.com/readpic?key=350af920310bd35962591ed69303e691e7653ae249adfb5e&amp;amp;url=http://since1984.cn/blog/wp-content/uploads/2010/02/64ecd28ee431_C14A/safety_line4.jpg" width="550" height="378" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/rickiedu/aggbug/1758617.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rickiedu/archive/2010/06/15/1758617.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2010/05/07/1729936.html</id><title type="text">Outlook发信</title><summary type="text">using System;using Microsoft.Office.Interop.Outlook;namespace ConsoleApplication1 { internal class Program2 { private static void Main() { var app = new ApplicationClass(); var mailItemClass = app.Cre...</summary><published>2010-05-07T09:32:00Z</published><updated>2010-05-07T09:32:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2010/05/07/1729936.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2010/05/07/1729936.html"/><content type="html">&lt;p&gt;using System;&lt;br /&gt;using Microsoft.Office.Interop.Outlook;&lt;/p&gt;&#xD;
&lt;p&gt;namespace ConsoleApplication1 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; internal class Program2 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static void Main() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var app = new ApplicationClass();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var mailItemClass = app.CreateItem(OlItemType.olMailItem) as MailItem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailItemClass.To = "&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#114;&amp;#105;&amp;#99;&amp;#107;&amp;#105;&amp;#101;&amp;#46;&amp;#100;&amp;#117;&amp;#64;&amp;#115;&amp;#97;&amp;#112;&amp;#46;&amp;#99;&amp;#111;&amp;#109;" target="_blank"&gt;rickie.du@sap.com&lt;/a&gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailItemClass.Subject = "Send File As Email Attachment";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailItemClass.Attachments.Add("c:\\a.txt", Type.Missing, Type.Missing, Type.Missing);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mailItemClass.Send();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("COOL");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;&lt;img src="http://www.cnblogs.com/rickiedu/aggbug/1729936.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rickiedu/archive/2010/05/07/1729936.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2010/03/10/1682815.html</id><title type="text">ABAP TIPS (1) -- F4检索功能的实现</title><summary type="text">ABAP TIPS (1) -- F4检索功能的实现 为了规范画面输入数据，有的时候需要对自建画面输入项目（不能参照系统项目）附加自检索帮助功能（系统的F4功能）。 此功能的实现，大体上分两部分。第一，可选画面的调用，按下F4后可弹出约定可输入项目的列表；第二，用户选定的值能够返回到输入项目中。 另外，我提供的这个程序事例可自己添加选可选数据，而不仅仅局限于R/3系统内已创建的表数据作为数据源，先...</summary><published>2010-03-10T10:11:00Z</published><updated>2010-03-10T10:11:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2010/03/10/1682815.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2010/03/10/1682815.html"/><content type="html">&lt;h4 id="subjcns!D1714DCFE79754AA!694" &gt;ABAP TIPS (1) -- F4检索功能的实现&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="msgcns!D1714DCFE79754AA!694" &gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为了规范画面输入数据，有的时候需要对自建画面输入项目（不能参照系统项目）附加自检索帮助功能（系统的F4功能）。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 此功能的实现，大体上分两部分。第一，可选画面的调用，按下F4后可弹出约定可输入项目的列表；第二，用户选定的值能够返回到输入项目中。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 另外，我提供的这个程序事例可自己添加选可选数据，而不仅仅局限于R/3系统内已创建的表数据作为数据源，先前在网上寻找能自定义的此类功能，几乎没有，所以我把我后来研究出的这个放到这里，以飨大家：）下面是该功能事例代码，请大家参考，欢迎讨论。&lt;/div&gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div&gt;&amp;nbsp; &#xD;
&lt;table border="0" cellspacing="0" width="100%"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;div&gt;&#xD;
&lt;div style="border-bottom: 3px double; border-left: 3px double; border-top: 3px double; border-right: 3px double"&gt;&lt;pre&gt;************************************************************************&lt;br /&gt;* プログラム　: ZZF4HELP&#xD;
* 名称　　　　: 入力項目選択ヘルプ用サンプル&#xD;
* 機能概要　　: 独自検索ヘルプ.&#xD;
* 作成者　　　: KONGXIANGSHUAI&#xD;
* 作成日　　　: 2005/09/30&#xD;
*----------------------------------------------------------------------*&#xD;
REPORT  ZZF4HELP.&#xD;
&#xD;
* 入力項目選択ヘルプ用&#xD;
TYPES: BEGIN OF TY_VALUES,&#xD;
         VALUE    TYPE SETHEADERT-SETNAME,&#xD;
         DESCRIPT TYPE SETHEADERT-DESCRIPT,&#xD;
       END OF TY_VALUES.&#xD;
&#xD;
CONSTANTS:&#xD;
  CNS_TITLE(8)     TYPE C VALUE 'ソート区分'.   "入力項目選択ヘルプ用タイトル&#xD;
&#xD;
DATA:&#xD;
  IT_VALUES TYPE TABLE OF TY_VALUES,&#xD;
  TW_VALUES LIKE LINE  OF IT_VALUES.&#xD;
DATA:&#xD;
  IT_DYNPFIELDS TYPE TABLE OF DYNPREAD,&#xD;
  TW_DYNPFIELDS LIKE LINE  OF IT_DYNPFIELDS.&#xD;
&#xD;
*----------------------------------------------------------------------*&#xD;
*     パラメータ定義&#xD;
*----------------------------------------------------------------------*&#xD;
* 出力区分定義&#xD;
  PARAMETERS:PA_OUTYP(1) TYPE C OBLIGATORY.&#xD;
&#xD;
*----------------------------------------------------------------------*&#xD;
*    AT SELECTION-SCREEN&#xD;
*----------------------------------------------------------------------*&#xD;
* 入力項目選択ヘルプ用&#xD;
AT SELECTION-SCREEN ON VALUE-REQUEST FOR PA_OUTYP.&#xD;
  PERFORM FRM_F4_HELP_OUTYP.&#xD;
&#xD;
AT SELECTION-SCREEN.&#xD;
* 出力区分のチェック&#xD;
  IF NOT ( PA_OUTYP = '1' OR PA_OUTYP = '2' OR PA_OUTYP = '3' ).&#xD;
    SET CURSOR FIELD 'PA_OUTYP'.&#xD;
    MESSAGE E001(ZFI0) WITH TEXT-M06 PA_OUTYP.&#xD;
  ENDIF.&#xD;
*----------------------------------------------------------------------*&#xD;
*    START-OF-SELECTION&#xD;
*----------------------------------------------------------------------*&#xD;
START-OF-SELECTION.&#xD;
&#xD;
  WRITE: '出力区分:',&#xD;
         PA_OUTYP.&#xD;
&#xD;
*&amp;amp;---------------------------------------------------------------------*&#xD;
*&amp;amp;      Form  FRM_F4_HELP_OUTYP&#xD;
*&amp;amp;---------------------------------------------------------------------*&#xD;
*       出力区分項目の入力選択ヘルプ&#xD;
*----------------------------------------------------------------------*&#xD;
FORM FRM_F4_HELP_OUTYP.&#xD;
&#xD;
  CLEAR: TW_VALUES.&#xD;
  REFRESH: IT_VALUES.&#xD;
&#xD;
  TW_VALUES-VALUE = '1'.&#xD;
  TW_VALUES-DESCRIPT = '社員番号'.&#xD;
  APPEND TW_VALUES TO IT_VALUES.&#xD;
  TW_VALUES-VALUE = '2'.&#xD;
  TW_VALUES-DESCRIPT = '部門番号'.&#xD;
  APPEND TW_VALUES TO IT_VALUES.&#xD;
  TW_VALUES-VALUE = '3'.&#xD;
  TW_VALUES-DESCRIPT = '年齢'.&#xD;
  APPEND TW_VALUES TO IT_VALUES.&#xD;
&#xD;
  PERFORM FRM_F4_HELP USING 'PA_OUTYP'&#xD;
                            CNS_TITLE.&#xD;
&#xD;
ENDFORM.                    " FRM_F4_HELP_OUTYP&#xD;
&#xD;
*&amp;amp;---------------------------------------------------------------------*&#xD;
*&amp;amp;      Form  FRM_F4_HELP&#xD;
*&amp;amp;---------------------------------------------------------------------*&#xD;
*       項目の入力選択ヘルプ&#xD;
*----------------------------------------------------------------------*&#xD;
*   --&amp;gt;  　　P_PARAM          項目名&#xD;
*   --&amp;gt;  　　P_TITLE          タイトル&#xD;
*----------------------------------------------------------------------*&#xD;
FORM FRM_F4_HELP USING P_PARAM&#xD;
                       P_TITLE.&#xD;
&#xD;
  DATA: LIT_DDSHRETVAL TYPE STANDARD TABLE OF DDSHRETVAL,&#xD;
        LTW_DDSHRETVAL LIKE LINE           OF LIT_DDSHRETVAL.&#xD;
&#xD;
  SORT IT_VALUES BY VALUE.&#xD;
&#xD;
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'&#xD;
    EXPORTING&#xD;
      RETFIELD     = 'VALUE'&#xD;
      DYNPPROG     = SY-CPROG&#xD;
      DYNPNR       = SY-DYNNR&#xD;
      WINDOW_TITLE = P_TITLE&#xD;
      VALUE_ORG    = 'S'&#xD;
    TABLES&#xD;
      VALUE_TAB    = IT_VALUES&#xD;
      RETURN_TAB   = LIT_DDSHRETVAL&#xD;
    EXCEPTIONS&#xD;
      PARAMETER_ERROR        = 1&#xD;
      NO_VALUES_FOUND        = 2&#xD;
      OTHERS                 = 3.&#xD;
  IF SY-SUBRC &amp;lt;&amp;gt; 0.&#xD;
    MESSAGE E005(ZCA0) WITH TEXT-M01.        "'値がありません。'&#xD;
  ENDIF.&#xD;
&#xD;
  CLEAR: TW_DYNPFIELDS.&#xD;
  REFRESH: IT_DYNPFIELDS.&#xD;
&#xD;
  READ TABLE LIT_DDSHRETVAL INTO LTW_DDSHRETVAL INDEX 1.&#xD;
      CASE SY-DYNNR.&#xD;
        WHEN '1000'.&#xD;
          TW_DYNPFIELDS-FIELDNAME = P_PARAM.&#xD;
      ENDCASE.&#xD;
      TW_DYNPFIELDS-FIELDVALUE = LTW_DDSHRETVAL-FIELDVAL.&#xD;
  APPEND TW_DYNPFIELDS TO IT_DYNPFIELDS.&#xD;
&#xD;
  CALL FUNCTION 'DYNP_VALUES_UPDATE'&#xD;
  EXPORTING&#xD;
    DYNAME     = SY-CPROG&#xD;
    DYNUMB     = SY-DYNNR&#xD;
  TABLES&#xD;
    DYNPFIELDS = IT_DYNPFIELDS&#xD;
  EXCEPTIONS&#xD;
    OTHERS     = 1.&#xD;
&#xD;
ENDFORM.                    " FRM_F4_HELP&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;&lt;img src="http://storage.msn.com/x1pGg9EMswqL--d97-EdvteeTEdpjTCNzO3b59zE-4IiGi2H554CzrXSQapDAnbEBLv8Fa_ICvf7Q-TrV-IhQWGDNiU6D1h-URzFD0n55P-A8_6LGNjjdMgSNW_fWjFydn9pLs6YrOlX6CzJKY8CBaQ3dnMv4ZeaW-a"  alt="" /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/rickiedu/aggbug/1682815.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rickiedu/archive/2010/03/10/1682815.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2009/11/13/1602593.html</id><title type="text">教菜鸟建个无敌文件夹</title><summary type="text">相信大家都遇到过自己的一些隐私文件不愿意让别人看到的情况吧，怎么解决呢？隐藏起来？换个名字？或者加密？这些办法都可以办到，其实还有一种方法，就是建立一个别人既不能进入又不能删除的文件夹，把自己的隐私文件放进去，别人就看不到啦，下面讲讲如何实现，很简单的。第一步：在运行中输入cmd，回车，打开命令行窗口第二步：在命令行窗口中切换到想要建立文件夹的硬盘分区，如D盘第三步：输入MD123..＼回车，注意...</summary><published>2009-11-13T08:27:00Z</published><updated>2009-11-13T08:27:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2009/11/13/1602593.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2009/11/13/1602593.html"/></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2009/09/10/1564163.html</id><title type="text">Don’t Delete – Just Don’t</title><summary type="text">Don&amp;#8217;t Delete &amp;#8211; Just Don&amp;#8217;tTuesday, September 1st, 2009. After reading Ayende&amp;#8217;s post advocating against &amp;#8220;soft deletes&amp;#8221; I felt that I should add a bit more to the topi...</summary><published>2009-09-10T08:37:00Z</published><updated>2009-09-10T08:37:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2009/09/10/1564163.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2009/09/10/1564163.html"/></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2009/08/26/1554449.html</id><title type="text">[python 3.1]删除指定目录下的bin,obj文件夹</title><summary type="text">[代码]</summary><published>2009-08-26T09:07:00Z</published><updated>2009-08-26T09:07:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2009/08/26/1554449.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2009/08/26/1554449.html"/></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2009/08/19/1550221.html</id><title type="text">Google finance</title><summary type="text">http://www.google.com/finance/info?q=000665 http://stock.finance.qq.com/hqing/hqst/paiminglistsa8.htm</summary><published>2009-08-19T14:44:00Z</published><updated>2009-08-19T14:44:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2009/08/19/1550221.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2009/08/19/1550221.html"/></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2009/08/13/1545012.html</id><title type="text">[转]Webbrowser控件判断网页加载完毕的简单方法</title><summary type="text">@ http://www.blogjava.net/weidagang2046/archive/2007/03/04/101785.html一般情况下，当ReadyState属性变成READYSTATE_COMPLETE时，Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕。但当加载的网页包含frame时，可能会多次触发该事件，所以不能简单地通过它来判断网页...</summary><published>2009-08-13T02:36:00Z</published><updated>2009-08-13T02:36:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2009/08/13/1545012.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2009/08/13/1545012.html"/></entry><entry><id>http://www.cnblogs.com/rickiedu/archive/2009/08/06/1540544.html</id><title type="text">.py to exe</title><summary type="text">1. 当然要先安装环境，点击这里找到py2exe.exe,下载下来安装！注意要找对应于你所安装的python版本。2. 下载GUI2EXE这个文件, 安装之3. 打开Gui2Exe, 配置好文件路径，exe类型等之后点击【Compile】4. 编译后会自动生成build和dist两个文件夹，生成的exe文件在dist文件夹中，build文件夹中是中间文件，现在就没有用了。5. 把dist文件夹ct...</summary><published>2009-08-06T08:51:00Z</published><updated>2009-08-06T08:51:00Z</updated><author><name>飞扬跋扈</name><uri>http://www.cnblogs.com/rickiedu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rickiedu/archive/2009/08/06/1540544.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rickiedu/archive/2009/08/06/1540544.html"/></entry></feed>
