<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>Projects</title><link>http://blogs.vbcity.com/hotdog/category/32.aspx</link><description>Some samples to get specific things done</description><managingEditor>Robert Verpalen</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Robert Verpalen</dc:creator><title>Grouping a datagridview: the DataGridViewGrouper component</title><link>http://blogs.vbcity.com/hotdog/archive/2008/12/19/9226.aspx</link><pubDate>Fri, 19 Dec 2008 06:56:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2008/12/19/9226.aspx</guid><wfw:comment>http://blogs.vbcity.com/hotdog/comments/9226.aspx</wfw:comment><comments>http://blogs.vbcity.com/hotdog/archive/2008/12/19/9226.aspx#Feedback</comments><slash:comments>85</slash:comments><wfw:commentRss>http://blogs.vbcity.com/hotdog/comments/commentRss/9226.aspx</wfw:commentRss><trackback:ping>http://blogs.vbcity.com/hotdog/services/trackbacks/9226.aspx</trackback:ping><description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;Complete Source Code: &lt;/FONT&gt;&lt;/STRONG&gt;&lt;A href="http://blogs.vbcity.com/hotdog/archive/2008/12/19/9225.aspx"&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;http://blogs.vbcity.com/hotdog/archive/2008/12/19/9225.aspx&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
Note: the code is now rewritten to be 2.0 compatible (the project was written in vs2008 with compatibility set on framework 2.0), but older designers may still have trouble compiling because of the use of newer syntax (such as automatic properties). All 'var' keywords should be replaced, but they tend to sneak in because they are so easy to use ;)&lt;BR&gt;If the newer syntax is a problem for many of you, drop me a note and I'll try to remove all of those syntaxes too.
&lt;HR id=null&gt;
&lt;BR&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;:&lt;BR&gt;Assuming you have a form with a datagridview called dataGridView1, add this code (after setting its datasource): &lt;!-- --Start of code block
--&gt;
&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 1px solid; BORDER-TOP: #000080 1px solid; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 1px solid; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 1px solid"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 1px solid; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'125pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" selcount="3" selold="2" sel="2"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; grouper = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; Subro.Controls.&lt;FONT color=#2b91af&gt;DataGridViewGrouper&lt;/FONT&gt;(dataGridView1);&lt;BR&gt;grouper.SetGroupOn(&lt;FONT color=#a31515&gt;"NameOfThePropertyToGroupOn"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =2;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Functionality&lt;/STRONG&gt;:&lt;BR&gt;The DataGridViewGrouper is a component that can be added in the forms designer or in runtime to add grouping to any existing (databound) DataGridView. Grouping can be done on existing properties of the underlying data or with a custom value function. The displayed data can be altered through the exposed Display event.&lt;BR&gt;Grouped rows can be quickly selected by double clicking the group header, and the rows can be collapsed and expanded by the user. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Usage&lt;/STRONG&gt;:&lt;BR&gt;3&amp;nbsp;simple steps&lt;BR&gt;- Add the component to the designer or create it in runtime&lt;BR&gt;-&amp;nbsp;Set its DataGridView property to&amp;nbsp;any existing databound DataGridView &lt;BR&gt;-In runtime set the GroupOn property or call any of the SetGroupOn methods to start grouping&lt;/P&gt;
&lt;P&gt;Other settings include &lt;BR&gt;-the sorting of the groups (asc,desc or none, using the lists original sources order as leading)&lt;BR&gt;-if the count of rows has to be shown (the shown information can be altered by catching the Display event)&lt;BR&gt;-if the property name on which is grouped has to be shown (can also be altered by the Display event)&lt;BR&gt;-besides the options above, the shown group value can also be altered in the Display event.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Background&lt;/STRONG&gt;:&lt;BR&gt;For a while now I was facing a request to add grouping to an overview in a DataGridView. And as you may have noticed: there is no grouping functionality in the default System.Windows.Forms.DataGridView.&lt;BR&gt;Now there are ways of course, by adding DataGridViewRows manually and creating the groups by adding rows, but that would screw up the underlying data binding and automatic buffering/formatting/filtering/sorting, etc. Wanted to keep the bound functionality intact, but still create group rows. The solution in itself is simply to create a wrapper source that includes those rows and the grouped rows underneath and asign that to the grid, leaving the original source unaltered, and override the grouping rows painting/editing. A theory simple enough in itself, of course the implementation was a bit more work, but still less difficult than expected. &lt;BR&gt;The grouping source was created easily enough, especially with the great functionality of Linq. The trick was in seperating what the grid saw from the underlying functionality. By inheriting from BindingSource all tools were available for that job.&amp;nbsp;The DataSource and DataMember properties are set&amp;nbsp;by the original values of the same properties in the Grid, therefor exposing the proper 'Columns'.&amp;nbsp;All adding and removing had to be done in the underlying datagrid source, so those values were overridden.&lt;BR&gt;The DataGridViewGrouper component itself is assigned to a grid and the Source of the grid itself is set to the grouped source. When a group row has to be painted, it is handled by the component, the other rows follow the default behaviour. Editing for a grouprow is simply cancelled. If the original source is a BindingSource, the source's positioning is synchronized.&lt;BR&gt;Note that the index of the datagridview row won't be the same as the index in the original source, so you shouldn't be getting an object out of the original source directly with the row index. Then again, you should never do that anyway ;)&amp;nbsp; Use the Grid.Rows[position].DataBoundItem property instead.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.vbcity.com/hotdog/archive/2008/12/19/9225.aspx"&gt;Source Code&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;TODO: &lt;BR&gt;* Now the component synchronizes navigation if the source is another BindingSource. Will look later to synchronize with any CurrencyManager.&lt;BR&gt;* Adding code comments&amp;nbsp;:p&lt;/P&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/9226.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>Feedback visualizer</title><link>http://blogs.vbcity.com/hotdog/archive/2008/02/22/8984.aspx</link><pubDate>Fri, 22 Feb 2008 03:54:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2008/02/22/8984.aspx</guid><wfw:comment>http://blogs.vbcity.com/hotdog/comments/8984.aspx</wfw:comment><comments>http://blogs.vbcity.com/hotdog/archive/2008/02/22/8984.aspx#Feedback</comments><slash:comments>97</slash:comments><wfw:commentRss>http://blogs.vbcity.com/hotdog/comments/commentRss/8984.aspx</wfw:commentRss><trackback:ping>http://blogs.vbcity.com/hotdog/services/trackbacks/8984.aspx</trackback:ping><description>&lt;P&gt;&lt;STRONG&gt;Source Code:&lt;/STRONG&gt; &lt;A href="http://blogs.vbcity.com/hotdog/archive/2008/02/22/8983.aspx"&gt;http://blogs.vbcity.com/hotdog/archive/2008/02/22/8983.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Many times I've found it useful to have a process give feedback information to find out if everything was performing as wanted. And also one should be able to visualize, save and/or mail that information if wanted. Often you only want to show the information under certain conditions (an error occured, but you want to show the entire feedback) &lt;BR&gt;The classes contained here: &lt;A href="http://blogs.vbcity.com/hotdog/archive/2008/02/22/8983.aspx"&gt;http://blogs.vbcity.com/hotdog/archive/2008/02/22/8983.aspx&lt;/A&gt;&amp;nbsp;, provides that generic functionality. An example on how to use can be found at the bottom.&lt;/P&gt;
&lt;P&gt;The main collection is contained in a FeedbackCollection class instance. Each individual Feedback item in that collection can in turn contain a subcollection of children.&lt;BR&gt;Screenshots will follow later when I've retrieved the password to the ftp site :p&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;PS, this text is a bit incomplete since I'm slightly cross because the original text, which was a lot more elaborate than this bit, was lost when I thought to simply be able to press 'post' upon which all my work was lost because apparently I wasn't logged in any more (and no, it did not restore...). And almost always I copy first, except now ;)&amp;nbsp; But will add some more info later on.&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/8984.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>Feedback (visualizer) sourcecode</title><link>http://blogs.vbcity.com/hotdog/archive/2008/02/22/8983.aspx</link><pubDate>Fri, 22 Feb 2008 01:09:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2008/02/22/8983.aspx</guid><wfw:comment>http://blogs.vbcity.com/hotdog/comments/8983.aspx</wfw:comment><comments>http://blogs.vbcity.com/hotdog/archive/2008/02/22/8983.aspx#Feedback</comments><slash:comments>77</slash:comments><wfw:commentRss>http://blogs.vbcity.com/hotdog/comments/commentRss/8983.aspx</wfw:commentRss><trackback:ping>http://blogs.vbcity.com/hotdog/services/trackbacks/8983.aspx</trackback:ping><description>&lt;!-- --Start of code block
--&gt;&lt;DIV Style=" Border='1px #000080 solid'; Margin-Left=10pt; Margin-Right=2pt;" OnKeyDown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;&amp; i&lt;ch.selcount){ch.sel=i;ch.click();}"&gt;&lt;DIV Style=" Font-Size=9pt; Font-Family='Microsoft Sans Serif'; Border-Bottom='1px #000080 solid';" OnClick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'500pt':null;if(i==1&amp;&amp; ch.offsetHeight&gt;h)ch.style.height=h;" sel=1 selold=1 selcount=3&gt;&lt;b&gt;  Code &lt;/b&gt;&lt;a href="javascript:" Style=" Margin-Left=10pt; Margin-Right=10pt;" OnClick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');"&gt;Copy&lt;/a&gt;&lt;SPAN Style=" Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=0"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();"&gt;Hide&lt;/SPAN&gt;&lt;SPAN Style=" Font-Weight=bolder; Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=1"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();" Checked=True&gt;Scroll&lt;/SPAN&gt;&lt;SPAN Style=" Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=2"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();"&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;&lt;DIV Style=" BackGround-Color=#dcdcdc; overflow='auto'; Height=500pt;"&gt;&lt;FONT Color=#0000ff&gt;using&lt;/FONT&gt; System;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Collections;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Collections.Generic;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Drawing;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Text;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Windows.Forms;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.ComponentModel;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.IO;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; Subro.Exceptions;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;namespace&lt;/FONT&gt; Subro.Interaction&lt;br&gt;{&lt;FONT Color=#808080&gt;&lt;div style="margin-left:20pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; A single feedback item. A feedback item can provide information&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; on status, progress and datetimes of execution&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; Feedback(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Message):&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.message = Message;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; Feedback()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.lastupdate = &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;.DateTime;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The time the feedback object was created&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt; DateTime = &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt;.Now;&lt;FONT Color=#2b91af&gt;&lt;br&gt;DateTime&lt;/FONT&gt; lastupdate;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The last time the Feedback was updated (for example by updating the progress)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt; LastUpdate&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; lastupdate; }&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; SetLastUpdate()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;lastupdate = &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt;.Now;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The main information of this feedback&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;string&lt;/FONT&gt; message;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Message&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; message; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;message = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;NotifyUpdate();&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;int&lt;/FONT&gt; progress;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The progress of this item. The total progress is in relation&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; to the the value set at &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotProgressTarget&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltseealso cref=&amp;quotProgressTarget&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotProgressPercentage&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Progress&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; progress; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;progress = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;IsProgressUpdate = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;NotifyUpdate();&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt; Updated;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; NotifyUpdate()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetLastUpdate();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Updated != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;Updated(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;int&lt;/FONT&gt; progresstarget = 100;&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; progressinpercentage = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Normal target of process is 100 as in 100 percent. Whatever value this&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; is set to, progress relates to it.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; For example: if looping through a number of lines,&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; you can set this target to the number of lines and &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotProgress&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; to&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; the line being processed&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; ProgressTarget&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; progresstarget; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;progresstarget = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;progressinpercentage = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;br&gt;NotifyUpdate();&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The relative progress of this item.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;float&lt;/FONT&gt; ProgressPercentage&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (!IsProgressUpdate) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; 1;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;float&lt;/FONT&gt;)progress / progresstarget;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; GetProgressString()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (progressinpercentage)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; ProgressPercentage.ToString(&lt;FONT Color=#a31515&gt;&amp;quot###%&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; progress.ToString() + &lt;FONT Color=#a31515&gt;&amp;quot/&amp;quot&lt;/FONT&gt; + progresstarget.ToString();&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Increase the &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotProgress&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; by one&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Increase()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Progress++;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ShowAlive()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;IsAliveIndicator = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsProgressUpdate = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; alivecount;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; AliveCount { &lt;FONT Color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; alivecount; } }&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsAliveIndicator&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; alivecount &amp;gt 0; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (++alivecount == 0)&lt;div style="margin-left:20pt"&gt;alivecount++;&lt;/div&gt;NotifyUpdate();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;alivecount = 0;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; ToString()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;.Format(&lt;FONT Color=#a31515&gt;&amp;quot{0}\t{1}&amp;quot&lt;/FONT&gt;, DateTime, message);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The level, this can be a custom level or set with &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedbackLevel&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; 0 = normal&amp;nbsp&amp;nbspnegative value is not so important, positive value is more important&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Level = (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt;.Normal;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt; FeedbackLevel&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; (&lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt;)Level;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;catch&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt;.Custom;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Level = (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsNormalLevel { &lt;FONT Color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; Level == (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt;.Normal; } }&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; CanShowExtraInfo&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; HasChildren; }&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ShowExtraInfo()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;ShowExtraInfo(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ShowExtraInfo(&lt;FONT Color=#2b91af&gt;IWin32Window&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;children.Show(Owner);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; AppendExtraInfo(&lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt; info)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;children.AppendFeedbackText(info);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemPainter&lt;/FONT&gt; GetPainter(&lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt; info)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemPainter&lt;/FONT&gt;(info);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;internal&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; AppendInfo(&lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt; info,&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; RowNumber)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;var&lt;/FONT&gt; sb = info.StringBuilder;&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltDIV&amp;gt&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; bold = Level &amp;gt 0, smaller = Level &amp;lt 0;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (bold) sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltB&amp;gt&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;if&lt;/FONT&gt; (smaller) sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltspan style='font-size:smaller'&amp;gt&amp;quot&lt;/FONT&gt;);&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltspan style='font-size:smaller;font-style:italic;'&amp;gt&amp;quot&lt;/FONT&gt;).Append(DateTime)&lt;div style="margin-left:20pt"&gt;.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/span&amp;gt&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;if&lt;/FONT&gt; (IsProgressUpdate)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;int&lt;/FONT&gt; p = (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;)(ProgressPercentage * 100);&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;@&amp;quot&amp;ltspan style=&amp;quot&amp;quotborder:'1 solid black';width:75px;margin-left:10;font-size:smaller&amp;quot&amp;quot&amp;gt&amp;quot&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt; .Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltspan style='position:absolute;width:&amp;quot&lt;/FONT&gt;)&lt;br&gt; .Append(p)&lt;br&gt;.Append(&lt;FONT Color=#a31515&gt;&amp;quot%;background-color:green'&amp;gt&amp;lt/span&amp;gt&amp;quot&lt;/FONT&gt;)&lt;br&gt;.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltspan style='position:relative;width:100%'&amp;gt&amp;quot&lt;/FONT&gt;)&lt;br&gt;.Append(GetProgressString()).Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/span&amp;gt&amp;quot&lt;/FONT&gt;)&lt;br&gt;.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/span&amp;gt&amp;quot&lt;/FONT&gt;);&lt;/div&gt;&lt;/div&gt;}&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltspan style='margin-left:10'&amp;gt&amp;quot&lt;/FONT&gt;).Append(message)&lt;div style="margin-left:20pt"&gt;.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/span&amp;gt&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;if&lt;/FONT&gt; (CanShowExtraInfo)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt; ExtraInfoAnchor = &lt;FONT Color=#a31515&gt;&amp;quotExtraInfo&amp;quot&lt;/FONT&gt; + RowNumber.ToString();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (info.AllowScripts)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;sb.Append(&lt;FONT Color=#a31515&gt;@&amp;quot&amp;ltA style='margin-left:5' href='javascript:' onclick=&amp;quot&amp;quot&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;this.index=1-this.index;&lt;br&gt;var&lt;div style="margin-left:20pt"&gt;index = this.index,&lt;br&gt;modes=new Array('none',''),&lt;br&gt;texts=new Array('Show details','Hide details');&lt;/div&gt;this.nextSibling.style.display=modes[index];&lt;br&gt;this.innerText=texts[index];&amp;quot&amp;quot&lt;br&gt;index=1&amp;gtHide details&amp;lt/A&amp;gt&amp;quot&lt;/FONT&gt;);&lt;div style="margin-left:80pt"&gt;}&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltdiv style='margin-left:20;background-color:lightblue;'&amp;gt&amp;quot&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lta name='&amp;quot&lt;/FONT&gt;).Append(ExtraInfoAnchor).Append(&lt;FONT Color=#a31515&gt;&amp;quot'&amp;gt&amp;lt/a&amp;gt&amp;quot&lt;/FONT&gt;);&lt;/div&gt;AppendExtraInfo(info);&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/div&amp;gt&amp;quot&lt;/FONT&gt;);&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (bold) sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/B&amp;gt&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;if&lt;/FONT&gt; (smaller) sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/span&amp;gt&amp;quot&lt;/FONT&gt;);&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/DIV&amp;gt&amp;quot&lt;/FONT&gt;);&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:40pt"&gt;FeedbackCollection&lt;/FONT&gt; children;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Use this colleciton to add children. NB calling this function the first time will&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; create the collection&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; Children&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (children == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;children = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt;();&lt;br&gt;children.Parent = &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; children;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; HasChildren&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; children != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp children.Count &amp;gt 0; }&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#region&lt;/FONT&gt; static&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#region&lt;/FONT&gt; mail&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;delegate&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;SendMailDelegate&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Subject, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Body, &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsHTML);&lt;FONT Color=#0000ff&gt;&lt;br&gt;static&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;SendMailDelegate&lt;/FONT&gt; sendmail = &lt;FONT Color=#0000ff&gt;delegate&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Subject, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Body, &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsHTML)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;System.Net.Mail.&lt;FONT Color=#2b91af&gt;MailMessage&lt;/FONT&gt; sm = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; System.Net.Mail.&lt;FONT Color=#2b91af&gt;MailMessage&lt;/FONT&gt;();&lt;br&gt;sm.IsBodyHtml = IsHTML;&lt;br&gt;sm.Body = Body;&lt;br&gt;sm.Subject = Subject;&lt;br&gt;System.Net.Mail.&lt;FONT Color=#2b91af&gt;SmtpClient&lt;/FONT&gt; smtp = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; System.Net.Mail.&lt;FONT Color=#2b91af&gt;SmtpClient&lt;/FONT&gt;();&lt;br&gt;smtp.Send(sm);&lt;/div&gt;};&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;SendMailDelegate&lt;/FONT&gt; DefaultSendMailMethod&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; sendmail; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ArgumentNullException&lt;/FONT&gt;();&lt;/div&gt;sendmail = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#endregion&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;#region&lt;/FONT&gt; Exceptions&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;delegate&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ShowExceptionDelegate&lt;/FONT&gt;(&lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt; ex);&lt;FONT Color=#0000ff&gt;&lt;br&gt;static&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ShowExceptionDelegate&lt;/FONT&gt; showex =&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;delegate&lt;/FONT&gt;(&lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt; m = ex.Message + &lt;FONT Color=#a31515&gt;&amp;quot\r\n----------------\r\nStack:\r\n&amp;quot&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;+ ex.StackTrace;&lt;FONT Color=#2b91af&gt;&lt;/div&gt;MessageBox&lt;/FONT&gt;.Show(m);&lt;/div&gt;};&lt;FONT Color=#0000ff&gt;&lt;/div&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ShowExceptionDelegate&lt;/FONT&gt; DefaultShowExceptionMethod&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; showex; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ArgumentNullException&lt;/FONT&gt;();&lt;br&gt;showex = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;} &lt;FONT Color=#0000ff&gt;&lt;br&gt;#endregion&lt;/div&gt;&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;implicit&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;operator&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; value)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;(value);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#endregion&lt;/FONT&gt;&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:20pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; General settings when the text of feedback is obtained.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltseealso cref=&amp;quotFeedbackCollection.GetTotalFeedbackText&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedback.AppendInfo&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; AppendInfoSettings():&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;StringBuilder&lt;/FONT&gt;())&lt;br&gt;{&lt;br&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; AppendInfoSettings(&lt;FONT Color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.StringBuilder = sb;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;StringBuilder&lt;/FONT&gt; StringBuilder;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowScripts;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; MaxLines;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt; Append(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Value)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;StringBuilder.Append(Value);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt; Append&amp;ltT&amp;gt(T Value)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;StringBuilder.Append(Value);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:20pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; A collection of &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedback&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; items. Besides being a collection&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; for different Feedback items, this class contains the methods to&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; visualize the feedback&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;BindingList&lt;/FONT&gt;&amp;lt&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&amp;gt&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; FeedbackCollection() { }&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FeedbackCollection(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; MaximumValues)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;maxcount = MaximumValues;&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; This value can be set to indicate that this set is a childset of &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; another Feedback item&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Parent;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#region&lt;/FONT&gt; Add/Update&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; InsertItem(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; index, &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;base&lt;/FONT&gt;.InsertItem(index, fb); &lt;br&gt;CheckMaxValues();&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnListChanged(&lt;FONT Color=#2b91af&gt;ListChangedEventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;base&lt;/FONT&gt;.OnListChanged(e);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Parent != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;Parent.NotifyUpdate();&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Add(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Text)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Feedback&lt;/FONT&gt; fb = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;(Text);&lt;br&gt;Add(fb);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; fb;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Add(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Text, &lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt; Level)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Feedback&lt;/FONT&gt; fb = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;(Text);&lt;br&gt;fb.FeedbackLevel = Level;&lt;br&gt;Add(fb);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; fb;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Add(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb, &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Progress)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;fb.Progress = Progress;&lt;br&gt;Add(fb);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ExceptionFeedback&lt;/FONT&gt; Add(&lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;ExceptionFeedback&lt;/FONT&gt; ef = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ExceptionFeedback&lt;/FONT&gt;(ex);&lt;br&gt;Add(ef);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; ef;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#endregion&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;#region&lt;/FONT&gt; Zero result&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; By default this value is &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltc&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;false&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/c&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;, but the executing (batch) code&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; can set this value to indicate that all in all nothing has happened.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; (eg, code to import file did not find a file)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; To include a reason, use &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotSetZeroResult&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; ZeroResult&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; lastzeroresult != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (ZeroResult != &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;SetZeroResult(&lt;FONT Color=#a31515&gt;&amp;quotNo reason specified&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;LastZeroResult = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:40pt"&gt;ZeroResultFeedback&lt;/FONT&gt; lastzeroresult;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;internal&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ZeroResultFeedback&lt;/FONT&gt; LastZeroResult&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; lastzeroresult;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (lastzeroresult == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#008000&gt;&lt;br&gt;/*&lt;br&gt;if (Parent != null)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;if (value != null)&lt;div style="margin-left:20pt"&gt;Parent.LastZeroResult = value;&lt;/div&gt;else if (Parent.lastzeroresult == lastzeroresult)&lt;div style="margin-left:20pt"&gt;Parent.LastZeroResult = null;&lt;/div&gt;&lt;/div&gt;}*/&lt;/FONT&gt;&lt;br&gt;lastzeroresult = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ZeroResultFeedback&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Reason;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; ZeroResultFeedback(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; reason)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;(&lt;FONT Color=#a31515&gt;&amp;quotBatch has zero result: [&amp;quot&lt;/FONT&gt; + reason + &lt;FONT Color=#a31515&gt;&amp;quot]&amp;quot&lt;/FONT&gt;)&lt;/div&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.FeedbackLevel = &lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt;.Important;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Reason = reason;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The reason that was indicated that the code where this feedback&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; was used with did not actually do anything.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; This value can be set when using &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotSetZeroResult&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; ZeroResultReason&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (ZeroResult) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; lastzeroresult.Reason;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; SetZeroResult(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; reason)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;ZeroResultFeedback&lt;/FONT&gt; fb = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ZeroResultFeedback&lt;/FONT&gt;(reason);&lt;br&gt;Add(fb);&lt;br&gt;LastZeroResult = fb;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;#endregion&lt;/div&gt;&lt;br&gt;&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Last&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;[Count - 1];&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt; StartTime&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Count == 0) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt;.MinValue;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;[0].DateTime;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt; EndTime&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Count == 0) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt;.MinValue;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; Last.LastUpdate;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;TimeSpan&lt;/FONT&gt; Duration&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; EndTime.Subtract(StartTime); }&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; maxcount;&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The maximum amount of entries allowed&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; MaximumValues&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; maxcount; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;maxcount = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;CheckMaxValues();&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; CheckMaxValues()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (maxcount &amp;gt 0)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;while&lt;/FONT&gt; (Count &amp;gt maxcount)&lt;div style="margin-left:20pt"&gt;RemoveAt(0);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#region&lt;/FONT&gt; Save/Mail&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Description is used when saving or mailing the list, so&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; this should contain information about the contents&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Description = &lt;FONT Color=#a31515&gt;&amp;quotFeedback list&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Save()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt; file = &lt;FONT Color=#2b91af&gt;Application&lt;/FONT&gt;.CommonAppDataPath + &lt;FONT Color=#a31515&gt;@&amp;quot\Feedback\&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (!&lt;FONT Color=#2b91af&gt;Directory&lt;/FONT&gt;.Exists(file)) &lt;FONT Color=#2b91af&gt;Directory&lt;/FONT&gt;.CreateDirectory(file);&lt;FONT Color=#0000ff&gt;&lt;br&gt;string&lt;/FONT&gt; notallowed = &lt;FONT Color=#a31515&gt;&amp;quot /\\&amp;quot&lt;/FONT&gt;, descr = Description;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (descr != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;for&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt notallowed.Length; i++)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;descr = descr.Replace(notallowed[i], &lt;FONT Color=#a31515&gt;'_'&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;descr = &lt;FONT Color=#a31515&gt;&amp;quotfeedback&amp;quot&lt;/FONT&gt;;&lt;/div&gt;file += descr + &lt;FONT Color=#a31515&gt;&amp;quot.htm&amp;quot&lt;/FONT&gt;;&lt;br&gt;Save(file);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; file;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Save(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; file)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;lock&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;StreamWriter&lt;/FONT&gt; sw = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;StreamWriter&lt;/FONT&gt;(file, &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;, System.Text.&lt;FONT Color=#2b91af&gt;Encoding&lt;/FONT&gt;.ASCII);&lt;br&gt;sw.Write(GetTotalFeedBackText());&lt;br&gt;sw.Close();&lt;br&gt;Add(&lt;FONT Color=#a31515&gt;&amp;quotList saved to &amp;quot&lt;/FONT&gt; + file);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Mail()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Mail(&lt;div style="margin-left:20pt"&gt;(ZeroResult&lt;br&gt;? &lt;FONT Color=#a31515&gt;&amp;quotZero result &amp;quot&lt;/FONT&gt;&lt;br&gt;: &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;+ &lt;FONT Color=#a31515&gt;&amp;quotBatch Feedback '&amp;quot&lt;/FONT&gt; + Description + &lt;FONT Color=#a31515&gt;&amp;quot'&amp;quot&lt;/FONT&gt;);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Mail(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Subject)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Feedback&lt;/FONT&gt;.DefaultSendMailMethod(Subject,GetTotalFeedBackText(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;),&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; MailExceptions()&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Feedback&lt;/FONT&gt;.DefaultSendMailMethod(&lt;FONT Color=#a31515&gt;&amp;quotErrors in &amp;quot&lt;/FONT&gt; + Description,&lt;div style="margin-left:20pt"&gt;AppendFeedbackText(&lt;FONT Color=#0000ff&gt;&lt;br&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt;(),EnumerateAll&amp;lt&lt;FONT Color=#2b91af&gt;ExceptionFeedback&lt;/FONT&gt;&amp;gt(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;)).ToString(),&lt;FONT Color=#0000ff&gt;&lt;br&gt;true&lt;/FONT&gt;&lt;br&gt;);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; GetTotalFeedBackText()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetTotalFeedBackText(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; GetTotalFeedBackText(&lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowScripts)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; AppendFeedbackText(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt; { AllowScripts=AllowScripts}).ToString();&lt;/div&gt;}&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; HasExceptions()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (fb.FeedbackLevel== &lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt;.Exception) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (fb.HasChildren &amp;amp&amp;amp fb.Children.HasExceptions())&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&amp;gt EnumerateAll&amp;ltFeedbackType&amp;gt()&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;where&lt;/FONT&gt; FeedbackType : &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&lt;/div&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; EnumerateAll&amp;ltFeedbackType&amp;gt(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&amp;gt EnumerateAll&amp;ltFeedbackType&amp;gt(&lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IncludeChildren)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;where&lt;/FONT&gt; FeedbackType : &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&lt;/div&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (fb &lt;FONT Color=#0000ff&gt;is&lt;/FONT&gt; FeedbackType) &lt;FONT Color=#0000ff&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; fb;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (IncludeChildren &amp;amp&amp;amp fb.HasChildren)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;foreach&lt;/FONT&gt; (FeedbackType f &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; fb.Children.EnumerateAll&amp;ltFeedbackType&amp;gt(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;))&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; f;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;StringBuilder&lt;/FONT&gt; AppendFeedbackText(&lt;FONT Color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowScripts)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; AppendFeedbackText(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt;(sb) { AllowScripts = AllowScripts });&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;StringBuilder&lt;/FONT&gt; AppendFeedbackText(&lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt; info)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; AppendFeedbackText(info, &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;StringBuilder&lt;/FONT&gt; AppendFeedbackText(&lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt; info, &lt;FONT Color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&amp;gt list)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;var&lt;/FONT&gt; sb = info.StringBuilder;&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltDIV style=\&amp;quotborder='1px black solid'\&amp;quot&amp;gt&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Parent == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot\tFeedback &amp;quot&lt;/FONT&gt;)&lt;br&gt;.Append(Description)&lt;br&gt;.Append(&lt;FONT Color=#a31515&gt;&amp;quot. Info created on &amp;quot&lt;/FONT&gt;).Append(&lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt;.Now);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (ZeroResult)&lt;div style="margin-left:20pt"&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltdiv style=\&amp;quotborder:'1 solid black';background-color:cyan\&amp;quot&amp;gt&amp;ltb&amp;gtFinished with zero result: &amp;lt/b&amp;gt&amp;quot&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;.Append(ZeroResultReason)&lt;br&gt;.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/div&amp;gt&amp;quot&lt;/FONT&gt;);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;ltHR&amp;gt&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;br&gt;int&lt;/FONT&gt; i = 0;&lt;FONT Color=#0000ff&gt;&lt;br&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; list)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;fb.AppendInfo(info, i++);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (info.MaxLines &amp;gt 0 &amp;amp&amp;amp i == info.MaxLines) &lt;FONT Color=#0000ff&gt;break&lt;/FONT&gt;;&lt;/div&gt;}&lt;br&gt;sb.Append(&lt;FONT Color=#a31515&gt;&amp;quot&amp;lt/DIV&amp;gt&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; sb;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ShowHTML()&lt;br&gt;{&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (System.Threading.&lt;FONT Color=#2b91af&gt;Thread&lt;/FONT&gt;.CurrentThread.GetApartmentState() == System.Threading.&lt;FONT Color=#2b91af&gt;ApartmentState&lt;/FONT&gt;.STA)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Form&lt;/FONT&gt; f = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Form&lt;/FONT&gt;();&lt;FONT Color=#2b91af&gt;&lt;br&gt;WebBrowser&lt;/FONT&gt; wb = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;WebBrowser&lt;/FONT&gt;();&lt;br&gt;wb.Dock = &lt;FONT Color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;br&gt;f.Controls.Add(wb);&lt;br&gt;wb.DocumentText = GetTotalFeedBackText();&lt;br&gt;f.WindowState = &lt;FONT Color=#2b91af&gt;FormWindowState&lt;/FONT&gt;.Maximized;&lt;br&gt;f.Show();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//Unfortunately, using the webbrowser requires an STA &lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//if this is not the case of the current thread, save and show with explorer&lt;/FONT&gt;&lt;br&gt;System.Diagnostics.&lt;FONT Color=#2b91af&gt;Process&lt;/FONT&gt;.Start(Save());&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;#endregion&lt;/div&gt;&lt;br&gt;&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Creates a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedbackForm&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; with a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedbackControl&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; and shows it or&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; shows an existing form if it was already created&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt; Show()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; Show((&lt;FONT Color=#2b91af&gt;IWin32Window&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt; Show(&lt;FONT Color=#2b91af&gt;IWin32Window&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Owner &lt;FONT Color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Control&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; Show(Owner &lt;FONT Color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Control&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;if&lt;/FONT&gt; (frm == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;CreateFeedbackForm();&lt;br&gt;frm.Show(Owner);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;frm.Activate();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; frm;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;delegate&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;show&lt;/FONT&gt;(&lt;FONT Color=#2b91af&gt;Control&lt;/FONT&gt; owner);&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt; Show(&lt;FONT Color=#2b91af&gt;Control&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Owner == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; Show();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Owner.InvokeRequired)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; (&lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;Owner.Invoke(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;show&lt;/FONT&gt;(Show), Owner);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;&lt;/div&gt;if&lt;/FONT&gt; (frm == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;CreateFeedbackForm(Owner);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:80pt"&gt;Form&lt;/FONT&gt; f = Owner.FindForm();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (f != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (f.IsMdiContainer)&lt;div style="margin-left:20pt"&gt;frm.MdiParent = f;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;if&lt;/FONT&gt; (f.IsMdiChild)&lt;div style="margin-left:20pt"&gt;frm.MdiParent = f.MdiParent;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:80pt"&gt;if&lt;/FONT&gt; (frm.MdiParent == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;frm.Show(Owner);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;frm.Show();&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;frm.Activate();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; frm;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;FONT Color=#2b91af&gt;&lt;br&gt;FeedbackForm&lt;/FONT&gt; frm;&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ShowDialog()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;ShowDialog(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ShowDialog(&lt;FONT Color=#2b91af&gt;IWin32Window&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;CreateFeedbackForm().ShowDialog(Owner);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; creates a feedbackform based on this collection&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt; CreateFeedbackForm()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;createForm();&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; frm;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; createForm()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (frm == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;frm = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; This overload of &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotCreateFeedbackForm()&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; makes sure&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; the &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedbackForm&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; is created on the same thread&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; as the &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltc&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;ThreadControl&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/c&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt; CreateFeedbackForm(&lt;FONT Color=#2b91af&gt;Control&lt;/FONT&gt; ThreadControl)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (ThreadControl == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; || !ThreadControl.InvokeRequired)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; CreateFeedbackForm();&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;CloseFeedbackForm();&lt;br&gt;ThreadControl.Invoke(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; System.Threading.&lt;FONT Color=#2b91af&gt;ThreadStart&lt;/FONT&gt;(createForm));&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; frm;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedbackForm&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; is shown, this method will close it&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; CloseFeedbackForm()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (frm != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (frm.InvokeRequired)&lt;div style="margin-left:20pt"&gt;frm.Invoke(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; System.Threading.&lt;FONT Color=#2b91af&gt;ThreadStart&lt;/FONT&gt;(frm.Dispose));&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;frm.Dispose();&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;catch&lt;/FONT&gt; { }&lt;br&gt;frm = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#008000&gt;&lt;br&gt;/*&lt;div style="margin-left:60pt"&gt;internal void FormClosed()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;frm = null;&lt;/div&gt;}&lt;/div&gt; * */&lt;/FONT&gt;&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Basically just a form with a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedbackControl&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackForm&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;Form&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;FeedbackControl&lt;/FONT&gt; fc = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackControl&lt;/FONT&gt;();&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FeedbackForm()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Text = DefaultText;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;br&gt;KeyPreview = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;br&gt;fc.CollectionChanged += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(fc_CollectionChanged);&lt;br&gt;fc.Dock = &lt;FONT Color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;br&gt;Controls.Add(fc);&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; FeedbackForm(&lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; collection)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;()&lt;/div&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Collection = collection;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Add(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; fc.Add(fb);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; Collection&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; fc.Collection; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt; { fc.Collection = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; fc_CollectionChanged(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetText();&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;const&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; DefaultText = &lt;FONT Color=#a31515&gt;&amp;quotFeedback information&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; SetText()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt; text = DefaultText;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt;(Collection!=&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp Collection.Description!=&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;text = &lt;FONT Color=#a31515&gt;&amp;quot[&amp;quot&lt;/FONT&gt; + Collection.Description + &lt;FONT Color=#a31515&gt;&amp;quot] &amp;quot&lt;/FONT&gt; + text;&lt;/div&gt;Text = text;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Size&lt;/FONT&gt; DefaultFormSize = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Size&lt;/FONT&gt;(300, 300);&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Size&lt;/FONT&gt; DefaultSize&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; DefaultFormSize;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnKeyDown(&lt;FONT Color=#2b91af&gt;KeyEventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (e.KeyCode == &lt;FONT Color=#2b91af&gt;Keys&lt;/FONT&gt;.Escape) Close();&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.OnKeyDown(e);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnClosed(&lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Collection.CloseFeedbackForm();&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:20pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; A control containing a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFeedbackListBox&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; and&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; some extra linklabels for extra gui options&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackControl&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;Control&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;FeedbackListBox&lt;/FONT&gt; lb = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackListBox&lt;/FONT&gt;();&lt;FONT Color=#2b91af&gt;&lt;br&gt;BottomPanel&lt;/FONT&gt; pnlBottom;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FeedbackControl()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;lb.Dock = &lt;FONT Color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;br&gt;lb.CollectionChanged += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(lb_DataSourceChanged);&lt;br&gt;Controls.Add(lb);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;pnlBottom = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;BottomPanel&lt;/FONT&gt;();&lt;br&gt;Controls.Add(pnlBottom);&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; lb_DataSourceChanged(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;pnlBottom.Visible = Collection != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; By Asigning a collection, the listbox will update&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; itself when messages are received.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; NB: each collection can have only one FeedbackControl asigned to it.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;br&gt;[&lt;FONT Color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; Collection&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; lb.Collection; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;lb.Collection = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt; CollectionChanged&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;add&lt;/FONT&gt; { lb.CollectionChanged += &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;remove&lt;/FONT&gt; { lb.CollectionChanged -= &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;BottomPanel&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;Panel&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;LinkLabel&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;llMail = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;LinkLabel&lt;/FONT&gt;(),&lt;br&gt;llSave = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;LinkLabel&lt;/FONT&gt;(),&lt;br&gt;llShow = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;LinkLabel&lt;/FONT&gt;();&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; BottomPanel()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Dock = &lt;FONT Color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Bottom;&lt;br&gt;Padding = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Padding&lt;/FONT&gt;(1);&lt;br&gt;Height = 20;&lt;br&gt;AddLabel(llMail);&lt;br&gt;AddLabel(llSave);&lt;br&gt;AddLabel(llShow);&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:80pt"&gt;llMail.Click += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(llMail_Click);&lt;br&gt;llMail.Text = &lt;FONT Color=#a31515&gt;&amp;quotMail list&amp;quot&lt;/FONT&gt;;&lt;br&gt;llSave.Click += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(llSave_Click);&lt;br&gt;llSave.Text = &lt;FONT Color=#a31515&gt;&amp;quotSave list&amp;quot&lt;/FONT&gt;;&lt;br&gt;llShow.Click += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(llShow_Click);&lt;br&gt;llShow.Text = &lt;FONT Color=#a31515&gt;&amp;quotShow overview&amp;quot&lt;/FONT&gt;;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;void&lt;/FONT&gt; llShow_Click(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (InvokeRequired)&lt;div style="margin-left:20pt"&gt;Invoke(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(llShow_Click), sender, e);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;coll.ShowHTML();&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackControl&lt;/FONT&gt; Parent&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;.Parent &lt;FONT Color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackControl&lt;/FONT&gt;; }&lt;/div&gt;}&lt;FONT Color=#2b91af&gt;&lt;br&gt;FeedbackCollection&lt;/FONT&gt; coll&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; Parent.Collection; }&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; llSave_Click(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (InvokeRequired)&lt;div style="margin-left:20pt"&gt;Invoke(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(llSave_Click), sender, e);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;SaveFileDialog&lt;/FONT&gt; sf = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;SaveFileDialog&lt;/FONT&gt;();&lt;br&gt;sf.Filter = &lt;FONT Color=#a31515&gt;&amp;quotHTML file|*.htm;*.html&amp;quot&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:120pt"&gt;if&lt;/FONT&gt; (sf.ShowDialog(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;) == &lt;FONT Color=#2b91af&gt;DialogResult&lt;/FONT&gt;.OK)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;coll.Save(sf.FileName);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:100pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;catch&lt;/FONT&gt; (&lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;MessageBox&lt;/FONT&gt;.Show(&lt;FONT Color=#a31515&gt;&amp;quotError saving list:\r\n&amp;quot&lt;/FONT&gt; + ex.Message);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;void&lt;/FONT&gt; llMail_Click(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (InvokeRequired)&lt;div style="margin-left:20pt"&gt;Invoke(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(llMail_Click), sender, e);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;coll.Mail();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;catch&lt;/FONT&gt; (&lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;MessageBox&lt;/FONT&gt;.Show(&lt;FONT Color=#a31515&gt;&amp;quotError mailing list:\r\n&amp;quot&lt;/FONT&gt; + ex.Message);&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;void&lt;/FONT&gt; AddLabel(&lt;FONT Color=#2b91af&gt;LinkLabel&lt;/FONT&gt; ll)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;ll.Dock = &lt;FONT Color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Left;&lt;br&gt;Controls.Add(ll);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Add(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; lb.Add(fb);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Count&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; lb.Count; }&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;[&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Index]&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; lb[Index]; }&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackAlivePanel&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;Panel&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;PulseRectangle&lt;/FONT&gt; pr = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;PulseRectangle&lt;/FONT&gt;();&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FeedbackAlivePanel()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetStyle(&lt;FONT Color=#2b91af&gt;ControlStyles&lt;/FONT&gt;.UserPaint&lt;br&gt;| &lt;FONT Color=#2b91af&gt;ControlStyles&lt;/FONT&gt;.AllPaintingInWmPaint, &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnResize(&lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; eventargs)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;pr.Bounds = Bounds;&lt;br&gt;Increase();&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Increase()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Invalidate();&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnPaint(&lt;FONT Color=#2b91af&gt;PaintEventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;pr.Paint(e.Graphics);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:20pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; A listbox specifically for feedback items. The items are graphically shown to clearly&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; outline their type of feedback&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackListBox&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;ListBox&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; FeedbackListBox()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DrawMode = &lt;FONT Color=#2b91af&gt;DrawMode&lt;/FONT&gt;.OwnerDrawFixed;&lt;br&gt;SetStyle(&lt;FONT Color=#2b91af&gt;ControlStyles&lt;/FONT&gt;.AllPaintingInWmPaint&lt;div style="margin-left:20pt"&gt;| &lt;FONT Color=#2b91af&gt;ControlStyles&lt;/FONT&gt;.OptimizedDoubleBuffer, &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;items = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ItemCollection&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;[&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; index]&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (coll == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt;(&lt;FONT Color=#a31515&gt;&amp;quotNo collection has been started yet&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; coll[index];&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt; .Hidden)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ItemCollection&lt;/FONT&gt; Items&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; items; }&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:40pt"&gt;ItemCollection&lt;/FONT&gt; items;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ItemCollection&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackListBox&lt;/FONT&gt; Owner;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; ItemCollection(&lt;FONT Color=#2b91af&gt;FeedbackListBox&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;[&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Index]&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; Owner[Index];&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Count { &lt;FONT Color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; Owner.Count; } }&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Add(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Owner.Add(fb);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; IndexOf(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; Owner.IndexOf(fb);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Add(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (coll == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) Collection = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt;();&lt;br&gt;coll.Add(fb);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; fb;&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; Collection_ListChanged(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#2b91af&gt;ListChangedEventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;switch&lt;/FONT&gt; (e.ListChangedType)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;case&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemAdded:&lt;FONT Color=#0000ff&gt;&lt;br&gt;case&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemChanged:&lt;FONT Color=#0000ff&gt;&lt;br&gt;case&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemDeleted:&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//this inbetween class is used because in threading environments&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//the collection can be updated before the invoke is finished&lt;/FONT&gt;&lt;br&gt;update(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;updateinfo&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Index=e.NewIndex,&lt;br&gt;Item=((&lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt;)sender)[e.NewIndex],&lt;br&gt;Type= e.ListChangedType&lt;/div&gt;});&lt;FONT Color=#0000ff&gt;&lt;br&gt;break&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;updateinfo&lt;/FONT&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&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Index;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Item;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt; Type;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:40pt"&gt;Queue&lt;/FONT&gt;&amp;lt&lt;FONT Color=#2b91af&gt;updateinfo&lt;/FONT&gt;&amp;gt updates = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Queue&lt;/FONT&gt;&amp;lt&lt;FONT Color=#2b91af&gt;updateinfo&lt;/FONT&gt;&amp;gt();&lt;FONT Color=#0000ff&gt;&lt;br&gt;volatile&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; updating;&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; update(&lt;FONT Color=#2b91af&gt;updateinfo&lt;/FONT&gt; info)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;lock&lt;/FONT&gt; (updates)&lt;div style="margin-left:20pt"&gt;updates.Enqueue(info);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (!updating &amp;amp&amp;amp !IsDisposed)&lt;div style="margin-left:20pt"&gt;BeginInvoke((&lt;FONT Color=#2b91af&gt;Void&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;delegate&lt;/FONT&gt;()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;update();&lt;/div&gt;});&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;catch&lt;/FONT&gt; (&lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Console&lt;/FONT&gt;.WriteLine(ex.Message);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; update()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (updating) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;updating = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT Color=#2b91af&gt;&lt;br&gt;updateinfo&lt;/FONT&gt; info ;&lt;FONT Color=#0000ff&gt;&lt;br&gt;while&lt;/FONT&gt;(updates.Count&amp;gt0)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;lock&lt;/FONT&gt;(updates)&lt;div style="margin-left:20pt"&gt;info = updates.Dequeue();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;switch&lt;/FONT&gt; (info.Type)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;case&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemAdded:&lt;div style="margin-left:20pt"&gt;Init(info.Item, info.Index);&lt;FONT Color=#0000ff&gt;&lt;br&gt;break&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;case&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemChanged:&lt;div style="margin-left:20pt"&gt;Update(info.Item, info.Index);&lt;FONT Color=#0000ff&gt;&lt;br&gt;break&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;case&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemDeleted:&lt;div style="margin-left:20pt"&gt;Remove(info);&lt;FONT Color=#0000ff&gt;&lt;br&gt;break&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#2b91af&gt;&lt;br&gt;Application&lt;/FONT&gt;.DoEvents();&lt;br&gt;updating = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; Init(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb, &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;fb.Updated += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(Feedback_Updated);&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.Items.Insert(index, fb);&lt;br&gt;SetIndex(index);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; Remove(&lt;FONT Color=#2b91af&gt;updateinfo&lt;/FONT&gt; inf)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;inf.Item.Updated -= &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(Feedback_Updated);&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.Items.RemoveAt(inf.Index);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; Feedback_Updated(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;var&lt;/FONT&gt; u = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;updateinfo&lt;/FONT&gt;();&lt;br&gt;u.Item= (&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;)sender;&lt;br&gt;u.Index=IndexOf(u.Item);&lt;br&gt;u.Type =u.Index==-1 ? &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemDeleted : &lt;FONT Color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemChanged;&lt;br&gt;update(u);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;delegate&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Void&lt;/FONT&gt;();&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; UpdateSummary()&lt;br&gt;{&lt;br&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; Update(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb, &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;br&gt;{&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (fb.IsAliveIndicator)&lt;div style="margin-left:20pt"&gt;UpdatePulse(fb);&lt;FONT Color=#008000&gt;&lt;/div&gt;//System.Diagnostics.Debug.Assert(index &amp;gt= 0);&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (index &amp;gt= 0)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; r = GetRectangle(index);&lt;br&gt;Invalidate(r);&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:80pt"&gt;SetIndex(index);&lt;FONT Color=#2b91af&gt;&lt;br&gt;Application&lt;/FONT&gt;.DoEvents();&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;fb.Updated -= &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt;(Feedback_Updated);&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:40pt"&gt;Rectangle&lt;/FONT&gt; GetRectangle(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; r = ClientRectangle;&lt;br&gt;r.Height = &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;.ItemHeight;&lt;br&gt;r.Y = r.Height*index;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; r;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; SetIndex(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SelectedIndex = index;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; IndexOf(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (coll == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; -1;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; coll.IndexOf(fb);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Count&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (coll == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; 0;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; coll.Count;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnDrawItem(&lt;FONT Color=#2b91af&gt;DrawItemEventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;object&lt;/FONT&gt; item = &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;.Items[e.Index];&lt;FONT Color=#2b91af&gt;&lt;br&gt;Feedback&lt;/FONT&gt; fb = (&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;)item ;&lt;FONT Color=#2b91af&gt;&lt;br&gt;FeedbackItemInfo&lt;/FONT&gt; inf = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt;(fb,e,coll.StartTime,&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;);&lt;br&gt;fb.GetPainter(inf).Paint();&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;EventHandler&lt;/FONT&gt; CollectionChanged;&lt;/div&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:40pt"&gt;FeedbackCollection&lt;/FONT&gt; coll;&lt;br&gt;[&lt;FONT Color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; Collection&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; coll;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (coll == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;BeginUpdate();&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.Items.Clear();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt;(coll!=&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;coll.ListChanged += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedEventHandler&lt;/FONT&gt;(Collection_ListChanged);&lt;FONT Color=#008000&gt;&lt;/div&gt;//base.DataSource =&amp;nbsp&amp;nbspDataSource not used because of threading problems&lt;/FONT&gt;&lt;br&gt;coll = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (coll != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&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&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;div style="margin-left:20pt"&gt;coll.ListChanged += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ListChangedEventHandler&lt;/FONT&gt;(Collection_ListChanged);&lt;FONT Color=#0000ff&gt;&lt;br&gt;for&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt coll.Count; i++)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Init(coll[i], i);&lt;/div&gt;}&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;/div&gt;}&lt;br&gt;EndUpdate();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (CollectionChanged != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;CollectionChanged(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;br&gt;[&lt;FONT Color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt; .Hidden)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; DataSource&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; coll; }&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:40pt"&gt;Dictionary&lt;/FONT&gt;&amp;lt&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;, &lt;FONT Color=#2b91af&gt;PulseRectangle&lt;/FONT&gt;&amp;gt pulses;&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; UpdatePulse(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;GetPulse(fb).Update();&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;PulseRectangle&lt;/FONT&gt; GetPulse(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; fb)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (pulses == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;pulses = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Dictionary&lt;/FONT&gt;&amp;lt&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;, &lt;FONT Color=#2b91af&gt;PulseRectangle&lt;/FONT&gt;&amp;gt();&lt;FONT Color=#2b91af&gt;&lt;/div&gt;PulseRectangle&lt;/FONT&gt; pr;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (!pulses.TryGetValue(fb, &lt;FONT Color=#0000ff&gt;out&lt;/FONT&gt; pr))&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;pr = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;PulseRectangle&lt;/FONT&gt;();&lt;br&gt;pr.Count = 20;&lt;br&gt;pulses.Add(fb, pr);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; pr;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnClick(&lt;FONT Color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (mouseonbutton != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;mouseonbutton.ShowExtraInfo(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.OnClick(e);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:40pt"&gt;Feedback&lt;/FONT&gt; mouseonbutton;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnMouseMove(&lt;FONT Color=#2b91af&gt;MouseEventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;&lt;FONT Color=#2b91af&gt;&lt;br&gt;Feedback&lt;/FONT&gt; onbutton = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Count &amp;gt 0 &amp;amp&amp;amp &lt;FONT Color=#2b91af&gt;FeedbackItemPainter&lt;/FONT&gt;.ExtraInfoButtonArea.Contains(e.X,e.Y))&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;int&lt;/FONT&gt; index = IndexFromPoint(e.Location);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (index != -1 &amp;amp&amp;amp index &amp;lt Count)&lt;div style="margin-left:20pt"&gt;onbutton = &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;[index];&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (mouseonbutton != onbutton)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (onbutton != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp onbutton.CanShowExtraInfo)&lt;div style="margin-left:20pt"&gt;mouseonbutton = onbutton;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;mouseonbutton = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:80pt"&gt;Cursor = mouseonbutton != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; ? &lt;FONT Color=#2b91af&gt;Cursors&lt;/FONT&gt;.Hand : &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;br&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt;&lt;br&gt;{&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DrawItemEventArgs&lt;/FONT&gt; DrawItemEventArgs;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsSelected;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Item;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Index;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; Bounds;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt; CollectionStartTime;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackListBox&lt;/FONT&gt; Owner;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; FeedbackItemInfo(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Item, &lt;FONT Color=#2b91af&gt;DrawItemEventArgs&lt;/FONT&gt; e, &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt; CollectionStartTime, &lt;FONT Color=#2b91af&gt;FeedbackListBox&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Item = Item;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.DrawItemEventArgs = e;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.IsSelected = (e.State &amp;amp &lt;FONT Color=#2b91af&gt;DrawItemState&lt;/FONT&gt;.Selected) &amp;gt 0;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Index = e.Index;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Bounds = e.Bounds;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.CollectionStartTime = CollectionStartTime;&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemPainter&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; r;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FontFamily&lt;/FONT&gt; FontFamily;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; MessageArea;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt; Info;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Graphics&lt;/FONT&gt; Graphics;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FeedbackItemPainter(&lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt; info)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Info = info;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.r = info.Bounds;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.FontFamily = info.DrawItemEventArgs.Font.FontFamily;&lt;br&gt;MessageArea = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt;(MessageOffset, r.Y, r.Width - MessageOffset, r.Height);&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Graphics = info.DrawItemEventArgs.Graphics;&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;ExtraInfoOffset = 75,&lt;br&gt;ExtraInfoWidth = 10,&lt;br&gt;ProgressWidth = 40,&lt;br&gt;MessageOffset = 90,&lt;br&gt;TimeOffset = 32;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; ExtraInfoButtonArea = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt;(ExtraInfoOffset, 0, ExtraInfoWidth, &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;.MaxValue);&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawDateTime()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DrawDateTime(Info.Index &amp;gt 0,&lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.Black);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawDateTime(&lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; Relative,&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//clear background&lt;/FONT&gt;&lt;br&gt;ClearDateTimeBackGround(&lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.White);&lt;FONT Color=#008000&gt;&lt;br&gt;//draw text&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Relative)&lt;div style="margin-left:20pt"&gt;DrawRelativeTime(Info.Item.LastUpdate.Subtract(Info.CollectionStartTime),b);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;DrawAbsoluteTime(b);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; DrawAbsoluteTime(&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.DrawString(&lt;div style="margin-left:20pt"&gt;Info.Item.DateTime.ToShortDateString() + &lt;FONT Color=#a31515&gt;&amp;quot &amp;quot&lt;/FONT&gt; + Info.Item.DateTime.ToString(&lt;FONT Color=#a31515&gt;&amp;quothh:mm.ss&amp;quot&lt;/FONT&gt;),&lt;br&gt;GetFont(6.5f), b, r.Left, r.Top + 1);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; DrawRelativeTime(&lt;FONT Color=#2b91af&gt;TimeSpan&lt;/FONT&gt; diff,&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.DrawString(&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt;.Format(&lt;FONT Color=#a31515&gt;&amp;quot+{0:00}:{1:00}.{2:00}.{3:000}&amp;quot&lt;/FONT&gt;,&lt;div style="margin-left:20pt"&gt;diff.Hours, diff.Minutes, diff.Seconds, diff.Milliseconds),&lt;br&gt;GetFont(7.2f)&lt;br&gt;, b, r.Left, r.Top);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Font&lt;/FONT&gt; GetFont(&lt;FONT Color=#0000ff&gt;float&lt;/FONT&gt; size)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Font&lt;/FONT&gt;(FontFamily, size);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ClearDateTimeBackGround(&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.FillRectangle(b, DateTimeArea);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; DateTimeArea&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt;(r.Left, r.Top, r.Left + ExtraInfoOffset, r.Height);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt; GetBackgroundColor()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt;(Info.IsSelected)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt;.Blue;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt;.White;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawSelectionRectangle()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DrawSelectionRectangle(GetBackgroundColor());&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawSelectionRectangle(&lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt; c)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.DrawRectangle(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Pen&lt;/FONT&gt;(c), r);&lt;br&gt;ClearMessageBackGround(c);&lt;/div&gt;}&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ClearMessageBackGround(&lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt; c)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.FillRectangle(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;SolidBrush&lt;/FONT&gt;(c), MessageArea);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawExtraInfoButton()&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; rectEI = ExtraInfoButtonArea;&lt;br&gt;rectEI.Y = r.Y;&lt;br&gt;rectEI.Height = r.Height;&lt;br&gt;DrawExtraInfoButton(rectEI);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawExtraInfoButton(&lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; r)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;ControlPaint&lt;/FONT&gt;.DrawButton(Graphics, r, &lt;FONT Color=#2b91af&gt;ButtonState&lt;/FONT&gt;.Normal);&lt;br&gt;r.X += 2;&lt;br&gt;Graphics.DrawString(&lt;FONT Color=#a31515&gt;&amp;quoti&amp;quot&lt;/FONT&gt;, GetFont(7), &lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.Blue, r);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawMessage()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DrawMessage(offset);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawMessage(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Offset)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Color&lt;/FONT&gt; c = Info.IsSelected ? &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt;.WhiteSmoke : &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt;.Black;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#2b91af&gt;&lt;br&gt;Rectangle&lt;/FONT&gt; r = MessageArea;&lt;br&gt;r.X += Offset;&lt;br&gt;r.Width -= Offset;&lt;br&gt;DrawMessage(r, &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;SolidBrush&lt;/FONT&gt;(c));&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawMessage(&lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; r,&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&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&amp;nbsp&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Font&lt;/FONT&gt; f = GetFont(7);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Info.Item.Level &amp;gt 0)&lt;div style="margin-left:20pt"&gt;f = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Font&lt;/FONT&gt;(f, &lt;FONT Color=#2b91af&gt;FontStyle&lt;/FONT&gt;.Bold);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;Graphics.DrawString(Info.Item.Message, f, b, r);&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;int&lt;/FONT&gt; offset;&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; PaintProgress()&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;RectangleF&lt;/FONT&gt; rectProg = GetProgressRectangle();&lt;br&gt;rectProg.X++;&lt;br&gt;rectProg.Inflate(0, -1);&lt;br&gt;Graphics.FillRectangle(&lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.White, rectProg);&lt;FONT Color=#2b91af&gt;&lt;br&gt;Pen&lt;/FONT&gt; p = &lt;FONT Color=#2b91af&gt;Pens&lt;/FONT&gt;.Black;&lt;br&gt;Graphics.DrawRectangle(p, &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt;.Round(rectProg));&lt;FONT Color=#0000ff&gt;&lt;br&gt;float&lt;/FONT&gt; penwidth = .5f;&lt;br&gt;rectProg.Inflate(-penwidth, -penwidth);&lt;br&gt;rectProg.Width *= Info.Item.ProgressPercentage;&lt;br&gt;Graphics.FillRectangle(&lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.Green, rectProg);&lt;FONT Color=#2b91af&gt;&lt;br&gt;Font&lt;/FONT&gt; f = GetFont(7);&lt;br&gt;Graphics.DrawString(Info.Item.GetProgressString(), f,&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Brushes&lt;/FONT&gt;.Navy, rectProg.Left + 1, rectProg.Top - 1);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; PaintAlive()&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; r = GetProgressRectangle();&lt;br&gt;r.Inflate(0, -1);&lt;FONT Color=#2b91af&gt;&lt;br&gt;PulseRectangle&lt;/FONT&gt; pr = Info.Owner.GetPulse(Info.Item);&lt;br&gt;pr.Bounds = r;&lt;br&gt;pr.Paint(Graphics);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; GetProgressRectangle()&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; r = MessageArea;&lt;br&gt;r.X += offset;&lt;br&gt;offset += ProgressWidth + 2;&lt;br&gt;r.Width = ProgressWidth;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; r;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; IncreaseOffset(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; by)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;offset += by;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Paint()&lt;br&gt;{&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;DrawDateTime();&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (Info.Item.CanShowExtraInfo)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DrawExtraInfoButton();&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;DrawSelectionRectangle();&lt;/div&gt;&lt;FONT Color=#008000&gt;&lt;div style="margin-left:60pt"&gt;//draw progress&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Info.Item.Progress &amp;gt 0)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;PaintProgress();&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#008000&gt;&lt;div style="margin-left:60pt"&gt;//draw alive&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Info.Item.IsAliveIndicator)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;PaintAlive();&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#008000&gt;&lt;div style="margin-left:60pt"&gt;//draw message&lt;/FONT&gt;&lt;br&gt;DrawMessage();&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;PulseRectangle&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; bounds;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; Bounds&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; bounds; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (bounds == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#2b91af&gt;&lt;br&gt;Rectangle&lt;/FONT&gt; r = bounds;&lt;br&gt;bounds = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (r.Width != &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;.Width || ps == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;Update();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;FillDrawPoints();&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; transform(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; x, &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; y)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (x == 0 &amp;amp&amp;amp y == 0) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;for&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt ps.Length; i++)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;ps[i].X -= x;&lt;br&gt;ps[i].Y -= y;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The number of points to draw.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Call Update manually after setting this value&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Count = 200;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Point&lt;/FONT&gt;[] ps, drawpoints;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Update()&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Random&lt;/FONT&gt; r = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Random&lt;/FONT&gt;();&lt;FONT Color=#0000ff&gt;&lt;br&gt;double&lt;/FONT&gt; step = (&lt;FONT Color=#0000ff&gt;double&lt;/FONT&gt;)bounds.Width / Count;&lt;br&gt;ps = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Point&lt;/FONT&gt;[Count];&lt;br&gt;drawpoints = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;for&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt Count; i++)&lt;div style="margin-left:20pt"&gt;ps[i] = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Point&lt;/FONT&gt;((&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;)(step * i), r.Next(100));&lt;/div&gt;FillDrawPoints();&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The pen with which the pulses are drawn&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Pen&lt;/FONT&gt; Pen = &lt;FONT Color=#2b91af&gt;Pens&lt;/FONT&gt;.LightGreen;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; BackGroundBrush = &lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.Black;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; FillDrawPoints()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;int&lt;/FONT&gt; left = bounds.Left, h = bounds.Height, top = bounds.Top;&lt;br&gt;drawpoints = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Point&lt;/FONT&gt;[ps.Length];&lt;FONT Color=#0000ff&gt;&lt;br&gt;for&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt ps.Length; i++)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;drawpoints[i].X = ps[i].X + left;&lt;br&gt;drawpoints[i].Y = top + (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;)(h * ps[i].Y / 100);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Paint(&lt;FONT Color=#2b91af&gt;Graphics&lt;/FONT&gt; g)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (ps == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) Update();&lt;br&gt;g.FillRectangle(BackGroundBrush, bounds);&lt;br&gt;g.DrawLines(Pen, drawpoints);&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:20pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The importance of the feedback&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;enum&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Custom = 100,&lt;br&gt;Trivial = -100,&lt;br&gt;Normal = 0,&lt;br&gt;SuperNormal = 200,&lt;br&gt;Exception = 500,&lt;br&gt;Important = 1000&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;interface&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;IFeedBackSupporter&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;FeedbackCollection&lt;/FONT&gt; Feedback { &lt;FONT Color=#0000ff&gt;get&lt;/FONT&gt;; }&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;#region&lt;/FONT&gt; Specific feedback &lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FileReferenceFeedback&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; File;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FileReferenceFeedback(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; MessagePrefix, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; File)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;(&lt;br&gt;MessagePrefix&lt;br&gt;+ System.IO.&lt;FONT Color=#2b91af&gt;Path&lt;/FONT&gt;.GetFileName(File)&lt;br&gt;+ &lt;FONT Color=#a31515&gt;&amp;quot in &amp;quot&lt;/FONT&gt;&lt;br&gt;+ System.IO.&lt;FONT Color=#2b91af&gt;Path&lt;/FONT&gt;.GetDirectoryName(File))&lt;/div&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.File = File;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FileReferenceFeedback(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; File)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;(&lt;FONT Color=#a31515&gt;&amp;quotFile: &amp;quot&lt;/FONT&gt;, File)&lt;/div&gt;{&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; CanShowExtraInfo&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ShowExtraInfo(&lt;FONT Color=#2b91af&gt;IWin32Window&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;System.Diagnostics.&lt;FONT Color=#2b91af&gt;Process&lt;/FONT&gt;.Start(&lt;FONT Color=#a31515&gt;&amp;quotExplorer&amp;quot&lt;/FONT&gt;, &lt;FONT Color=#a31515&gt;&amp;quot/select,&amp;quot&lt;/FONT&gt; + File);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ExceptionFeedback&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt; Exception;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; ExceptionFeedback(&lt;FONT Color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Exception = ex;&lt;br&gt;FeedbackLevel = &lt;FONT Color=#2b91af&gt;FeedBackLevel&lt;/FONT&gt;.Exception;&lt;br&gt;System.Diagnostics.&lt;FONT Color=#2b91af&gt;StackTrace&lt;/FONT&gt; stack = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; System.Diagnostics.&lt;FONT Color=#2b91af&gt;StackTrace&lt;/FONT&gt;(ex);&lt;br&gt;Message = &lt;FONT Color=#a31515&gt;&amp;quotError '&amp;quot&lt;/FONT&gt; + ex.Message + &lt;FONT Color=#a31515&gt;&amp;quot' occured on &amp;quot&lt;/FONT&gt; + stack.GetFrame(0);&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; CanShowExtraInfo&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ShowExtraInfo(&lt;FONT Color=#2b91af&gt;IWin32Window&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DefaultShowExceptionMethod(Exception);&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ErrorPainter&lt;/FONT&gt; : &lt;FONT Color=#2b91af&gt;FeedbackItemPainter&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; ErrorPainter(&lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt; inf)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;(inf)&lt;/div&gt;{&lt;br&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawMessage(&lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; r, &lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; ri = r;&lt;br&gt;ri.Width = ri.Height;&lt;br&gt;Graphics.DrawIcon(&lt;FONT Color=#2b91af&gt;SystemIcons&lt;/FONT&gt;.Error, ri);&lt;br&gt;r.X = ri.Right;&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.DrawMessage(r,Info.IsSelected ? &lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.Orange : &lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.Red);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemPainter&lt;/FONT&gt; GetPainter(&lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt; info)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ErrorPainter&lt;/FONT&gt;(info);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; AppendExtraInfo(&lt;FONT Color=#2b91af&gt;AppendInfoSettings&lt;/FONT&gt; info)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;(Exception).AppendMessage(info.StringBuilder);&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;#endregion&lt;/FONT&gt;&lt;/div&gt;}&lt;br&gt;&lt;/DIV&gt;&lt;DIV Style=" Display='none'; BackGround-Color=#dcdcdc;" OnDblClick="var o = parentNode.firstChild;o.sel =1;o.click()"&gt;&lt;b&gt; . . .&lt;/b&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;


&lt;BR&gt;&lt;B&gt;Also needed:&lt;/B&gt; (this is used to show complete exception information in HTML, you could also strip the exception adding functionality, but I use this class a lot to quickly debug and get better stacktraces than the default .net block of code. &lt;!-- --Start of code block
--&gt;
&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 1px solid; BORDER-TOP: #000080 1px solid; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 1px solid; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 1px solid"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 1px solid; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'200pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" selcount="3" selold="1" sel="1"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; HEIGHT: 200pt; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; System;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Collections.Generic;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Linq;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Text;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Reflection;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Diagnostics;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Data.SqlClient;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.IO;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;namespace&lt;/FONT&gt; Subro.Exceptions&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The original Exception where this info object is based on&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; Exception;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ExceptionInfo(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Exception = ex;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//get stack trace information&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;BR&gt;StackTrace&lt;/FONT&gt; st = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StackTrace&lt;/FONT&gt;(Exception, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;BR&gt;frames = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt;[st.FrameCount];&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; frames.Length; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;frames[i] = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt;(st.GetFrame(i));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (usercodeindex == -1 &amp;amp;&amp;amp; frames[i].IsUserCode)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;usercodeindex = i;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//determine total exception count&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;while&lt;/FONT&gt; (ex != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;exceptioncount++;&lt;BR&gt;ex = ex.InnerException;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; General properties&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The date/time of the exception. This is not the time the exception&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; was thrown, but rather when the ExceptionInfo object was created.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; For most debugging purposes that difference in time does not matter, but&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; when the exact time is required, do not rely on this value!&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DateTime&lt;/FONT&gt; DateTime = &lt;FONT color=#2b91af&gt;DateTime&lt;/FONT&gt;.Now;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;ErrorFrame&lt;/FONT&gt;[] frames;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets the different StackFrames that led to this&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt;[] Frames&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; frames; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; FrameCount&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; frames.Length; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; usercodeindex = -1;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Returns the index of the first frame that occured in user code (and thus&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; the first frame that is actually debuggable ;-) )&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; UserFrameIndex&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; usercodeindex; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Information about the last step before this error occured. The returned&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; object contains information about that step, such as the method that was running.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; When running in debug, the pdb files also provide info on the original code filename and line number&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt; LastFrame&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (frames.Length &amp;gt; 0) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; frames[0];&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Where &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="LastFrame"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; returns the last step in general, this property&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; returns the last step in non-system code&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;seealso cref="UserFrameIndex"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt; LastUserFrame&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (usercodeindex == -1) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; frames[usercodeindex];&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The exception type&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Type&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Exception.GetType().Name; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Mail NB: framework specific&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This mail section was created in .net 2.0, you might&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; want to remove this part or alter it if using earlier versions&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Sends an email to the specified address&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="To"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Send(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; To)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; m = GetExceptionMail();&lt;BR&gt;m.To.Add(To);&lt;BR&gt;System.Net.Mail.&lt;FONT color=#2b91af&gt;SmtpClient&lt;/FONT&gt; client = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Net.Mail.&lt;FONT color=#2b91af&gt;SmtpClient&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"mail"&lt;/FONT&gt;);&lt;BR&gt;client.Send(m);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Send the exception info (in html format) to the addressee.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB, some presumtions were made when trying to create a quick and &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; dirty send method. Safest way it to use &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="FillMailMessage"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; or &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="GetExceptionMail"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; and do the sending manually&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="ex"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="To"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Send(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; To)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GetInfo(ex).Send(To);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets a mailmessage instance containing the Exception info.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The from address is tried to be set to a custom address. If this&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; fails (or if you want to set a custom one), you'll have to set the From&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; address manually.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; GetExceptionMail(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetInfo(ex).GetExceptionMail();&lt;/DIV&gt;}&lt;BR&gt;System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; GetExceptionMail()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; m = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt;();&lt;BR&gt;FillMailMessage(m);&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;m.From = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Net.Mail.&lt;FONT color=#2b91af&gt;MailAddress&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"Exceptions@"&lt;/FONT&gt; + &lt;FONT color=#2b91af&gt;Environment&lt;/FONT&gt;.UserDomainName);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; { }&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; m;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Sets the body of the message to hold the exeption info&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="m"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; FillMailMessage(System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; m)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;m.IsBodyHtml = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;m.Body = GetTotalMessage();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; ExtraInfo NB&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This class can hold extra info for an &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ExceptionInfo"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Its main purpose is to output this extra info to the html text&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;abstract&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; With this method, the extra info writes itself (in html format) to&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; the stringbuilder&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="sb"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;abstract&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;implicit&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;operator&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; text)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;TextInfo&lt;/FONT&gt;(text);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValuesInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt;&amp;gt; values = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt;&amp;gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name, Text;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Header;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddText(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; text)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AddValue(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;, text);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddValue(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Value)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ValueEntry&lt;/FONT&gt; v = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt;();&lt;BR&gt;v.Name = Name;&lt;BR&gt;v.Text = Value;&lt;BR&gt;values.Add(v);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.openBlock(1, 1);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Header != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;"&lt;/FONT&gt;).Append(Header).Append(&lt;FONT color=#a31515&gt;":&lt;/B&gt;&lt;/I&gt;"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (values.Count &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.openBlock(1, 1);&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt; ve &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; values)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ve.Name == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(ve.Text);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.appendInfo(ve.Name, ve.Text);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;BR&gt;ei.closeBlock();&lt;/DIV&gt;}&lt;BR&gt;ei.closeBlock();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Adds plain text as extrainfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;TextInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Text;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; TextInfo(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; text) { Text = text; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(Text);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; SQL extra info&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Used to display the history of sql strings.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SQlStringInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt; list = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Add(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; sql)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;list.Add(sql);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddRange(&lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt; values)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;list.AddRange(values);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.openBlock(1);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;B&amp;gt;Recent sql strings:&lt;/B&gt;"&lt;/FONT&gt;);&lt;BR&gt;ei.openBlock(&lt;FONT color=#a31515&gt;"border:'gray 1 solid';margin-left:15"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; i = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; sql &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; list)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;SPAN&amp;gt;&amp;lt;B&amp;gt;--"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(i++ + 1)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"--&lt;/B&gt;&amp;lt;span style='margin-left:10'&amp;gt;"&lt;/FONT&gt;)&lt;BR&gt;.Append(sql)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;BR&gt;ei.closeBlock();&lt;BR&gt;ei.closeBlock();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Add one or more sql strings to the list to be displayed in the recent&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; sql list.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This is usefull when you keep a list of recent executed sql strings somewhere&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; and want to include them in the exception output&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="SQL"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddSQL(&lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt; SQL)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (sqls == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sqls = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SQlStringInfo&lt;/FONT&gt;();&lt;BR&gt;AddExtraInfo(sqls);&lt;/DIV&gt;}&lt;BR&gt;sqls.AddRange(SQL);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;SQlStringInfo&lt;/FONT&gt; sqls;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Add &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ExtraInfo"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;. You can also use a string as parameter&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="ei"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddExtraInfo(&lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt; ei)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (extrainfo == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) extrainfo = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&amp;gt;();&lt;BR&gt;extrainfo.Add(ei);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&amp;gt; extrainfo;&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; returns the amount of &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ExtraInfo"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; objects added&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; ExtraInfoCount&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (extrainfo == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; extrainfo.Count;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; HTML&lt;FONT color=#0000ff&gt;&lt;BR&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; ExtraInfoAnchor = &lt;FONT color=#a31515&gt;"ExtraInfo"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendExtraInfo()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (extrainfo != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendBR();&lt;BR&gt;appendHR();&lt;BR&gt;openBlock(2);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;B&amp;gt;&amp;lt;A name='"&lt;/FONT&gt;).Append(ExtraInfoAnchor)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(&lt;FONT color=#a31515&gt;"'&amp;gt;Extra Info&lt;/A&gt;&lt;/B&gt;&amp;lt;BR&amp;gt;&amp;lt;HR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;openBlock(&lt;FONT color=#a31515&gt;"margin-left:10;font-size:smaller"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt; ei &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; extrainfo)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.AppendHTML(sb, &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Static&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Rather than creating a new instance manually, use&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; this method to choose the proper exception object&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="ex"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; GetInfo(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ex == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ex &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlExceptionInfo&lt;/FONT&gt;(ex &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ex &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadException&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadExceptionInfo&lt;/FONT&gt;(ex &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadException&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;(ex);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;implicit&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;operator&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetInfo(ex);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Inner Exceptions&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; exceptioncount;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; returns the total number of exceptions (Main Exception + all inner exceptions)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; ExceptionCount&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; exceptioncount; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; html information&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; BEWARE: this code is manufactured to quickly create the html information &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; and is not nicely constructed for reusability.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; A bit more friendly code for html is used in the AutoFormatter (http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx) ,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; but did not use that here to keep the code portable for fresh applications&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets information about this exception and all inner exceptions in HTML format&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetTotalMessage()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; AppendMessage(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt;()).ToString();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This stringbuilder is only used in the html functions&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openBlock()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openBlock(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Border)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(Border, 0);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openBlock(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Border, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Indent)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(&lt;FONT color=#a31515&gt;"Border='"&lt;/FONT&gt; + Border + &lt;FONT color=#a31515&gt;"px black solid'"&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;+ (Indent &amp;gt; 0 ? &lt;FONT color=#a31515&gt;"margin-left="&lt;/FONT&gt; + (Indent * 20) : &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openBlock(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Style)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openclose(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;, Style);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; closeBlock()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openclose(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; openclose(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; close, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Style)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (close) sb.Append(&lt;FONT color=#a31515&gt;"/"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"DIV"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Style != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;" Style=\""&lt;/FONT&gt;).Append(Style).Append(&lt;FONT color=#a31515&gt;"\""&lt;/FONT&gt;);&lt;/DIV&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; AppendMessage(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; builder)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb = builder;&lt;BR&gt;openBlock(2);&lt;BR&gt;appendTop();&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Exception info created on"&lt;/FONT&gt;, DateTime.ToString());&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Application"&lt;/FONT&gt;, &lt;FONT color=#2b91af&gt;AppDomain&lt;/FONT&gt;.CurrentDomain.FriendlyName);&lt;BR&gt;openBlock(&lt;FONT color=#a31515&gt;"font-size:smaller;margin-left:20"&lt;/FONT&gt;);&lt;BR&gt;appendHeaderBottom();&lt;BR&gt;closeBlock();&lt;FONT color=#2b91af&gt;&lt;BR&gt;Exception&lt;/FONT&gt; ex = Exception;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; depth = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;while&lt;/FONT&gt; (append(ex, depth++)) { ex = ex.InnerException; }&lt;BR&gt;appendExtraInfo();&lt;BR&gt;appendBottom();&lt;BR&gt;closeBlock();&lt;BR&gt;sb = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; builder;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; appendMessage()&lt;BR&gt;{&lt;BR&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;.AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.sb = sb;&lt;BR&gt;openBlock(2, 1);&lt;BR&gt;appendTitle(&lt;FONT color=#a31515&gt;"Exception Info"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AppendMessage(sb);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(&lt;FONT color=#a31515&gt;"Error obtaining exception info: "&lt;/FONT&gt; + ex.Message);&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gives inheriting classes the possibility to append html text at the top&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; of the info block, inside the main border&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendTop()&lt;BR&gt;{&lt;BR&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gives inheriting classes the possibility to append html inside the header&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; of the info block.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The base functionality adds links to the main and inner exceptions (if there are any)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendHeaderBottom()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (exceptioncount &amp;gt; 1)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; exceptioncount; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openHeaderLink(AnchorNamePrefix + i);&lt;BR&gt;AppendExceptionTitle(i);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&lt;/A&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (extrainfo != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openHeaderLink(ExtraInfoAnchor);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"Extra Info&lt;/A&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gives inheriting classes the possibility to append html inside the header&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; of the Exception info block.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendExceptionHeader()&lt;BR&gt;{&lt;BR&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Used to add links in the header&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="href"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="name"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openHeaderLink(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; href)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;A style='margin-left:15' href='#"&lt;/FONT&gt;).Append(href)
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Append(&lt;FONT color=#a31515&gt;"'&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gives inheriting classes the possibility to append html text at the&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; end of the exception info, but before the main block is closed&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendBottom()&lt;BR&gt;{&lt;BR&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The prefix of the name that is added per depth so that code can&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; point directly to one of the inner exceptions&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The Name for the first exception is ExDepth0 , the second ExDepth1 and so forth.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Pointing to it in a href is subseqeuntly done with href = "#ExDepthX" where X is the inner exception index&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AnchorNamePrefix = &lt;FONT color=#a31515&gt;"ExDepth"&lt;/FONT&gt;;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; AppendExceptionTitle(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; depth)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (depth == 0)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"Main Exception"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"Inner Exception ["&lt;/FONT&gt;).Append(depth).Append(&lt;FONT color=#a31515&gt;"]"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; append(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; depth)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ex == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;BR&gt;appendHR();&lt;FONT color=#008000&gt;&lt;BR&gt;//add anchor information&lt;/FONT&gt;&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;A NAME=\""&lt;/FONT&gt;).Append(AnchorNamePrefix).Append(depth)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(&lt;FONT color=#a31515&gt;"\" style='font-size:smaller'&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;AppendExceptionTitle(depth);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;": &lt;/A&gt;&amp;lt;span style='background-color:#990000;color:white;font-weight:bolder;width:100%'&amp;gt;"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(ex.Message)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;openBlock(1, 1);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (depth &amp;gt; 0)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ExceptionInfo&lt;/FONT&gt; ei = GetInfo(ex);&lt;BR&gt;ei.sb = sb;&lt;BR&gt;ei.appendHeader();&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.appendExtraInfo();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex2)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(&lt;FONT color=#a31515&gt;"Error writing extra info: "&lt;/FONT&gt; + ex2.Message);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendHeader();&lt;/DIV&gt;closeBlock();&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;usercodecolor = &lt;FONT color=#a31515&gt;"lightblue"&lt;/FONT&gt;,&lt;BR&gt;systemcodecolor = &lt;FONT color=#a31515&gt;"beige"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;void&lt;/FONT&gt; appendHeader()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(&lt;FONT color=#a31515&gt;"border:'1 green solid';"&lt;/FONT&gt;);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Type"&lt;/FONT&gt;, Type);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (usercodeindex &amp;gt;= 0)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ErrorFrame&lt;/FONT&gt; ef = LastUserFrame;&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Last user code"&lt;/FONT&gt;, ef.FullMethodSignature + &lt;FONT color=#a31515&gt;" (Line "&lt;/FONT&gt; + ef.Line + &lt;FONT color=#a31515&gt;" in '"&lt;/FONT&gt; + ef.FileName + &lt;FONT color=#a31515&gt;"')"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;BR&gt;appendExceptionHeader();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (frames.Length &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(&lt;FONT color=#a31515&gt;"Stack"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;span style='margin-left:20;font-size:smaller'&amp;gt;Legend: "&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; 2; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;span style=\"background-color:"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(i == 0 ? systemcodecolor : usercodecolor)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"border='1 black solid';margin-left:15\"&amp;gt;"&lt;/FONT&gt;)&lt;BR&gt;.Append(i == 0 ? &lt;FONT color=#a31515&gt;"No debug information"&lt;/FONT&gt; : &lt;FONT color=#a31515&gt;"With debug information"&lt;/FONT&gt;)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;"&lt;/FONT&gt;);&lt;BR&gt;openBlock(&lt;FONT color=#a31515&gt;"margin-left:40;font-size:smaller"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt; ef &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; frames)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendStack(ef);&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"--No StackTrace available--"&lt;/FONT&gt;);&lt;/DIV&gt;closeBlock();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendTitle(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;B&amp;gt;"&lt;/FONT&gt;).Append(Name).Append(&lt;FONT color=#a31515&gt;"&lt;/B&gt;: "&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendInfo(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Value)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(Name);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;SPAN style='position:relative;left:20'&amp;gt;"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(Value).Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendHR()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;HR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendBR()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; appendStack(&lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt; ef)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(&lt;FONT color=#a31515&gt;"border:'1 solid black';background-color:"&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;+ (ef.IsUserCode ? usercodecolor : systemcodecolor)&lt;BR&gt;);&lt;/DIV&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;span style='font-size:larger;font-style:italic;color:olive'&amp;gt;&amp;lt;U&amp;gt;"&lt;/FONT&gt;);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Method"&lt;/FONT&gt;, ef.MethodName);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&lt;/U&gt;&lt;/SPAN&gt;"&lt;/FONT&gt;);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"NameSpace"&lt;/FONT&gt;, ef.NameSpace);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Full Signature"&lt;/FONT&gt;, ef.MethodSignature);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (ef.IsUserCode)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(&lt;FONT color=#a31515&gt;"File"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;A href='"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(ef.FileName).Append(&lt;FONT color=#a31515&gt;"'&amp;gt;"&lt;/FONT&gt;).Append(ef.FileName).Append(&lt;FONT color=#a31515&gt;"&lt;/A&gt;"&lt;/FONT&gt;)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;appendInfo(&lt;FONT color=#a31515&gt;"Line"&lt;/FONT&gt;, ef.Line.ToString());&lt;BR&gt;appendTitle(&lt;FONT color=#a31515&gt;"Code snippet"&lt;/FONT&gt;);&lt;BR&gt;openBlock(&lt;FONT color=#a31515&gt;"border='1 black dotted';margin-left=25"&lt;/FONT&gt;);&lt;BR&gt;ef.AppendCode(sb, CodeSnippetExtraLines);&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Only applies when getting html text. This is the number of lines on&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; each side of the offending line, that should be included in code snippets&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; CodeSnippetExtraLines = 3;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; ToString()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Exception.ToString();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; IO&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Shows the exception in html format by outputting to a default file first&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; and then opening it with the default browser.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; (a form could have been used to do this, but tried to keep this info&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; class usable for Console applications as well)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowException()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShowExceptionFile(&lt;FONT color=#a31515&gt;"default"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Shows the exception in a browser, see &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ShowException()"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; for more info&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="ex"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowException(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GetInfo(ex).ShowException();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; First outputs the file (see &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="CreateExceptionFile"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;), then opens&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; it with the default connected viewer.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB: the file is NOT appended. Existing info will be overwritten&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB2: if no writing is necessary&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowExceptionFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShowExceptionFile(file, &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Same as &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ShowExceptionFile(string)"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;, but with the option&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; to choose whether to append or not&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="append"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowExceptionFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; append)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CreateExceptionFile(file, append);&lt;BR&gt;ShowFile(file);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; All this does is run the file (using System.Diagnostics.Process.Start)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; If an exception file is to be shown, make sure it is created first, or&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; use &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ShowExceptionFile"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; to create and show the file instead&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; of this method&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckFile(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; file);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Process&lt;/FONT&gt;.Start(file);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Appends complete directory information to a name (see code for details ;-) )&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; CheckFile(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;FileInfo&lt;/FONT&gt; fi = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;FileInfo&lt;/FONT&gt;(file);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (fi.FullName.Length &amp;gt; file.Length)&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//no directory provided -&amp;gt; use application directory&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; dir =&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Environment&lt;/FONT&gt;.GetFolderPath(&lt;FONT color=#2b91af&gt;Environment&lt;/FONT&gt;.&lt;FONT color=#2b91af&gt;SpecialFolder&lt;/FONT&gt;.ApplicationData)&lt;BR&gt;+ &lt;FONT color=#a31515&gt;"\\Exceptions"&lt;/FONT&gt;&lt;BR&gt;+ &lt;FONT color=#a31515&gt;"\\"&lt;/FONT&gt; + &lt;FONT color=#2b91af&gt;AppDomain&lt;/FONT&gt;.CurrentDomain.FriendlyName&lt;BR&gt;+ &lt;FONT color=#a31515&gt;"\\"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (!&lt;FONT color=#2b91af&gt;Directory&lt;/FONT&gt;.Exists(dir))&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Directory&lt;/FONT&gt;.CreateDirectory(dir);&lt;/DIV&gt;file = dir + file;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (fi.Extension.Length == 0) file += &lt;FONT color=#a31515&gt;".htm"&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Outputs the exception to the specified file. Make sure the extension can&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; be read by explorer. If no extension is provided, ".htm" is used&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="append"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; CreateExceptionFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; append)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckFile(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; file);&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;StreamWriter&lt;/FONT&gt; sw = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;StreamWriter&lt;/FONT&gt;(file, append, System.Text.&lt;FONT color=#2b91af&gt;Encoding&lt;/FONT&gt;.ASCII))&lt;BR&gt;sw.Write(GetTotalMessage());&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlExceptionInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt; Exception;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; SqlExceptionInfo(&lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt; ex)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;: &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;(ex)&lt;/DIV&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Exception = ex;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; HTML&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AnchorSQL = &lt;FONT color=#a31515&gt;"sqlinfo"&lt;/FONT&gt;;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendExceptionHeader()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.appendTop();&lt;BR&gt;appendTitle(&lt;FONT color=#a31515&gt;"SQL Errors ("&lt;/FONT&gt; + Exception.Errors.Count + &lt;FONT color=#a31515&gt;")"&lt;/FONT&gt;);&lt;BR&gt;openBlock(&lt;FONT color=#a31515&gt;"border:'1 gray solid';font-size:0.6em;margin-left:40;margin-right:20"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; Exception.Errors.Count; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendSQLError(i);&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendHeaderBottom()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.appendHeaderBottom();&lt;BR&gt;openHeaderLink(AnchorSQL);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"SQL info"&lt;/FONT&gt;).Append(&lt;FONT color=#a31515&gt;"&lt;/A&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; appendSQLError(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (index &amp;gt; 0) appendHR();&lt;FONT color=#2b91af&gt;&lt;BR&gt;SqlError&lt;/FONT&gt; se = Exception.Errors[index];&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"SQL class (severity)"&lt;/FONT&gt;, se.Class.ToString());&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Server"&lt;/FONT&gt;, se.Server);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"T-sql line number:"&lt;/FONT&gt;, se.LineNumber.ToString());&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Message"&lt;/FONT&gt;, se.Message);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Procedure"&lt;/FONT&gt;, se.Procedure);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Source"&lt;/FONT&gt;, se.Source);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Sql error number"&lt;/FONT&gt;, se.Number.ToString());&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadExceptionInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadException&lt;/FONT&gt; ReflectionTypeLoadException;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ReflectionTypeLoadExceptionInfo(&lt;FONT color=#2b91af&gt;ReflectionTypeLoadException&lt;/FONT&gt; Exception)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;: &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;(Exception)&lt;/DIV&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.ReflectionTypeLoadException = Exception;&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; e &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; ReflectionTypeLoadException.LoaderExceptions)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AddExtraInfo(GetInfo(e));&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AddExtraInfo(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;TextInfo&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"Error obtaining exception info: "&lt;/FONT&gt; + ex.Message));&lt;BR&gt;AddExtraInfo(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;TextInfo&lt;/FONT&gt;(e.Message));&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Wrapper around a &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="StackFrame"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;. Not that much added functionality, but&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; some properties instead of methods to be able to use easy databinding&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StackFrame&lt;/FONT&gt; Base;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ErrorFrame(&lt;FONT color=#2b91af&gt;StackFrame&lt;/FONT&gt; frame)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Base = frame;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Line&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetFileLineNumber(); }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; FileName&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetFileName(); }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; MethodName&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetMethod().Name; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; MethodSignature&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetMethod().ToString(); }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; FullMethodSignature&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; NameSpace + &lt;FONT color=#a31515&gt;" - "&lt;/FONT&gt; + MethodSignature; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; NameSpace&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetMethod().ReflectedType.FullName; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsUserCode&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Line &amp;gt; 0; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;MethodBase&lt;/FONT&gt; GetMethod()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Base.GetMethod();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetCode()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetCode(2);&lt;/DIV&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="Lines"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;indicates the amount of lines before and after the Errorline to show &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetCode(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Lines)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!IsUserCode)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#a31515&gt;"No code available for a system method"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;string&lt;/FONT&gt; file = FileName;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (file == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; || !&lt;FONT color=#2b91af&gt;File&lt;/FONT&gt;.Exists(file))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#a31515&gt;"File not found!"&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;try&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; AppendCode(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt;(), Lines).ToString();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#a31515&gt;"Error obtaining code information: "&lt;/FONT&gt; + ex.Message;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;internal&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; AppendCode(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Lines)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; line = Line, from = line - Lines, to = line + Lines, curline = 0; ;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; len = sb.Length;&lt;FONT color=#0000ff&gt;&lt;BR&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; space = &lt;FONT color=#a31515&gt;"&amp;amp;nbsp;"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; tab = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; tabcount = 0; tabcount &amp;lt; 4; tabcount++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;tab += space;&lt;/DIV&gt;}&lt;FONT color=#2b91af&gt;&lt;BR&gt;StreamReader&lt;/FONT&gt; sr = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sr = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StreamReader&lt;/FONT&gt;(FileName);&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; l;&lt;FONT color=#0000ff&gt;&lt;BR&gt;while&lt;/FONT&gt; ((l = sr.ReadLine()) != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (++curline &amp;gt;= from)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (curline &amp;gt; to) &lt;FONT color=#0000ff&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (line == curline) sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;B&amp;gt;"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(l.Replace(&lt;FONT color=#a31515&gt;"\t"&lt;/FONT&gt;, tab).Replace(&lt;FONT color=#a31515&gt;" "&lt;/FONT&gt;, space));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (line == curline) sb.Append(&lt;FONT color=#a31515&gt;"&lt;/B&gt;"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Length = len;&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"Error obtaining code information: "&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(ex.Message);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;finally&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (sr != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) sr.Close();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; sb;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;interface&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Collections.Generic;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Linq;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Text;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Reflection;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Diagnostics;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Data.SqlClient;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.IO;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;namespace&lt;/FONT&gt; Subro.Exceptions&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The original Exception where this info object is based on&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; Exception;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ExceptionInfo(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Exception = ex;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//get stack trace information&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;BR&gt;StackTrace&lt;/FONT&gt; st = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StackTrace&lt;/FONT&gt;(Exception, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;BR&gt;frames = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt;[st.FrameCount];&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; frames.Length; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;frames[i] = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt;(st.GetFrame(i));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (usercodeindex == -1 &amp;amp;&amp;amp; frames[i].IsUserCode)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;usercodeindex = i;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//determine total exception count&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;while&lt;/FONT&gt; (ex != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;exceptioncount++;&lt;BR&gt;ex = ex.InnerException;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; General properties&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The date/time of the exception. This is not the time the exception&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; was thrown, but rather when the ExceptionInfo object was created.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; For most debugging purposes that difference in time does not matter, but&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; when the exact time is required, do not rely on this value!&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DateTime&lt;/FONT&gt; DateTime = &lt;FONT color=#2b91af&gt;DateTime&lt;/FONT&gt;.Now;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;ErrorFrame&lt;/FONT&gt;[] frames;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets the different StackFrames that led to this&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt;[] Frames&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; frames; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; FrameCount&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; frames.Length; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; usercodeindex = -1;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Returns the index of the first frame that occured in user code (and thus&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; the first frame that is actually debuggable ;-) )&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; UserFrameIndex&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; usercodeindex; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Information about the last step before this error occured. The returned&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; object contains information about that step, such as the method that was running.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; When running in debug, the pdb files also provide info on the original code filename and line number&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt; LastFrame&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (frames.Length &amp;gt; 0) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; frames[0];&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Where &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="LastFrame"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; returns the last step in general, this property&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; returns the last step in non-system code&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;seealso cref="UserFrameIndex"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt; LastUserFrame&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (usercodeindex == -1) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; frames[usercodeindex];&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The exception type&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Type&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Exception.GetType().Name; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Mail NB: framework specific&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This mail section was created in .net 2.0, you might&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; want to remove this part or alter it if using earlier versions&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Sends an email to the specified address&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="To"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Send(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; To)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; m = GetExceptionMail();&lt;BR&gt;m.To.Add(To);&lt;BR&gt;System.Net.Mail.&lt;FONT color=#2b91af&gt;SmtpClient&lt;/FONT&gt; client = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Net.Mail.&lt;FONT color=#2b91af&gt;SmtpClient&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"mail"&lt;/FONT&gt;);&lt;BR&gt;client.Send(m);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Send the exception info (in html format) to the addressee.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB, some presumtions were made when trying to create a quick and &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; dirty send method. Safest way it to use &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="FillMailMessage"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; or &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="GetExceptionMail"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; and do the sending manually&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="ex"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="To"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Send(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; To)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GetInfo(ex).Send(To);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets a mailmessage instance containing the Exception info.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The from address is tried to be set to a custom address. If this&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; fails (or if you want to set a custom one), you'll have to set the From&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; address manually.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; GetExceptionMail(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetInfo(ex).GetExceptionMail();&lt;/DIV&gt;}&lt;BR&gt;System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; GetExceptionMail()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; m = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt;();&lt;BR&gt;FillMailMessage(m);&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;m.From = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Net.Mail.&lt;FONT color=#2b91af&gt;MailAddress&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"Exceptions@"&lt;/FONT&gt; + &lt;FONT color=#2b91af&gt;Environment&lt;/FONT&gt;.UserDomainName);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; { }&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; m;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Sets the body of the message to hold the exeption info&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="m"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; FillMailMessage(System.Net.Mail.&lt;FONT color=#2b91af&gt;MailMessage&lt;/FONT&gt; m)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;m.IsBodyHtml = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;m.Body = GetTotalMessage();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; ExtraInfo NB&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This class can hold extra info for an &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ExceptionInfo"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Its main purpose is to output this extra info to the html text&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;abstract&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; With this method, the extra info writes itself (in html format) to&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; the stringbuilder&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="sb"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;abstract&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;implicit&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;operator&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; text)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;TextInfo&lt;/FONT&gt;(text);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValuesInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt;&amp;gt; values = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt;&amp;gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name, Text;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Header;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddText(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; text)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AddValue(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;, text);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddValue(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Value)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ValueEntry&lt;/FONT&gt; v = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt;();&lt;BR&gt;v.Name = Name;&lt;BR&gt;v.Text = Value;&lt;BR&gt;values.Add(v);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.openBlock(1, 1);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Header != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;"&lt;/FONT&gt;).Append(Header).Append(&lt;FONT color=#a31515&gt;":&lt;/B&gt;&lt;/I&gt;"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (values.Count &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.openBlock(1, 1);&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;ValueEntry&lt;/FONT&gt; ve &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; values)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ve.Name == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(ve.Text);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.appendInfo(ve.Name, ve.Text);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;BR&gt;ei.closeBlock();&lt;/DIV&gt;}&lt;BR&gt;ei.closeBlock();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Adds plain text as extrainfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;TextInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Text;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; TextInfo(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; text) { Text = text; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(Text);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; SQL extra info&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Used to display the history of sql strings.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SQlStringInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt; list = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Add(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; sql)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;list.Add(sql);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddRange(&lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt; values)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;list.AddRange(values);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.openBlock(1);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;B&amp;gt;Recent sql strings:&lt;/B&gt;"&lt;/FONT&gt;);&lt;BR&gt;ei.openBlock(&lt;FONT color=#a31515&gt;"border:'gray 1 solid';margin-left:15"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; i = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt; sql &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; list)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;SPAN&amp;gt;&amp;lt;B&amp;gt;--"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(i++ + 1)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"--&lt;/B&gt;&amp;lt;span style='margin-left:10'&amp;gt;"&lt;/FONT&gt;)&lt;BR&gt;.Append(sql)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;BR&gt;ei.closeBlock();&lt;BR&gt;ei.closeBlock();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Add one or more sql strings to the list to be displayed in the recent&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; sql list.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This is usefull when you keep a list of recent executed sql strings somewhere&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; and want to include them in the exception output&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="SQL"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddSQL(&lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt; SQL)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (sqls == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sqls = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SQlStringInfo&lt;/FONT&gt;();&lt;BR&gt;AddExtraInfo(sqls);&lt;/DIV&gt;}&lt;BR&gt;sqls.AddRange(SQL);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;SQlStringInfo&lt;/FONT&gt; sqls;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Add &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ExtraInfo"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;. You can also use a string as parameter&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="ei"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; AddExtraInfo(&lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt; ei)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (extrainfo == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) extrainfo = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&amp;gt;();&lt;BR&gt;extrainfo.Add(ei);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&amp;gt; extrainfo;&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; returns the amount of &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ExtraInfo"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; objects added&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; ExtraInfoCount&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (extrainfo == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; extrainfo.Count;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; HTML&lt;FONT color=#0000ff&gt;&lt;BR&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; ExtraInfoAnchor = &lt;FONT color=#a31515&gt;"ExtraInfo"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendExtraInfo()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (extrainfo != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendBR();&lt;BR&gt;appendHR();&lt;BR&gt;openBlock(2);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;B&amp;gt;&amp;lt;A name='"&lt;/FONT&gt;).Append(ExtraInfoAnchor)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(&lt;FONT color=#a31515&gt;"'&amp;gt;Extra Info&lt;/A&gt;&lt;/B&gt;&amp;lt;BR&amp;gt;&amp;lt;HR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;openBlock(&lt;FONT color=#a31515&gt;"margin-left:10;font-size:smaller"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt; ei &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; extrainfo)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.AppendHTML(sb, &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Static&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Rather than creating a new instance manually, use&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; this method to choose the proper exception object&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="ex"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; GetInfo(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ex == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ex &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlExceptionInfo&lt;/FONT&gt;(ex &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ex &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadException&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadExceptionInfo&lt;/FONT&gt;(ex &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadException&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;(ex);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;implicit&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;operator&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetInfo(ex);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Inner Exceptions&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; exceptioncount;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; returns the total number of exceptions (Main Exception + all inner exceptions)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; ExceptionCount&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; exceptioncount; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; html information&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; BEWARE: this code is manufactured to quickly create the html information &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; and is not nicely constructed for reusability.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; A bit more friendly code for html is used in the AutoFormatter (http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx) ,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; but did not use that here to keep the code portable for fresh applications&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets information about this exception and all inner exceptions in HTML format&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetTotalMessage()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; AppendMessage(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt;()).ToString();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This stringbuilder is only used in the html functions&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openBlock()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openBlock(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Border)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(Border, 0);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openBlock(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Border, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Indent)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(&lt;FONT color=#a31515&gt;"Border='"&lt;/FONT&gt; + Border + &lt;FONT color=#a31515&gt;"px black solid'"&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;+ (Indent &amp;gt; 0 ? &lt;FONT color=#a31515&gt;"margin-left="&lt;/FONT&gt; + (Indent * 20) : &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openBlock(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Style)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openclose(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;, Style);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; closeBlock()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openclose(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; openclose(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; close, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Style)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (close) sb.Append(&lt;FONT color=#a31515&gt;"/"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"DIV"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Style != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;" Style=\""&lt;/FONT&gt;).Append(Style).Append(&lt;FONT color=#a31515&gt;"\""&lt;/FONT&gt;);&lt;/DIV&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; AppendMessage(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; builder)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb = builder;&lt;BR&gt;openBlock(2);&lt;BR&gt;appendTop();&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Exception info created on"&lt;/FONT&gt;, DateTime.ToString());&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Application"&lt;/FONT&gt;, &lt;FONT color=#2b91af&gt;AppDomain&lt;/FONT&gt;.CurrentDomain.FriendlyName);&lt;BR&gt;openBlock(&lt;FONT color=#a31515&gt;"font-size:smaller;margin-left:20"&lt;/FONT&gt;);&lt;BR&gt;appendHeaderBottom();&lt;BR&gt;closeBlock();&lt;FONT color=#2b91af&gt;&lt;BR&gt;Exception&lt;/FONT&gt; ex = Exception;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; depth = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;while&lt;/FONT&gt; (append(ex, depth++)) { ex = ex.InnerException; }&lt;BR&gt;appendExtraInfo();&lt;BR&gt;appendBottom();&lt;BR&gt;closeBlock();&lt;BR&gt;sb = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; builder;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; appendMessage()&lt;BR&gt;{&lt;BR&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;.AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.sb = sb;&lt;BR&gt;openBlock(2, 1);&lt;BR&gt;appendTitle(&lt;FONT color=#a31515&gt;"Exception Info"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AppendMessage(sb);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(&lt;FONT color=#a31515&gt;"Error obtaining exception info: "&lt;/FONT&gt; + ex.Message);&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gives inheriting classes the possibility to append html text at the top&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; of the info block, inside the main border&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendTop()&lt;BR&gt;{&lt;BR&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gives inheriting classes the possibility to append html inside the header&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; of the info block.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The base functionality adds links to the main and inner exceptions (if there are any)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendHeaderBottom()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (exceptioncount &amp;gt; 1)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; exceptioncount; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openHeaderLink(AnchorNamePrefix + i);&lt;BR&gt;AppendExceptionTitle(i);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&lt;/A&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (extrainfo != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openHeaderLink(ExtraInfoAnchor);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"Extra Info&lt;/A&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gives inheriting classes the possibility to append html inside the header&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; of the Exception info block.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendExceptionHeader()&lt;BR&gt;{&lt;BR&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Used to add links in the header&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="href"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="name"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; openHeaderLink(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; href)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;A style='margin-left:15' href='#"&lt;/FONT&gt;).Append(href)
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Append(&lt;FONT color=#a31515&gt;"'&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gives inheriting classes the possibility to append html text at the&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; end of the exception info, but before the main block is closed&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendBottom()&lt;BR&gt;{&lt;BR&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The prefix of the name that is added per depth so that code can&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; point directly to one of the inner exceptions&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The Name for the first exception is ExDepth0 , the second ExDepth1 and so forth.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Pointing to it in a href is subseqeuntly done with href = "#ExDepthX" where X is the inner exception index&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AnchorNamePrefix = &lt;FONT color=#a31515&gt;"ExDepth"&lt;/FONT&gt;;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; AppendExceptionTitle(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; depth)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (depth == 0)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"Main Exception"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"Inner Exception ["&lt;/FONT&gt;).Append(depth).Append(&lt;FONT color=#a31515&gt;"]"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; append(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; depth)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ex == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;BR&gt;appendHR();&lt;FONT color=#008000&gt;&lt;BR&gt;//add anchor information&lt;/FONT&gt;&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;A NAME=\""&lt;/FONT&gt;).Append(AnchorNamePrefix).Append(depth)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(&lt;FONT color=#a31515&gt;"\" style='font-size:smaller'&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;AppendExceptionTitle(depth);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;": &lt;/A&gt;&amp;lt;span style='background-color:#990000;color:white;font-weight:bolder;width:100%'&amp;gt;"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(ex.Message)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;openBlock(1, 1);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (depth &amp;gt; 0)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ExceptionInfo&lt;/FONT&gt; ei = GetInfo(ex);&lt;BR&gt;ei.sb = sb;&lt;BR&gt;ei.appendHeader();&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ei.appendExtraInfo();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex2)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(&lt;FONT color=#a31515&gt;"Error writing extra info: "&lt;/FONT&gt; + ex2.Message);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendHeader();&lt;/DIV&gt;closeBlock();&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;usercodecolor = &lt;FONT color=#a31515&gt;"lightblue"&lt;/FONT&gt;,&lt;BR&gt;systemcodecolor = &lt;FONT color=#a31515&gt;"beige"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;void&lt;/FONT&gt; appendHeader()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(&lt;FONT color=#a31515&gt;"border:'1 green solid';"&lt;/FONT&gt;);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Type"&lt;/FONT&gt;, Type);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (usercodeindex &amp;gt;= 0)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ErrorFrame&lt;/FONT&gt; ef = LastUserFrame;&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Last user code"&lt;/FONT&gt;, ef.FullMethodSignature + &lt;FONT color=#a31515&gt;" (Line "&lt;/FONT&gt; + ef.Line + &lt;FONT color=#a31515&gt;" in '"&lt;/FONT&gt; + ef.FileName + &lt;FONT color=#a31515&gt;"')"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;BR&gt;appendExceptionHeader();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (frames.Length &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(&lt;FONT color=#a31515&gt;"Stack"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;span style='margin-left:20;font-size:smaller'&amp;gt;Legend: "&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; 2; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;span style=\"background-color:"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(i == 0 ? systemcodecolor : usercodecolor)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"border='1 black solid';margin-left:15\"&amp;gt;"&lt;/FONT&gt;)&lt;BR&gt;.Append(i == 0 ? &lt;FONT color=#a31515&gt;"No debug information"&lt;/FONT&gt; : &lt;FONT color=#a31515&gt;"With debug information"&lt;/FONT&gt;)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;"&lt;/FONT&gt;);&lt;BR&gt;openBlock(&lt;FONT color=#a31515&gt;"margin-left:40;font-size:smaller"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt; ef &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; frames)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendStack(ef);&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"--No StackTrace available--"&lt;/FONT&gt;);&lt;/DIV&gt;closeBlock();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendTitle(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;B&amp;gt;"&lt;/FONT&gt;).Append(Name).Append(&lt;FONT color=#a31515&gt;"&lt;/B&gt;: "&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendInfo(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Value)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(Name);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;SPAN style='position:relative;left:20'&amp;gt;"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(Value).Append(&lt;FONT color=#a31515&gt;"&lt;/SPAN&gt;&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendHR()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;HR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendBR()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; appendStack(&lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt; ef)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;openBlock(&lt;FONT color=#a31515&gt;"border:'1 solid black';background-color:"&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;+ (ef.IsUserCode ? usercodecolor : systemcodecolor)&lt;BR&gt;);&lt;/DIV&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;span style='font-size:larger;font-style:italic;color:olive'&amp;gt;&amp;lt;U&amp;gt;"&lt;/FONT&gt;);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Method"&lt;/FONT&gt;, ef.MethodName);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&lt;/U&gt;&lt;/SPAN&gt;"&lt;/FONT&gt;);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"NameSpace"&lt;/FONT&gt;, ef.NameSpace);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Full Signature"&lt;/FONT&gt;, ef.MethodSignature);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (ef.IsUserCode)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendTitle(&lt;FONT color=#a31515&gt;"File"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;A href='"&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(ef.FileName).Append(&lt;FONT color=#a31515&gt;"'&amp;gt;"&lt;/FONT&gt;).Append(ef.FileName).Append(&lt;FONT color=#a31515&gt;"&lt;/A&gt;"&lt;/FONT&gt;)&lt;BR&gt;.Append(&lt;FONT color=#a31515&gt;"&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;appendInfo(&lt;FONT color=#a31515&gt;"Line"&lt;/FONT&gt;, ef.Line.ToString());&lt;BR&gt;appendTitle(&lt;FONT color=#a31515&gt;"Code snippet"&lt;/FONT&gt;);&lt;BR&gt;openBlock(&lt;FONT color=#a31515&gt;"border='1 black dotted';margin-left=25"&lt;/FONT&gt;);&lt;BR&gt;ef.AppendCode(sb, CodeSnippetExtraLines);&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Only applies when getting html text. This is the number of lines on&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; each side of the offending line, that should be included in code snippets&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; CodeSnippetExtraLines = 3;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; ToString()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Exception.ToString();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; IO&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Shows the exception in html format by outputting to a default file first&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; and then opening it with the default browser.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; (a form could have been used to do this, but tried to keep this info&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; class usable for Console applications as well)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowException()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShowExceptionFile(&lt;FONT color=#a31515&gt;"default"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Shows the exception in a browser, see &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ShowException()"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; for more info&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="ex"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowException(&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GetInfo(ex).ShowException();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; First outputs the file (see &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="CreateExceptionFile"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;), then opens&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; it with the default connected viewer.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB: the file is NOT appended. Existing info will be overwritten&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB2: if no writing is necessary&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowExceptionFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShowExceptionFile(file, &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Same as &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ShowExceptionFile(string)"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;, but with the option&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; to choose whether to append or not&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="append"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowExceptionFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; append)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CreateExceptionFile(file, append);&lt;BR&gt;ShowFile(file);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; All this does is run the file (using System.Diagnostics.Process.Start)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; If an exception file is to be shown, make sure it is created first, or&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; use &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ShowExceptionFile"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; to create and show the file instead&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; of this method&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckFile(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; file);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Process&lt;/FONT&gt;.Start(file);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Appends complete directory information to a name (see code for details ;-) )&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; CheckFile(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;FileInfo&lt;/FONT&gt; fi = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;FileInfo&lt;/FONT&gt;(file);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (fi.FullName.Length &amp;gt; file.Length)&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//no directory provided -&amp;gt; use application directory&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; dir =&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Environment&lt;/FONT&gt;.GetFolderPath(&lt;FONT color=#2b91af&gt;Environment&lt;/FONT&gt;.&lt;FONT color=#2b91af&gt;SpecialFolder&lt;/FONT&gt;.ApplicationData)&lt;BR&gt;+ &lt;FONT color=#a31515&gt;"\\Exceptions"&lt;/FONT&gt;&lt;BR&gt;+ &lt;FONT color=#a31515&gt;"\\"&lt;/FONT&gt; + &lt;FONT color=#2b91af&gt;AppDomain&lt;/FONT&gt;.CurrentDomain.FriendlyName&lt;BR&gt;+ &lt;FONT color=#a31515&gt;"\\"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (!&lt;FONT color=#2b91af&gt;Directory&lt;/FONT&gt;.Exists(dir))&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Directory&lt;/FONT&gt;.CreateDirectory(dir);&lt;/DIV&gt;file = dir + file;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (fi.Extension.Length == 0) file += &lt;FONT color=#a31515&gt;".htm"&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Outputs the exception to the specified file. Make sure the extension can&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; be read by explorer. If no extension is provided, ".htm" is used&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="file"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="append"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; CreateExceptionFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; file, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; append)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckFile(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; file);&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;StreamWriter&lt;/FONT&gt; sw = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;StreamWriter&lt;/FONT&gt;(file, append, System.Text.&lt;FONT color=#2b91af&gt;Encoding&lt;/FONT&gt;.ASCII))&lt;BR&gt;sw.Write(GetTotalMessage());&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlExceptionInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt; Exception;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; SqlExceptionInfo(&lt;FONT color=#2b91af&gt;SqlException&lt;/FONT&gt; ex)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;: &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;(ex)&lt;/DIV&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Exception = ex;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; HTML&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AnchorSQL = &lt;FONT color=#a31515&gt;"sqlinfo"&lt;/FONT&gt;;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendExceptionHeader()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.appendTop();&lt;BR&gt;appendTitle(&lt;FONT color=#a31515&gt;"SQL Errors ("&lt;/FONT&gt; + Exception.Errors.Count + &lt;FONT color=#a31515&gt;")"&lt;/FONT&gt;);&lt;BR&gt;openBlock(&lt;FONT color=#a31515&gt;"border:'1 gray solid';font-size:0.6em;margin-left:40;margin-right:20"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; Exception.Errors.Count; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;appendSQLError(i);&lt;/DIV&gt;}&lt;BR&gt;closeBlock();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; appendHeaderBottom()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.appendHeaderBottom();&lt;BR&gt;openHeaderLink(AnchorSQL);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"SQL info"&lt;/FONT&gt;).Append(&lt;FONT color=#a31515&gt;"&lt;/A&gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; appendSQLError(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (index &amp;gt; 0) appendHR();&lt;FONT color=#2b91af&gt;&lt;BR&gt;SqlError&lt;/FONT&gt; se = Exception.Errors[index];&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"SQL class (severity)"&lt;/FONT&gt;, se.Class.ToString());&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Server"&lt;/FONT&gt;, se.Server);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"T-sql line number:"&lt;/FONT&gt;, se.LineNumber.ToString());&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Message"&lt;/FONT&gt;, se.Message);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Procedure"&lt;/FONT&gt;, se.Procedure);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Source"&lt;/FONT&gt;, se.Source);&lt;BR&gt;appendInfo(&lt;FONT color=#a31515&gt;"Sql error number"&lt;/FONT&gt;, se.Number.ToString());&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadExceptionInfo&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ReflectionTypeLoadException&lt;/FONT&gt; ReflectionTypeLoadException;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ReflectionTypeLoadExceptionInfo(&lt;FONT color=#2b91af&gt;ReflectionTypeLoadException&lt;/FONT&gt; Exception)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;: &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;(Exception)&lt;/DIV&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.ReflectionTypeLoadException = Exception;&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; e &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; ReflectionTypeLoadException.LoaderExceptions)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AddExtraInfo(GetInfo(e));&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AddExtraInfo(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;TextInfo&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"Error obtaining exception info: "&lt;/FONT&gt; + ex.Message));&lt;BR&gt;AddExtraInfo(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;TextInfo&lt;/FONT&gt;(e.Message));&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Wrapper around a &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="StackFrame"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;. Not that much added functionality, but&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; some properties instead of methods to be able to use easy databinding&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ErrorFrame&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StackFrame&lt;/FONT&gt; Base;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ErrorFrame(&lt;FONT color=#2b91af&gt;StackFrame&lt;/FONT&gt; frame)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Base = frame;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Line&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetFileLineNumber(); }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; FileName&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetFileName(); }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; MethodName&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetMethod().Name; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; MethodSignature&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetMethod().ToString(); }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; FullMethodSignature&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; NameSpace + &lt;FONT color=#a31515&gt;" - "&lt;/FONT&gt; + MethodSignature; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; NameSpace&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Base.GetMethod().ReflectedType.FullName; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsUserCode&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Line &amp;gt; 0; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;MethodBase&lt;/FONT&gt; GetMethod()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Base.GetMethod();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetCode()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetCode(2);&lt;/DIV&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="Lines"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;indicates the amount of lines before and after the Errorline to show &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetCode(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Lines)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!IsUserCode)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#a31515&gt;"No code available for a system method"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;string&lt;/FONT&gt; file = FileName;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (file == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; || !&lt;FONT color=#2b91af&gt;File&lt;/FONT&gt;.Exists(file))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#a31515&gt;"File not found!"&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;try&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; AppendCode(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt;(), Lines).ToString();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#a31515&gt;"Error obtaining code information: "&lt;/FONT&gt; + ex.Message;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;internal&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; AppendCode(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Lines)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; line = Line, from = line - Lines, to = line + Lines, curline = 0; ;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; len = sb.Length;&lt;FONT color=#0000ff&gt;&lt;BR&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; space = &lt;FONT color=#a31515&gt;"&amp;amp;nbsp;"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; tab = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; tabcount = 0; tabcount &amp;lt; 4; tabcount++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;tab += space;&lt;/DIV&gt;}&lt;FONT color=#2b91af&gt;&lt;BR&gt;StreamReader&lt;/FONT&gt; sr = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sr = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StreamReader&lt;/FONT&gt;(FileName);&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; l;&lt;FONT color=#0000ff&gt;&lt;BR&gt;while&lt;/FONT&gt; ((l = sr.ReadLine()) != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (++curline &amp;gt;= from)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (curline &amp;gt; to) &lt;FONT color=#0000ff&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (line == curline) sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;B&amp;gt;"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(l.Replace(&lt;FONT color=#a31515&gt;"\t"&lt;/FONT&gt;, tab).Replace(&lt;FONT color=#a31515&gt;" "&lt;/FONT&gt;, space));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (line == curline) sb.Append(&lt;FONT color=#a31515&gt;"&lt;/B&gt;"&lt;/FONT&gt;);&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"&amp;lt;BR&amp;gt;"&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sb.Length = len;&lt;BR&gt;sb.Append(&lt;FONT color=#a31515&gt;"Error obtaining code information: "&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;.Append(ex.Message);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;finally&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (sr != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) sr.Close();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; sb;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;interface&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IExtraInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;void&lt;/FONT&gt; AppendHTML(&lt;FONT color=#2b91af&gt;StringBuilder&lt;/FONT&gt; sb, &lt;FONT color=#2b91af&gt;ExceptionInfo&lt;/FONT&gt; ei);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =1;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;&lt;BR&gt;&lt;B&gt;Example Usage&lt;/B&gt; &lt;!-- --Start of code block
--&gt;
&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 1px solid; BORDER-TOP: #000080 1px solid; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 1px solid; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 1px solid"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 1px solid; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'500pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" selcount="3" selold="1" sel="1"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; HEIGHT: 500pt; BACKGROUND-COLOR: #dcdcdc"&gt;Subro.Interaction.&lt;FONT color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; fbc = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; Subro.Interaction.&lt;FONT color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt;();&lt;BR&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//A thread is not obligatory of course, but for batch usage the thread&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//should be thread safe, this example shows that the feedback visualizer&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//is thread safe&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Thread&lt;/FONT&gt; t = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Thread&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;delegate&lt;/FONT&gt;()&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//shows&lt;/FONT&gt;&lt;BR&gt;fbc.Add(&lt;FONT color=#a31515&gt;"Start"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//feedback with progress bar&lt;/FONT&gt;&lt;BR&gt;Subro.Interaction.&lt;FONT color=#2b91af&gt;Feedback&lt;/FONT&gt; fb = fbc.Add(&lt;FONT color=#a31515&gt;"Working towards a known target"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; target = 150;&lt;BR&gt;fb.ProgressTarget = target;&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt;= target; i++)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Thread&lt;/FONT&gt;.Sleep(10);&lt;BR&gt;fb.Progress = i;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;fb = fbc.Add(&lt;FONT color=#a31515&gt;"busy with something"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; 100; i++)&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//Show alive shows a 'pulse' line to indicate that &lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//the process is still busy (used when the exact progress is unknown)&lt;/FONT&gt;&lt;BR&gt;fb.ShowAlive();&lt;FONT color=#2b91af&gt;&lt;BR&gt;Thread&lt;/FONT&gt;.Sleep(10);&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//Each feedback item in turn can have 'children' attached&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//this means that information you want to have accessible,&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//but not necessarily shown each time can be added easily.&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//each child item in turn of course can also posses child items&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//when the feedback is shown, an 'i' button will appear to&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//indicate there is extra information available&lt;/FONT&gt;&lt;BR&gt;fb.Children.Add(&lt;FONT color=#a31515&gt;"Proccessed "&lt;/FONT&gt; + i.ToString());&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//special feedback items such as excpetions are available as&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//well. Exception example&lt;/FONT&gt;&lt;BR&gt;fbc.Add(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"If something went wrong, you would find the exception info here"&lt;/FONT&gt;));&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//of course custom feedback items (inheriting from Feedback)&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//could be added as well, where you can show your own custom&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//info, eg, you could show your own form when the information&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//button is clicked by overriding the ShowExtraInfo method&lt;/DIV&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//instead of, or after,&amp;nbsp;&amp;nbsp;showing, the results could also be&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//saved (or mailed), eg for saving:&lt;/FONT&gt;&lt;BR&gt;fbc.Save(&lt;FONT color=#a31515&gt;@"c:\temp\testresults.htm"&lt;/FONT&gt;);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;});&lt;BR&gt;t.IsBackground = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;t.Start();&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//if no feedbackform was created, the feedback would still&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//be gathered, without the (relatively small) overhead of the feedback&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;BR&gt;fbc.ShowDialog();&lt;FONT color=#008000&gt;&lt;BR&gt;//other options are non modal Show and ShowHTML&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//The latter outputs all feedback to a html page with the complete overview&lt;/DIV&gt;&lt;/FONT&gt;&lt;BR&gt;Subro.Interaction.&lt;FONT color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt; fbc = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; Subro.Interaction.&lt;FONT color=#2b91af&gt;FeedbackCollection&lt;/FONT&gt;();&lt;BR&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//A thread is not obligatory of course, but for batch usage the thread&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//should be thread safe, this example shows that the feedback visualizer&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//is thread safe&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Thread&lt;/FONT&gt; t = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Thread&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;delegate&lt;/FONT&gt;()&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//shows&lt;/FONT&gt;&lt;BR&gt;fbc.Add(&lt;FONT color=#a31515&gt;"Start"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//feedback with progress bar&lt;/FONT&gt;&lt;BR&gt;Subro.Interaction.&lt;FONT color=#2b91af&gt;Feedback&lt;/FONT&gt; fb = fbc.Add(&lt;FONT color=#a31515&gt;"Working towards a known target"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; target = 150;&lt;BR&gt;fb.ProgressTarget = target;&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt;= target; i++)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Thread&lt;/FONT&gt;.Sleep(10);&lt;BR&gt;fb.Progress = i;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;fb = fbc.Add(&lt;FONT color=#a31515&gt;"busy with something"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; 100; i++)&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//Show alive shows a 'pulse' line to indicate that &lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//the process is still busy (used when the exact progress is unknown)&lt;/FONT&gt;&lt;BR&gt;fb.ShowAlive();&lt;FONT color=#2b91af&gt;&lt;BR&gt;Thread&lt;/FONT&gt;.Sleep(10);&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//Each feedback item in turn can have 'children' attached&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//this means that information you want to have accessible,&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//but not necessarily shown each time can be added easily.&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//each child item in turn of course can also posses child items&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//when the feedback is shown, an 'i' button will appear to&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//indicate there is extra information available&lt;/FONT&gt;&lt;BR&gt;fb.Children.Add(&lt;FONT color=#a31515&gt;"Proccessed "&lt;/FONT&gt; + i.ToString());&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//special feedback items such as excpetions are available as&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//well. Exception example&lt;/FONT&gt;&lt;BR&gt;fbc.Add(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"If something went wrong, you would find the exception info here"&lt;/FONT&gt;));&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//of course custom feedback items (inheriting from Feedback)&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//could be added as well, where you can show your own custom&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//info, eg, you could show your own form when the information&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//button is clicked by overriding the ShowExtraInfo method&lt;/DIV&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//instead of, or after,&amp;nbsp;&amp;nbsp;showing, the results could also be&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//saved (or mailed), eg for saving:&lt;/FONT&gt;&lt;BR&gt;fbc.Save(&lt;FONT color=#a31515&gt;@"c:\temp\testresults.htm"&lt;/FONT&gt;);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;});&lt;BR&gt;t.IsBackground = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;t.Start();&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//if no feedbackform was created, the feedback would still&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//be gathered, without the (relatively small) overhead of the feedback&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;BR&gt;fbc.ShowDialog();&lt;FONT color=#008000&gt;&lt;BR&gt;//other options are non modal Show and ShowHTML&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//The latter outputs all feedback to a html page with the complete overview&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =1;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/8983.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>Continuous Control</title><link>http://blogs.vbcity.com/hotdog/archive/2006/10/26/6568.aspx</link><pubDate>Thu, 26 Oct 2006 08:48:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2006/10/26/6568.aspx</guid><description>&lt;P&gt;In short: the continuous control is&amp;nbsp;a control that in the designer can take any control (or multiple controls) and when bound to a bindingsource shows it as list of that entity of controls. Those having used access know the concept as a subform.&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;STRONG&gt;Click here for the source code: &lt;A href="http://blogs.vbcity.com/hotdog/archive/2006/10/26/6567.aspx"&gt;http://blogs.vbcity.com/hotdog/archive/2006/10/26/6567.aspx&lt;/A&gt; &lt;/STRONG&gt;(last update 6/12/06) 
&lt;HR id=null&gt;

&lt;P&gt;For a Step by step quick example guide, &lt;A href="http://blogs.vbcity.com/upload/hotdog/continuouscontrol/QuickStartExample.html"&gt;click here&lt;/A&gt;&lt;BR&gt;&lt;FONT size=1&gt;(The quick quickversion: add this control to a form, add a bindingsource, set the bindingsource property of the control to that bindingsource, drop some controls onto the continuous control (make sure they have databindings to the same source if they need to updated per record) and you're set to go.)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;If, by any chance you want to know about how the control came to be, (or if you're simply&amp;nbsp;have absolutely nothing interesting to do&amp;nbsp;;-) &amp;nbsp;), visit this link: &lt;A href="http://blogs.vbcity.com/hotdog/archive/2006/10/26/6571.aspx"&gt;http://blogs.vbcity.com/hotdog/archive/2006/10/26/6571.aspx&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Sample code will follow later&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
Screenshots:&lt;BR&gt;&lt;BR&gt;Designer view with some controls dropped onto it&lt;BR&gt;&lt;IMG src="/upload/hotdog/continuouscontrol/images/PanelSelected.jpg"&gt; &lt;BR&gt;Simple runtime: &lt;BR&gt;&lt;IMG src="/upload/hotdog/continuouscontrol/images/Runtime.jpg"&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;runtime with some options enabled: &lt;BR&gt;&lt;IMG src="/upload/hotdog/continuouscontrol/images/RuntimeExtended.jpg"&gt; &lt;/P&gt;
&lt;P&gt;
&lt;HR&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;Addition history&lt;BR&gt;1/12/06:&lt;BR&gt;* HeaderPanel option&lt;BR&gt;* LeftToRight option&lt;BR&gt;* fixed a small design time deviation when ShowSelectButtons was enabled&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;5/12/06:&lt;BR&gt;* Insertbuttons (ability to show insert buttons between each item)&lt;BR&gt;6/12/06:&lt;BR&gt;* DragDrop (autodrag to always allow drag and AllowReorder to automatically drag items to other positions)&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/6568.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>Source code continuous form</title><link>http://blogs.vbcity.com/hotdog/archive/2006/10/26/6567.aspx</link><pubDate>Thu, 26 Oct 2006 08:04:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2006/10/26/6567.aspx</guid><description>&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 1px solid; BORDER-TOP: #000080 1px solid; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 1px solid; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 1px solid"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 1px solid; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'125pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" selcount="3" selold="2" sel="2"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;FONT color=#0000ff&gt;#define&lt;/FONT&gt; IncludeDesignTimeSupport&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Collections.Generic;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.ComponentModel;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Drawing;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Text;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Windows.Forms;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//Legal mumbo jumbo:&lt;BR&gt;//(c) 2006 R.Verpalen, Subro Software&lt;BR&gt;//the control and code can be freely used, but the source may only be distributed through a site of the creator&lt;BR&gt;//at this time, that means blogs.vbcity.com/hotdog&lt;BR&gt;//That also means personal alterations are for your own use only ;-)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;namespace&lt;/FONT&gt; Subro.Controls&lt;BR&gt;{&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Continuous control: drag any control or number of controls onto it's design surface, attach&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; a bindingsource and a continous 'subform' is the result&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;remarks&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Needed references:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the default windows forms: System,System.Drawing,System.Windows.Forms&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for design time functionality: System.Design&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Although the class can't be designed directly (due to the way&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; visual studio handles the designer creation), but inheriting classes&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; and instances dropped onto another designer support full design&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; time functionality&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/remarks&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;[&lt;FONT color=#2b91af&gt;Designer&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(ContinuousControlDesigner))]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Designer&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(ContinuousControlDocumentDesigner), &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(System.ComponentModel.Design.&lt;FONT color=#2b91af&gt;IRootDesigner&lt;/FONT&gt;))]&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;#endif&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;[&lt;FONT color=#2b91af&gt;DefaultProperty&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"BindingSource"&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;partial&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;Panel&lt;/FONT&gt;, &lt;FONT color=#2b91af&gt;ISupportInitialize&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;#region&lt;/FONT&gt; constructor&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Panel&lt;/FONT&gt; scrollpanel = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Panel&lt;/FONT&gt;();&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; ContinuousControl()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Init();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; Init()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Name = &lt;FONT color=#a31515&gt;"ContinuousControl"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.MinimumSize = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt;(100, 24);&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.BorderStyle = DefaultBorderStyle;&lt;BR&gt;scrollpanel.AutoScroll = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;scrollpanel.Dock = &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;BR&gt;scrollpanel.BackColor = &lt;FONT color=#2b91af&gt;Color&lt;/FONT&gt;.Gray;&lt;BR&gt;Controls.Add(scrollpanel);&lt;BR&gt;mainpanel = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;MainPanel&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;BR&gt;instance = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ControlInstance&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.NavigatorStyle = GetDefaultNavigatorStyle();&lt;BR&gt;valfailedaction = GetDefaultValidationFailedAction();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; designer support&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;//this region contains the small designer part that's always&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//included for easy compilation&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//the actual design time support is in the partial class further down&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//and can be omitted if wanted for the final release.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;//properties windows category constants&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; CategoryPrefix = &lt;FONT color=#a31515&gt;" "&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; DataCategory = CategoryPrefix + &lt;FONT color=#a31515&gt;"Data"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; ItemCategory = CategoryPrefix + &lt;FONT color=#a31515&gt;"Item settings"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; NavigatorCategory = CategoryPrefix + &lt;FONT color=#a31515&gt;"Navigator"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; HeaderCategory = CategoryPrefix + &lt;FONT color=#a31515&gt;"Header"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; BehaviorCategory = CategoryPrefix + &lt;FONT color=#a31515&gt;"Behavior"&lt;/FONT&gt;;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Only used for design time functionality for inheritors&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IComponent&lt;/FONT&gt; _Instance;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;#endif&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; supporting controls&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;ControlInstance&lt;/FONT&gt; instance;&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Direct access to the controls of the main record instance.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Controls added in design time are also serialized through this property&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Content)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ControlCollection&lt;/FONT&gt; InstanceControls&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; instance.Controls; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Designer&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;InstanceDesigner&lt;/FONT&gt;))]&lt;BR&gt;[System.ComponentModel.Design.Serialization.&lt;FONT color=#2b91af&gt;DesignerSerializer&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;typeof&lt;/FONT&gt;(System.ComponentModel.Design.Serialization.&lt;FONT color=#2b91af&gt;CodeDomSerializer&lt;/FONT&gt;),&lt;FONT color=#0000ff&gt;&lt;BR&gt;typeof&lt;/FONT&gt;(System.ComponentModel.Design.Serialization.&lt;FONT color=#2b91af&gt;CodeDomSerializer&lt;/FONT&gt;))] &lt;FONT color=#008000&gt;//this serializer is attached to make sure the inheriting classes will not serialize properties of the protected instance&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;&lt;/DIV&gt;#endif&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ControlInstance&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt; owner;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ControlInstance(&lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt; Owner)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;BackColor = Owner.BackColor;&lt;BR&gt;Owner.mainpanel.Controls.Add(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.owner = Owner;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;Brush&lt;/FONT&gt; nonfocusbrush;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Color&lt;/FONT&gt; BackColor&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.BackColor;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.BackColor = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;nonfocusbrush = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Drawing.Drawing2D.&lt;FONT color=#2b91af&gt;HatchBrush&lt;/FONT&gt;(
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;System.Drawing.Drawing2D.&lt;FONT color=#2b91af&gt;HatchStyle&lt;/FONT&gt;.Percent05 | System.Drawing.Drawing2D.&lt;FONT color=#2b91af&gt;HatchStyle&lt;/FONT&gt;.LightUpwardDiagonal,&lt;BR&gt;&lt;FONT color=#2b91af&gt;ControlPaint&lt;/FONT&gt;.Light(&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;),&lt;BR&gt;&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ChildPaint;&lt;FONT color=#008000&gt;&lt;BR&gt;/*&lt;BR&gt;protected override void OnPaintBackground(PaintEventArgs pevent)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if (ChildPaint &amp;amp;&amp;amp; !DesignMode)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pevent.Graphics.FillRectangle(nonfocusbrush, ClientRectangle);&lt;/DIV&gt;else&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base.OnPaintBackground(pevent);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;//ControlPaint.DrawBorder(pevent.Graphics, ClientRectangle, Color.Navy, ButtonBorderStyle.Solid);&lt;/DIV&gt;}&lt;/DIV&gt;}*/&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt; Owner&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; owner; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt; DefaultSize&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; owner == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; ? &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt;.Empty : owner.ItemSize;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;object&lt;/FONT&gt; Current&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; owner.source.Current; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnLayout(&lt;FONT color=#2b91af&gt;LayoutEventArgs&lt;/FONT&gt; levent)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!owner.IsInitializing)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Reset();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;base&lt;/FONT&gt;.OnLayout(levent);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; Reset()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;owner.ResetItemSize();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnMouseDown(&lt;FONT color=#2b91af&gt;MouseEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (e.Button == &lt;FONT color=#2b91af&gt;MouseButtons&lt;/FONT&gt;.Left)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.mainpanel.CheckDragStart();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;base&lt;/FONT&gt;.OnMouseDown(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnMouseMove(&lt;FONT color=#2b91af&gt;MouseEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (e.Button == &lt;FONT color=#2b91af&gt;MouseButtons&lt;/FONT&gt;.Left)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.mainpanel.CheckDragStart();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;base&lt;/FONT&gt;.OnMouseMove(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;internal&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Validate()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;owner.source.EndEdit();&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;Focus();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!Focused)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;bool&lt;/FONT&gt; AllowContinue;&lt;BR&gt;owner.OnRecordValidationFailed(&lt;FONT color=#0000ff&gt;out&lt;/FONT&gt; AllowContinue);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; AllowContinue;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;internal&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; CancelCurrentEdit()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;owner.source.CurrencyManager.CancelCurrentEdit();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; suspendlocationchange;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Sets the focus control to the proper position.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; This procedure is executed when the &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="BindingSource"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;'s&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; position is changes or when a layout property is changed&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; SetInstanceLocation()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (IsInitializing) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;&lt;/DIV&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.DesignMode)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetDesignTimeInstanceSize();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/DIV&gt;#endif&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (instance != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; !suspendlocationchange)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SuspendLayout();&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;InvalidateSelectionArea(instance.Bounds);&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; vis = SelectedIndex != -1;&lt;BR&gt;instance.Visible = vis;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (vis)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;instance.Bounds = GetNonPaddedItemBounds(SelectedIndex);&lt;BR&gt;scrollpanel.ScrollControlIntoView(instance);&lt;/DIV&gt;}&lt;BR&gt;InvalidateSelectionArea(instance.Bounds);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;ResumeLayout();&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;MainPanel&lt;/FONT&gt; mainpanel;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;MainPanel&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ContainerControl&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt; Owner;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; MainPanel(&lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt; Owner)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;BR&gt;Size = &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt;.Empty;&lt;BR&gt;Height = 0;&lt;BR&gt;Dock = &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Top;&lt;BR&gt;SetStyle(&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ControlStyles&lt;/FONT&gt;.OptimizedDoubleBuffer&lt;BR&gt;| &lt;FONT color=#2b91af&gt;ControlStyles&lt;/FONT&gt;.UserPaint&lt;BR&gt;| &lt;FONT color=#2b91af&gt;ControlStyles&lt;/FONT&gt;.AllPaintingInWmPaint&lt;BR&gt;, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/DIV&gt;Owner.scrollpanel.Controls.Add(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ProcessTabKey(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; forward)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!Owner.handletabs)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.ProcessTabKey(forward);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; ProccessTabKey(forward, ActiveControl);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;bool&lt;/FONT&gt; ProccessTabKey(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; forward, &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt; current)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;bool&lt;/FONT&gt; wrap = forward ? Owner.SelectedIndex &amp;lt; Owner.Count - 1 : Owner.SelectedIndex &amp;gt; 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; res = SelectNextControl(current, forward, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (!res &amp;amp;&amp;amp; wrap)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (forward)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.SelectedIndex++;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.SelectedIndex--;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; SelectNextControl(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;, forward, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#region&lt;/FONT&gt; Paint&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Paint(&lt;FONT color=#2b91af&gt;Graphics&lt;/FONT&gt; g)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Owner.ItemSize.Height == 0)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Owner.DrawStartInsertButton)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DrawInsertButton(-1, g);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#2b91af&gt;&lt;BR&gt;Point&lt;/FONT&gt; p = Owner.scrollpanel.AutoScrollPosition;&lt;BR&gt;p.X *= -1;&lt;BR&gt;p.Y *= -1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; from = Owner.GetIndex(p);&lt;BR&gt;p.Offset(Parent.Width, Parent.Height);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; sel = Owner.SelectedIndex;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; to = Owner.GetIndex(p) + 1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (to &amp;gt; Owner.Count &amp;amp;&amp;amp; !Owner.DesignMode) to = Owner.Count;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = from; i &amp;lt; to; i++)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (i == -1)&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//first insert button&lt;/FONT&gt;&lt;BR&gt;DrawInsertButton(i, g);&lt;FONT color=#0000ff&gt;&lt;BR&gt;continue&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;Rectangle&lt;/FONT&gt; bounds = Owner.GetNonPaddedItemBounds(i);&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;bool&lt;/FONT&gt; selected = i == sel;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;if&lt;/FONT&gt; (!Owner.DesignMode)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (selected ||
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;(Owner.multiselect &amp;amp;&amp;amp; Owner.GetItem(i).SelectedVersion == Owner.selectionversion))&lt;/DIV&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;selected = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;g.FillRectangle(SelectionBrush, Owner.GetSelectionBounds(bounds));&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 120pt"&gt;if&lt;/FONT&gt; (i != sel)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Bitmap&lt;/FONT&gt; bmp = Owner.GetBitmap(i);&lt;BR&gt;g.DrawImage(bmp, bounds.Location);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (i &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;g.DrawRectangle(&lt;FONT color=#2b91af&gt;Pens&lt;/FONT&gt;.Black, bounds);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//select buttons&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Owner.showselectbuttons)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DrawSelectButton(bounds, g, selected);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//insert buttons&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Owner.ShowInsertButtons)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;bool&lt;/FONT&gt; last = i == Owner.Count - 1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; ((Owner.DrawInsertButtonsBetweenItems &amp;amp;&amp;amp; !last)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;|| (Owner.DrawEndInsertButton &amp;amp;&amp;amp; last))&lt;BR&gt;DrawInsertButton(i, g);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//delete button&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Owner.ShowDeleteButtonPerItem)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DrawDeleteButton(i, g);&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//drag insert&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Owner.DragInsertIndex == i)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DrawDragInsert(i, g);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (to == Owner.Count &amp;amp;&amp;amp; Owner.DragInsertIndex == to)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DrawDragInsert(to, g);&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; DrawInsertButton(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index, &lt;FONT color=#2b91af&gt;Graphics&lt;/FONT&gt; g)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; bounds = Owner.GetInsertButtonBounds(Index);&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;DrawButton(bounds, g, Owner.insertbuttonicon,
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InsertButtonFocused == Index, Owner.source != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; !Owner.source.AllowNew, InsertButtonPushed == Index);&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; DrawSelectButton(&lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt; bounds, &lt;FONT color=#2b91af&gt;Graphics&lt;/FONT&gt; g, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsSelected)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Owner.lefttoright)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;bounds.Y = 0;&lt;BR&gt;bounds.Height = SelectButtonWidth;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;bounds.X = 0;&lt;BR&gt;bounds.Width = SelectButtonWidth;&lt;/DIV&gt;}&lt;BR&gt;g.DrawRectangle(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Pen&lt;/FONT&gt;(Owner.instance.BackColor), bounds);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (IsSelected)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;g.DrawImage(Owner.SelectedRecordImage,
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;bounds.X + (bounds.Width - Owner.SelectedRecordImage.Width) / 2,&lt;BR&gt;bounds.Top + (bounds.Height - Owner.SelectedRecordImage.Height) / 2);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; DrawButton(&lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt; bounds,&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Graphics&lt;/FONT&gt; g,&lt;FONT color=#2b91af&gt;&lt;BR&gt;Icon&lt;/FONT&gt; ic,&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; IsSelected, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsInActive, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsPushed)&lt;/DIV&gt;{&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (IsInActive)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ControlPaint&lt;/FONT&gt;.DrawButton(g, bounds, &lt;FONT color=#2b91af&gt;ButtonState&lt;/FONT&gt;.Inactive);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (IsSelected)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ControlPaint&lt;/FONT&gt;.DrawButton(g, bounds,
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;IsPushed&lt;BR&gt;? &lt;FONT color=#2b91af&gt;ButtonState&lt;/FONT&gt;.Pushed&lt;BR&gt;: &lt;FONT color=#2b91af&gt;ButtonState&lt;/FONT&gt;.Normal);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ControlPaint&lt;/FONT&gt;.DrawBorder(g, bounds, &lt;FONT color=#2b91af&gt;Color&lt;/FONT&gt;.Gray, &lt;FONT color=#2b91af&gt;ButtonBorderStyle&lt;/FONT&gt;.Outset);&lt;/DIV&gt;g.DrawIcon(ic, bounds.X + (bounds.Width - ic.Width) / 2, bounds.Y + (bounds.Height - ic.Height) / 2);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; DrawDeleteButton(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index, &lt;FONT color=#2b91af&gt;Graphics&lt;/FONT&gt; g)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; bounds = Owner.GetDeleteButtonBounds(Index);&lt;BR&gt;DrawButton(bounds, g, Owner.deletebuttonicon,
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Index == DeleteButtonFocused,&lt;BR&gt;Owner.source != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; !Owner.source.AllowRemove,&lt;BR&gt;DeleteButtonPushed == DeleteButtonFocused);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnPaint(&lt;FONT color=#2b91af&gt;PaintEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Paint(e.Graphics);&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.OnPaint(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Brush&lt;/FONT&gt; SelectionBrush = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SolidBrush&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;SystemColors&lt;/FONT&gt;.Highlight);&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; DragDrop&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AllowDrop&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.AllowDrop;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.AllowDrop = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;bool&lt;/FONT&gt; UseDrag&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; AllowDrop || Owner.autodrag;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;Point&lt;/FONT&gt; DragStartPoint;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; CheckDragStart()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!UseDrag) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Point&lt;/FONT&gt; p = LocalMousePosition;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; diff = &lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Abs(DragStartPoint.X - p.X)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;+ &lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Abs(DragStartPoint.Y - p.Y);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (diff &amp;gt; 3)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.OnDragStart(Owner.GetIndex(DragStartPoint));&lt;BR&gt;DragStartPoint = &lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt;.Empty;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnDragEnter(&lt;FONT color=#2b91af&gt;DragEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.OnDragEnter(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnDragOver(&lt;FONT color=#2b91af&gt;DragEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.OnDragOver(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnDragLeave(&lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.OnDragLeave(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnDragDrop(&lt;FONT color=#2b91af&gt;DragEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DragStartPoint = &lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt;.Empty;&lt;BR&gt;Owner.OnDragDrop(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; DragInsertHeight = 3;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;Rectangle&lt;/FONT&gt; GetDragInsertBounds(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; res = Owner.GetItemBounds(Index);&lt;FONT color=#0000ff&gt;&lt;BR&gt;float&lt;/FONT&gt; half = DragInsertHeight / 2f;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Index == 0)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;half = 0;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (Index == Owner.Count)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;half = DragInsertHeight;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (Owner.lefttoright)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res.Y = 0;&lt;BR&gt;res.Height = Height;&lt;BR&gt;res.X -= (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Ceiling(half);&lt;BR&gt;res.Width = DragInsertHeight;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res.X = 0;&lt;BR&gt;res.Width = Width;&lt;BR&gt;res.Y -= (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Ceiling(half);&lt;BR&gt;res.Height = DragInsertHeight;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; DrawDragInsert(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index, &lt;FONT color=#2b91af&gt;Graphics&lt;/FONT&gt; g)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;g.FillRectangle(&lt;FONT color=#2b91af&gt;Brushes&lt;/FONT&gt;.Yellow, GetDragInsertBounds(Index));&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; InvalidateDragInsert(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Invalidate(GetDragInsertBounds(Index));&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; SetSize()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; i = Owner.Count;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (i == 0)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Size = &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt;.Empty;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; r = Owner.GetItemBounds(i);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; diff = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Owner.ShowInsertButtons &amp;amp;&amp;amp; !Owner.DrawInsertButtonsBetweenItems)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Owner.DrawStartInsertButton)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;diff += InsertButtonHeight;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (Owner.DrawEndInsertButton)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;diff += InsertButtonHeight;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;BR&gt;Size = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt;(
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.lefttoright ? r.Left + diff : r.Right,&lt;BR&gt;Owner.lefttoright ? r.Bottom : r.Top + diff);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; buttons&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;int&lt;/FONT&gt; DeleteButtonFocused = -1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; DeleteButtonPushed = -1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt;? InsertButtonFocused;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt;? InsertButtonPushed;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; GetDeleteButtonFocused()&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Point&lt;/FONT&gt; p = LocalMousePosition;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; index = Owner.GetIndex(p);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Owner.GetDeleteButtonBounds(index).Contains(p))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; index;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; -1;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt;? GetInsertButtonFocused()&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Point&lt;/FONT&gt; p = LocalMousePosition;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; index = Owner.GetIndex(p);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Owner.GetInsertButtonBounds(index).Contains(p))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; index;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;Point&lt;/FONT&gt; LocalMousePosition&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; PointToClient(&lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt;.MousePosition);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;bool&lt;/FONT&gt; CheckButtonFocus()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Owner.ShowDeleteButtonPerItem)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; i = GetDeleteButtonFocused();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (i != DeleteButtonFocused)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InvalidateDeleteButton();&lt;BR&gt;DeleteButtonFocused = i;&lt;BR&gt;InvalidateDeleteButton();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (i != -1) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (Owner.ShowInsertButtons)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt;? i = GetInsertButtonFocused();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (i != InsertButtonFocused)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InvalidateInsertButton();&lt;BR&gt;InsertButtonFocused = i;&lt;BR&gt;InvalidateInsertButton();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (i != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; InvalidateDeleteButton()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DeleteButtonFocused != -1)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Invalidate(Owner.GetDeleteButtonBounds(DeleteButtonFocused));&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; InvalidateInsertButton()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (InsertButtonFocused != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Invalidate(Owner.GetInsertButtonBounds(InsertButtonFocused.Value));&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; Mouse events&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnMouseMove(&lt;FONT color=#2b91af&gt;MouseEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!DragStartPoint.IsEmpty)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckDragStart();&lt;/DIV&gt;}&lt;BR&gt;CheckButtonFocus();&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.OnMouseMove(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnMouseLeave(&lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Owner.ShowDeleteButtonPerItem)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckButtonFocus();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;base&lt;/FONT&gt;.OnMouseLeave(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnMouseDown(&lt;FONT color=#2b91af&gt;MouseEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (e.Button == &lt;FONT color=#2b91af&gt;MouseButtons&lt;/FONT&gt;.Left)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DeleteButtonPushed = DeleteButtonFocused;&lt;BR&gt;InsertButtonPushed = InsertButtonFocused;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (DeleteButtonFocused != -1)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InvalidateDeleteButton();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (InsertButtonFocused != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InvalidateInsertButton();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (UseDrag)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DragStartPoint = LocalMousePosition;&lt;/DIV&gt;SelectPointed();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.OnMouseDown(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnMouseUp(&lt;FONT color=#2b91af&gt;MouseEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DeleteButtonPushed != -1 &amp;amp;&amp;amp; DeleteButtonPushed == DeleteButtonFocused)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.source.RemoveAt(DeleteButtonPushed);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (InsertButtonPushed != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; InsertButtonFocused == InsertButtonPushed)&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//insert&lt;/FONT&gt;&lt;BR&gt;Owner.OnInsertItem(InsertButtonPushed.Value + 1);&lt;/DIV&gt;}&lt;BR&gt;DeleteButtonPushed = -1;&lt;BR&gt;InsertButtonPushed = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;BR&gt;DragStartPoint = &lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt;.Empty;&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.OnMouseUp(e);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; selection&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;bool&lt;/FONT&gt; IsMultiSelectClick&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Owner.multiselect)&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//return (ModifierKeys &amp;amp; (Keys.Control | Keys.Shift)) &amp;gt; 0;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; ModifierKeys == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Control;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; SelectPointed()&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Point&lt;/FONT&gt; p = LocalMousePosition;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; index = Owner.GetIndex(p);&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (IsMultiSelectClick)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.SwitchSelect(index);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;Owner.SelectedIndex = index;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;Owner.instance.Focus();&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;Rectangle&lt;/FONT&gt; r = Owner.GetItemBounds(index);&lt;BR&gt;p.X -= r.X;&lt;BR&gt;p.Y -= r.Y;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Control&lt;/FONT&gt; c = GetChild(Owner.instance, &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt;.MousePosition);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (c != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InvokeOnClick(c, &lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;BR&gt;c.Focus();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;Control&lt;/FONT&gt; GetChild(&lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt; c, &lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt; p)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Control&lt;/FONT&gt; child = c.GetChildAtPoint(c.PointToClient(p));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (child == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; c;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; GetChild(child, p);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; item collection&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;Item&lt;/FONT&gt;&amp;gt; items = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;Item&lt;/FONT&gt;&amp;gt;();&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Item&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Bitmap&lt;/FONT&gt; Bitmap;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; SelectedVersion;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Clear()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Bitmap = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; ResetIndex(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (IsItemCreated(Index))&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Index == SelectedIndex)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;items[Index].Bitmap = createBitmap();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;items[Index].Clear();&lt;BR&gt;mainpanel.Invalidate(GetItemBounds(Index));&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; IsItemCreated(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Index &amp;lt; items.Count;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Item&lt;/FONT&gt; GetItem(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;while&lt;/FONT&gt; (items.Count &amp;lt;= Index)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;items.Add(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Item&lt;/FONT&gt;());&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; items[Index];&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; ResetItems()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;items.Clear();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; bitmaps&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Bitmap&lt;/FONT&gt; GetBitmap(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Item&lt;/FONT&gt; res = GetItem(Index);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (res.Bitmap == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res.Bitmap = createBitmap(Index);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (!VariableSize &amp;amp;&amp;amp; res.Bitmap.Size != ItemSize)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res.Bitmap = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; GetBitmap(Index);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; res.Bitmap;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Bitmap&lt;/FONT&gt; createBitmap(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (source == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;int&lt;/FONT&gt; pos = source.Position;&lt;BR&gt;suspendlocationchange = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;SuspendLayout();&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;source.Position = Index;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; createBitmap();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;finally&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;source.Position = pos;&lt;BR&gt;suspendlocationchange = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;BR&gt;ResumeLayout(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#2b91af&gt;&lt;BR&gt;Bitmap&lt;/FONT&gt; createBitmap()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;try&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Bitmap&lt;/FONT&gt; bmp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Bitmap&lt;/FONT&gt;(instance.Width, instance.Height);&lt;BR&gt;instance.ChildPaint = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;instance.DrawToBitmap(bmp, &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt;.Empty, instance.Size));&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; bmp;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetErrorBitmap(SelectedIndex, ex);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;finally&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;instance.ChildPaint = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnEnabledChanged(&lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.OnEnabledChanged(e);&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; items.Count; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;items[i].Clear();&lt;/DIV&gt;}&lt;BR&gt;mainpanel.Invalidate();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;/*&lt;BR&gt;Bitmap GetEmptyBitmap()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Size size = ItemSize;&lt;BR&gt;return new Bitmap(size.Width, size.Height);&lt;/DIV&gt;}*/&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Bitmap&lt;/FONT&gt; GetErrorBitmap(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index, &lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; r = GetItemBounds(Index);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Bitmap&lt;/FONT&gt; bmp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Bitmap&lt;/FONT&gt;(r.Width, r.Height);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Graphics&lt;/FONT&gt; g = &lt;FONT color=#2b91af&gt;Graphics&lt;/FONT&gt;.FromImage(bmp);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Icon&lt;/FONT&gt; icon = &lt;FONT color=#2b91af&gt;SystemIcons&lt;/FONT&gt;.Error;&lt;BR&gt;g.DrawIcon(icon, 0, 0);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; bmp;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[System.Runtime.InteropServices.&lt;FONT color=#2b91af&gt;DllImport&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"shell32.dll"&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;extern&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IntPtr&lt;/FONT&gt; ExtractIcon(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; hInst, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; lpszExeFileName, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; nIconIndex);&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; GetIcon(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetIcon(&lt;FONT color=#a31515&gt;"shell32.dll"&lt;/FONT&gt;, index);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; GetIcon(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; dll, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;IntPtr&lt;/FONT&gt; handle = ExtractIcon(0, dll, index);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Icon&lt;/FONT&gt; ic = &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt;.FromHandle(handle);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Bitmap&lt;/FONT&gt; bmp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Bitmap&lt;/FONT&gt;(16, 16);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Graphics&lt;/FONT&gt;.FromImage(bmp).DrawIcon(ic, &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt;(0, 0, bmp.Width, bmp.Height));&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt;.FromHandle(bmp.GetHicon());&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Bitmap&lt;/FONT&gt; GetTriangleBitmap(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; lefttoright, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; width, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; height, &lt;FONT color=#2b91af&gt;Brush&lt;/FONT&gt; FillColor)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Bitmap&lt;/FONT&gt; res = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Bitmap&lt;/FONT&gt;(width, height);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Graphics&lt;/FONT&gt; g = &lt;FONT color=#2b91af&gt;Graphics&lt;/FONT&gt;.FromImage(res);&lt;BR&gt;g.SmoothingMode = System.Drawing.Drawing2D.&lt;FONT color=#2b91af&gt;SmoothingMode&lt;/FONT&gt;.HighQuality;&lt;BR&gt;System.Drawing.Drawing2D.&lt;FONT color=#2b91af&gt;GraphicsPath&lt;/FONT&gt; gp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Drawing.Drawing2D.&lt;FONT color=#2b91af&gt;GraphicsPath&lt;/FONT&gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (lefttoright)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;gp.AddLine(0, 0, width / 2, height);&lt;BR&gt;gp.AddLine(width / 2, height, width, 0);&lt;BR&gt;gp.AddLine(width, 0, 0, 0);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;gp.AddLine(0, 0, width, height / 2);&lt;BR&gt;gp.AddLine(width, height / 2, 0, height);&lt;BR&gt;gp.AddLine(0, height, 0, 0);&lt;/DIV&gt;}&lt;BR&gt;g.FillPath(FillColor, gp);&lt;BR&gt;g.DrawPath(&lt;FONT color=#2b91af&gt;Pens&lt;/FONT&gt;.Black, gp);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; scrolling&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AutoScroll&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; scrollpanel.AutoScroll; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { scrollpanel.AutoScroll = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AutoSize&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.AutoSize;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; == AutoSize) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!DesignMode)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;scrollpanel.Dock = &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;scrollpanel.Dock = &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Top;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;BR&gt;scrollpanel.AutoSize = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.AutoSize = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; source&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;BindingSource&lt;/FONT&gt; source;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(DataCategory)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;BindingSource&lt;/FONT&gt; BindingSource&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; source; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (source != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;source.ListChanged -= &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ListChangedEventHandler&lt;/FONT&gt;(source_ListChanged);&lt;BR&gt;source.PositionChanged -= &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;EventHandler&lt;/FONT&gt;(source_PositionChanged);&lt;/DIV&gt;}&lt;BR&gt;source = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;ResetList();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (source != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;source.ListChanged += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ListChangedEventHandler&lt;/FONT&gt;(source_ListChanged);&lt;BR&gt;source.PositionChanged += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;EventHandler&lt;/FONT&gt;(source_PositionChanged);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (navigator != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;navigator.BindingSource = source;&lt;/DIV&gt;OnBindingSourceChanged();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;EventHandler&lt;/FONT&gt; BindingSourceChanged;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnBindingSourceChanged()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (BindingSourceChanged != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;BindingSourceChanged(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; previousposition = -1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; source_PositionChanged(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (suspendlocationchange) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (multiselect)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;selectionversion++;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (previousposition != -1 &amp;amp;&amp;amp; ModifierKeys == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Shift)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; pos = source.Position;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; from = &lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Min(pos, previousposition), to = &lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Max(pos, previousposition);&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = from; i &amp;lt;= to; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GetItem(i).SelectedVersion = selectionversion;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (items.Count &amp;gt; 200)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;mainpanel.Invalidate();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InvalidateSelected(selectionversion - 1);&lt;BR&gt;InvalidateSelected(selectionversion);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;SetInstanceLocation();&lt;BR&gt;previousposition = source.Position;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; SelectedIndex&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (source == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; -1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; source.Position;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (source != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Control&lt;/FONT&gt; c = GetActiveControl();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!instance.Validate())&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;BR&gt;ResetIndex(SelectedIndex);&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;source.Position = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (c != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;c.Select();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Control&lt;/FONT&gt; GetActiveControl()&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Form&lt;/FONT&gt; f = FindForm();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (f == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; GetActiveControl(f);&lt;/DIV&gt;}&lt;FONT color=#2b91af&gt;&lt;BR&gt;Control&lt;/FONT&gt; GetActiveControl(&lt;FONT color=#2b91af&gt;ContainerControl&lt;/FONT&gt; cc)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Control&lt;/FONT&gt; c = cc.ActiveControl;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (c &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContainerControl&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetActiveControl(c &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContainerControl&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; c;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Count&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (source == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; source.Count;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; RefreshItems()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DesignMode || IsInitializing) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;ResetItems();&lt;BR&gt;InvalidateMainPanel();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ResetList()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DesignMode || IsInitializing) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;previousposition = -1;&lt;BR&gt;RefreshItems();&lt;BR&gt;OnResetList();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnResetList()&lt;BR&gt;{&lt;BR&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; IsBindingSuspended&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; source != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; source.IsBindingSuspended;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; editing;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; BeginUpdate()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;editing++;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; EndUpdate()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (--editing &amp;lt;= 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;editing = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (needreset)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;needreset = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;BR&gt;ResetList();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; needreset;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; source_ListChanged(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#2b91af&gt;ListChangedEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (editing &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;needreset = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (e.ListChangedType == &lt;FONT color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemAdded)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (IsItemCreated(e.NewIndex))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;items.Insert(e.NewIndex, &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Item&lt;/FONT&gt;());&lt;/DIV&gt;mainpanel.SetSize();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (e.ListChangedType == &lt;FONT color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemDeleted)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (e.NewIndex &amp;lt; items.Count)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;items.RemoveAt(e.NewIndex);&lt;BR&gt;mainpanel.Invalidate();&lt;BR&gt;mainpanel.SetSize();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (items.Count == 0)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetInstanceLocation();&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (e.ListChangedType == &lt;FONT color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemMoved)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetIndex(e.OldIndex);&lt;BR&gt;ResetIndex(e.NewIndex);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (e.ListChangedType == &lt;FONT color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.Reset)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetList();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (e.ListChangedType == &lt;FONT color=#2b91af&gt;ListChangedType&lt;/FONT&gt;.ItemChanged)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetIndex(e.NewIndex);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; item sizing&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Size&lt;/FONT&gt;? itemsize;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt; ItemSize&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (itemsize == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;itemsize = GetItemSize();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (instance != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; !DesignMode)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;instance.Size = itemsize.Value;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; itemsize.Value;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;.IsEmpty)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;itemsize = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;itemsize = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeItemSize()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; FixedItemSize;&lt;FONT color=#008000&gt;// itemsize != null &amp;amp;&amp;amp; !GetItemBounds().Equals(itemsize.Value);&lt;/FONT&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetItemSize()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (FixedItemSize) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;itemsize = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (VariableSize &amp;amp;&amp;amp; !DesignMode &amp;amp;&amp;amp; SelectedIndex &amp;gt; -1)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetIndex(SelectedIndex);&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//sizewithbounds = null;&lt;/FONT&gt;&lt;BR&gt;InvalidateMainPanel();&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; FixedItemSize&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; itemsizemode == &lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt;.Fixed; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; == FixedItemSize) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ItemSizeMode = &lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt;.Fixed;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ItemSizeMode = &lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt;.Automatic;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Padding&lt;/FONT&gt; DefaultItemPadding = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Padding&lt;/FONT&gt;(1);&lt;FONT color=#0000ff&gt;&lt;BR&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Padding&lt;/FONT&gt; itemPadding = DefaultItemPadding;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Padding&lt;/FONT&gt; ItemPadding&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; itemPadding; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;itemPadding = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!IsInitializing)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetInstanceLocation();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (DesignMode)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Invalidate();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;mainpanel.Invalidate();&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeItemPadding()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; itemPadding != DefaultItemPadding;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetItemPadding()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;itemPadding = DefaultItemPadding;&lt;/DIV&gt;}&lt;FONT color=#008000&gt;&lt;BR&gt;/*&lt;BR&gt;private Size? sizewithbounds;&lt;BR&gt;[Category(ItemCategory)]&lt;BR&gt;public Size ItemSizeWithPadding&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if (sizewithbounds == null)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sizewithbounds = GetItemSizeWithBounds();&lt;/DIV&gt;}&lt;BR&gt;return sizewithbounds.Value;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;*/&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; VariableSize&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; itemsizemode == &lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt;.Variable || itemsizemode == &lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt;.VariableUserSizable; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt; itemsizemode;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt;.Automatic)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt; ItemSizeMode&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; itemsizemode; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { itemsizemode = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Size&lt;/FONT&gt; GetItemSizeWithBounds()&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Size&lt;/FONT&gt; size = ItemSize;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (size.IsEmpty) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; size;&lt;BR&gt;size.Width += itemPadding.Horizontal;&lt;BR&gt;size.Height += itemPadding.Vertical;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; size;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Size&lt;/FONT&gt; GetItemSize()&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//if (controls.Count == 0) return Size.Empty;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Size&lt;/FONT&gt; size = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt; c &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; instance.Controls)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;size.Width = &lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Max(size.Width, c.Right);&lt;BR&gt;size.Height = &lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Max(size.Height, c.Bottom);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; size;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; GetItemTop(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (lefttoright)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (showselectbuttons) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; SelectButtonWidth;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; 0;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;int&lt;/FONT&gt; res;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (VariableSize &amp;amp;&amp;amp; !DesignMode)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Index &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res = AddReoccuringHeight(GetBitmap(--Index).Height)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;+ GetItemTop(Index);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res = 0;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res = GetItemHeight() * Index;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (DrawStartInsertButton)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res += InsertButtonHeight;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; GetItemLeft(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; res = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!lefttoright)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (showselectbuttons)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res += SelectButtonWidth;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (VariableSize &amp;amp;&amp;amp; !DesignMode)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Index &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res = AddReoccuringWidth(GetBitmap(--Index).Width)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;+ GetItemLeft(Index);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res += GetItemWidth();&lt;BR&gt;res *= Index;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (DrawStartInsertButton)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res += InsertButtonHeight;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; AddReoccuringWidth(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; w)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;w += itemPadding.Horizontal;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ShowDeleteButtonPerItem) w += DeleteButtonWidth;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (lefttoright &amp;amp;&amp;amp; DrawInsertButtonsBetweenItems)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;w += InsertButtonHeight;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; w;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; GetItemWidth()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; AddReoccuringWidth(ItemSize.Width);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; AddReoccuringHeight(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; h)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;h += itemPadding.Vertical;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!lefttoright &amp;amp;&amp;amp; DrawInsertButtonsBetweenItems)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;h += InsertButtonHeight;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; h;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; GetItemHeight()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; AddReoccuringHeight(ItemSize.Height);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets which item is at the specified point of the mainpanel&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="p"&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; GetIndex(&lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt; p)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; t, xy;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (lefttoright)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;t = GetItemWidth();&lt;BR&gt;xy = p.X;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;t = GetItemHeight();&lt;BR&gt;xy = p.Y;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ShowInsertButtons &amp;amp;&amp;amp; (insertbuttonstyle &amp;amp; &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;.BeginOnly) &amp;gt; 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;xy -= InsertButtonHeight;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (xy &amp;lt; 0) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; -1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; xy / t;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Size&lt;/FONT&gt; PadSize(&lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt; size)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;size.Width += itemPadding.Horizontal;&lt;BR&gt;size.Height += itemPadding.Vertical;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; size;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Rectangle&lt;/FONT&gt; GetItemBounds(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetItemBounds(Index, 0, 0, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Rectangle&lt;/FONT&gt; GetItemBounds(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; LeftOffset, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; TopOffset, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; padded)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Size&lt;/FONT&gt; size;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (VariableSize &amp;amp;&amp;amp; Index &amp;gt; -1 &amp;amp;&amp;amp; GetItem(Index).Bitmap != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;size = GetItem(Index).Bitmap.Size;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;size = ItemSize;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (padded) size = PadSize(size);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt;(
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GetItemLeft(Index) + LeftOffset,&lt;BR&gt;GetItemTop(Index) + TopOffset&lt;BR&gt;, size.Width&lt;BR&gt;, size.Height);&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#2b91af&gt;&lt;BR&gt;Rectangle&lt;/FONT&gt; GetNonPaddedItemBounds(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetItemBounds(Index, ItemPadding.Left, ItemPadding.Top, &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt; DefaultSize&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt;(100, 150);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Item validation&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnRecordValidationFailed(&lt;FONT color=#0000ff&gt;out&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AllowContinue)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (RecordValidationFailed != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;HandledEventArgs&lt;/FONT&gt; e = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;HandledEventArgs&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;BR&gt;RecordValidationFailed(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, e);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (e.Handled)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AllowContinue = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;switch&lt;/FONT&gt; (valfailedaction)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;case&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValidationFailedActions&lt;/FONT&gt;.AskUser:
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AllowContinue = &lt;FONT color=#2b91af&gt;MessageBox&lt;/FONT&gt;.Show(&lt;FONT color=#a31515&gt;"The current input does not validate correctly. If you continue to another record the changes will be lost. Do you wish to continue?"&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;, &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;, &lt;FONT color=#2b91af&gt;MessageBoxButtons&lt;/FONT&gt;.YesNoCancel) == &lt;FONT color=#2b91af&gt;DialogResult&lt;/FONT&gt;.Yes;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValidationFailedActions&lt;/FONT&gt;.DiscardChanges:
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AllowContinue = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;default&lt;/FONT&gt;:
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AllowContinue = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;break&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;HandledEventHandler&lt;/FONT&gt; RecordValidationFailed;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;enum&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValidationFailedActions&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AskUser, DiscardChanges, BlockRecordChange&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValidationFailedActions&lt;/FONT&gt; valfailedaction;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(BehaviorCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValidationFailedActions&lt;/FONT&gt; ValidationFailedAction&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; valfailedaction; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { valfailedaction = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeValidationFailedAction()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; valfailedaction != GetDefaultValidationFailedAction();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValidationFailedActions&lt;/FONT&gt; GetDefaultValidationFailedAction()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ValidationFailedActions&lt;/FONT&gt;.BlockRecordChange;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Key handling&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; In(&lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt; value, &lt;FONT color=#0000ff&gt;params&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;[] keys)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Array&lt;/FONT&gt;.IndexOf&amp;lt;&lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;&amp;gt;(keys, value) != -1;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsInputKey(&lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt; keyData)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; In(keyData, &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Up, &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Down, &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.PageDown, &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.PageUp, &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Escape)&lt;BR&gt;|| &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.IsInputKey(keyData);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; handletabs = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Description&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"If true, all records are walked through when tab is pressed before the control loses focus"&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; HandleTabs&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; handletabs; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { handletabs = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ProcessCmdKey(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Message&lt;/FONT&gt; msg, &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt; keyData)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (source != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (keyData == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Up)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!lefttoright)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectedIndex--;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (keyData == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Down)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!lefttoright)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectedIndex++;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (keyData == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Left)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (lefttoright)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectedIndex--;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (keyData == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Right)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (lefttoright)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectedIndex++;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (keyData == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.PageUp)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectedIndex -= CountPerPage;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (keyData == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.PageDown)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectedIndex += CountPerPage;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (keyData == &lt;FONT color=#2b91af&gt;Keys&lt;/FONT&gt;.Escape)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;instance.CancelCurrentEdit();&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.ProcessCmdKey(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; msg, keyData);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; CountPerPage&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT color=#2b91af&gt;Math&lt;/FONT&gt;.Ceiling((&lt;FONT color=#0000ff&gt;double&lt;/FONT&gt;)scrollpanel.Height / ItemSize.Height);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; additional properties&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;BorderStyle&lt;/FONT&gt; DefaultBorderStyle = &lt;FONT color=#2b91af&gt;BorderStyle&lt;/FONT&gt;.Fixed3D;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(DefaultBorderStyle)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;BorderStyle&lt;/FONT&gt; BorderStyle&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.BorderStyle; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.BorderStyle = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Navigator&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;BindingNavigator&lt;/FONT&gt; navigator;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;enum&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;None,&lt;BR&gt;Simple,&lt;BR&gt;Extended&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt; navstyle;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(NavigatorCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt; NavigatorStyle&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; navstyle; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (navstyle == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;ShowNavigator = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; != &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.None;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ShowNavigator)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShowFullNavigatorOptions = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.Extended;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeNavigatorStyle()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; navstyle != GetDefaultNavigatorStyle();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt; GetDefaultNavigatorStyle()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.None;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(NavigatorCategory)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShowNavigator&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; navigator != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; == ShowNavigator) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;navigator = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;BindingNavigator&lt;/FONT&gt;(source);&lt;BR&gt;navigator.DeleteItem.Click += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;EventHandler&lt;/FONT&gt;(DeleteItem_Click);&lt;BR&gt;navigator.GripStyle = &lt;FONT color=#2b91af&gt;ToolStripGripStyle&lt;/FONT&gt;.Hidden;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;SetNavigatormode(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;navigator.Width = navigator.Height = 20;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;//if (!DesignMode)&lt;/FONT&gt;&lt;BR&gt;Controls.Add(navigator);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;navstyle = &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.Simple;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;navigator.Dispose();&lt;BR&gt;navigator = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;BR&gt;navstyle = &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.None;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeShowNavigator()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetDefaultNavigatorStyle() != &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.None;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;BindingNavigator&lt;/FONT&gt; BindingNavigator&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; navigator; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; showfulloptions;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(NavigatorCategory)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShowFullNavigatorOptions&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; showfulloptions; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (showfulloptions == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; &amp;amp;&amp;amp; navigator == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;SetNavigatormode(&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;BR&gt;navstyle = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; ? &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.Extended : &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.Simple;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeShowFullNavigatorOptions()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; (GetDefaultNavigatorStyle() == &lt;FONT color=#2b91af&gt;NavigatorStyles&lt;/FONT&gt;.Extended)&lt;BR&gt;!= showfulloptions;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; SetNavigatormode(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Full)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShowNavigator = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;BR&gt;showfulloptions = Full;&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;ToolStripItem&lt;/FONT&gt; it &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; navigator.Items)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (it != navigator.AddNewItem &amp;amp;&amp;amp; it != navigator.DeleteItem)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;it.Visible = Full;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!dockmanualset)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;navigator.Dock = GetDefaultNavigatorDock();&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;DockStyle&lt;/FONT&gt; GetDefaultNavigatorDock()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ShowFullNavigatorOptions) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Bottom;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Left;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; DeleteItem_Click(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DeleteItems(GetSelectedItems(selectionversion));&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; dockmanualset;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(NavigatorCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt; NavigatorLocation&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!ShowNavigator) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Left;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; navigator.Dock;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShowNavigator = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; != &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.None;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!ShowNavigator) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Fill)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;value&lt;/FONT&gt; = GetDefaultNavigatorDock();&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;navigator.Dock = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;dockmanualset = ShouldSerializeNavigatorLocation();&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeNavigatorLocation()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; navigator != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; NavigatorLocation != GetDefaultNavigatorDock();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Delete button&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShowDeleteButtonPerItem&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; deletebuttonicon != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ShowDeleteButtonPerItem == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DeleteButtonIcon = GetDeleteButtonImage();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DeleteButtonIcon = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;InvalidateMainPanel();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; InvalidateMainPanel()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (DesignMode)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetDesignTimeInstanceSize();&lt;BR&gt;mainpanel.Invalidate();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/DIV&gt;#endif&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (!IsInitializing)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;mainpanel.SetSize();&lt;BR&gt;SetInstanceLocation();&lt;BR&gt;mainpanel.Invalidate();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; deletebuttonicon;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; DeleteButtonIcon&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; deletebuttonicon; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;deletebuttonicon = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;mainpanel.Invalidate();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeDeleteButtonIcon()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; deletebuttonicon != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; deletebuttonicon != DefaultDeleteButtonImage;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; DefaultDeleteButtonImage;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; GetDeleteButtonImage()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DefaultDeleteButtonImage == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DefaultDeleteButtonImage = GetIcon(131);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; DefaultDeleteButtonImage;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; DeleteButtonWidth = 16;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Rectangle&lt;/FONT&gt; GetDeleteButtonBounds(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; res = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt;(
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GetItemLeft(Index) + ItemSize.Width + itemPadding.Left + 1,&lt;BR&gt;GetItemTop(Index) + itemPadding.Top,&lt;BR&gt;DeleteButtonWidth, DeleteButtonWidth);&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (lefttoright &amp;amp;&amp;amp; DrawInsertButtonsBetweenItems)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res.X += InsertButtonHeight;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Insert buttons&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;enum&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;None,&lt;BR&gt;BeginOnly = 1,&lt;BR&gt;EndOnly = 2,&lt;BR&gt;AfterEachItem = 4 | EndOnly,&lt;BR&gt;BeforeEachItem = 8 | BeginOnly,&lt;BR&gt;BeforeAndAfterEachItem = AfterEachItem | BeforeEachItem&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt; insertbuttonstyle;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(InsertButtonStyles.None)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt; InsertButtonStyle&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; insertbuttonstyle; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (insertbuttonstyle == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;insertbuttonstyle = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;ShowInsertButtons = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; != &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;.None;&lt;BR&gt;InvalidateMainPanel();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; DrawInsertButtonsBetweenItems&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShowInsertButtons &amp;amp;&amp;amp; (insertbuttonstyle &amp;amp; &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;.BeforeAndAfterEachItem) &amp;gt; &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;.EndOnly;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; DrawStartInsertButton&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShowInsertButtons &amp;amp;&amp;amp; (insertbuttonstyle &amp;amp; &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;.BeginOnly) &amp;gt; 0;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; DrawEndInsertButton&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; (insertbuttonstyle &amp;amp; &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;.EndOnly) &amp;gt; 0;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;InsertItemEventArgs&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;HandledEventArgs&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; InsertItemEventArgs(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Index = Index;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; OnInsertItem(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;OnInsertItem(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;InsertItemEventArgs&lt;/FONT&gt;(Index));&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;EventHandler&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;InsertItemEventArgs&lt;/FONT&gt;&amp;gt; InsertItem;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnInsertItem(&lt;FONT color=#2b91af&gt;InsertItemEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (InsertItem != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InsertItem(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, e);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (e.Handled) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;BR&gt;source.AddNew();&lt;BR&gt;MoveItem(Count - 1, e.Index);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; MoveItem(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Old, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; New)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Old == New) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;SuspendLayout();&lt;BR&gt;source.SuspendBinding();&lt;FONT color=#0000ff&gt;&lt;BR&gt;object&lt;/FONT&gt; o = source[Old];&lt;BR&gt;source.RemoveAt(Old);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (New &amp;gt; Old)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;New--;&lt;/DIV&gt;source.Insert(New, o);&lt;BR&gt;source.ResumeBinding();&lt;BR&gt;InvalidateMainPanel();&lt;BR&gt;ResumeLayout();&lt;BR&gt;source.Position = New;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShowInsertButtons&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; insertbuttonicon != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ShowInsertButtons == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;insertbuttonicon = GetInsertButtonImage();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (insertbuttonstyle == &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;.None)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;insertbuttonstyle = &lt;FONT color=#2b91af&gt;InsertButtonStyles&lt;/FONT&gt;.BeforeAndAfterEachItem;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;insertbuttonicon = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;InvalidateMainPanel();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; insertbuttonicon;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; InsertButtonIcon&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; insertbuttonicon; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;insertbuttonicon = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;mainpanel.Invalidate();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeInsertButtonIcon()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; insertbuttonicon != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; insertbuttonicon != DefaultInsertButtonImage;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; DefaultInsertButtonImage;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;static&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt; GetInsertButtonImage()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DefaultInsertButtonImage == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Bitmap&lt;/FONT&gt; bmp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Bitmap&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;BindingNavigator&lt;/FONT&gt;), &lt;FONT color=#a31515&gt;"BindingNavigator.AddNew.bmp"&lt;/FONT&gt;);&lt;BR&gt;bmp.MakeTransparent();&lt;BR&gt;DefaultInsertButtonImage = &lt;FONT color=#2b91af&gt;Icon&lt;/FONT&gt;.FromHandle(bmp.GetHicon());&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; DefaultInsertButtonImage;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; InsertButtonHeight = 16;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Rectangle&lt;/FONT&gt; GetInsertButtonBounds(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; res = GetNonPaddedItemBounds(Index);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (lefttoright)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res.X = Index == -1 ? 1 : res.Right + 1;&lt;BR&gt;res.Width = InsertButtonHeight;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res.Y = Index == -1 ? 1 : res.Bottom + 1;&lt;BR&gt;res.Height = InsertButtonHeight;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Selection&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; selectionversion = 1;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; multiselect;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(DataCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AllowMultiSelect&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; multiselect; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; == multiselect) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;multiselect = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;selectionversion++;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; InvalidateSelectionArea(&lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt; itembounds)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;mainpanel.Invalidate(GetSelectionBounds(itembounds));&lt;/DIV&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets the bounds that the selection background occupies&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Rectangle&lt;/FONT&gt; GetSelectionBounds(&lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt; itembounds)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (lefttoright)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;itembounds.Y = 0;&lt;BR&gt;itembounds.X -= itemPadding.Left;&lt;BR&gt;itembounds.Width = GetItemWidth();&lt;BR&gt;itembounds.Height = Height;&lt;BR&gt;itembounds.Inflate(2, 0);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;itembounds.X = 0;&lt;BR&gt;itembounds.Y -= ItemPadding.Top;&lt;BR&gt;itembounds.Width = Width;&lt;BR&gt;itembounds.Height = GetItemHeight();&lt;BR&gt;itembounds.Inflate(0, 2);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; itembounds;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; lefttoright;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(BehaviorCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; LeftToRight&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; lefttoright; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (lefttoright == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;lefttoright = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;selrecimage = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!DesignMode)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;mainpanel.Dock = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; ? &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Left : &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Top;&lt;BR&gt;RefreshItems();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetDesignTimeInstanceSize();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;&lt;/DIV&gt;#endif&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; SelectButtonWidth = 14;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Bitmap&lt;/FONT&gt; selrecimage;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Bitmap&lt;/FONT&gt; SelectedRecordImage&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (selrecimage == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CreateSelectRecordImage();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; selrecimage;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#008000&gt;// = new Bitmap(typeof(BindingNavigator), "BindingNavigator.MoveNext.bmp");&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; CreateSelectRecordImage()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;selrecimage = GetTriangleBitmap(lefttoright, 10, 10, &lt;FONT color=#2b91af&gt;Brushes&lt;/FONT&gt;.LightGray);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; showselectbuttons = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(ItemCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShowSelectButtons&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; showselectbuttons; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (showselectbuttons == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;showselectbuttons = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;ResetItemSize();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; InvalidateSelected(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; version)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; items.Count; i++)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (items[i].SelectedVersion == version)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InvalidateSelectionArea(GetItemBounds(i));&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; SwitchSelect(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;int&lt;/FONT&gt; curindex = SelectedIndex;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;Item&lt;/FONT&gt; item = GetItem(index);&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; selected = item.SelectedVersion == selectionversion;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (selected)&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//deselect&lt;/FONT&gt;&lt;BR&gt;item.SelectedVersion--;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (index == curindex)&lt;BR&gt;{&lt;BR&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//select&lt;/FONT&gt;&lt;BR&gt;item.SelectedVersion = selectionversion;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//make sure current item has the proper version&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (curindex != -1)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GetItem(curindex).SelectedVersion = selectionversion;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;InvalidateSelectionArea(GetItemBounds(index));&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;System.Collections.&lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt; GetSelectedItems(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; selectionversion)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; sel = SelectedIndex;&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; items.Count; i++)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (i != sel &amp;amp;&amp;amp; items[i].SelectedVersion == selectionversion)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;yield&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; source[i];&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; System.Collections.&lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt; GetSelectedItems()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (source == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;yield&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;yield&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; source.Current;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (multiselect)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; o &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; GetSelectedItems(selectionversion))&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;yield&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; o;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; DeleteItems(System.Collections.&lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt; Items)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt;&amp;gt; list = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt;&amp;gt;((&lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt;&amp;gt;)Items);&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; o &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; list)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;source.Remove(o);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; DeleteSelectedItems()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!multiselect)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;source.RemoveCurrent();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DeleteItems(GetSelectedItems());&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; DragDrop&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(BehaviorCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AllowDrop&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; mainpanel.AllowDrop;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;mainpanel.AllowDrop = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; autodrag;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(BehaviorCategory)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AutoDrag&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; autodrag; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { autodrag = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; SetAllowDrop()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AllowDrop = allowreorder;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; allowreorder;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(BehaviorCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AllowReordering&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; allowreorder; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;allowreorder = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;SetAllowDrop();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DragStartEventArgs&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;HandledEventArgs&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; DragObject;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; DragStartEventArgs(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Index = Index;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; DragObjectTypeName&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DragObject == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; DragObject.GetType().FullName;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;EventHandler&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;DragStartEventArgs&lt;/FONT&gt;&amp;gt; DragStart;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;//DragStartEventArgs currentdrag;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; OnDragStart(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Index &amp;lt; 0) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#2b91af&gt;&lt;BR&gt;DragStartEventArgs&lt;/FONT&gt; e = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DragStartEventArgs&lt;/FONT&gt;(Index);&lt;BR&gt;e.DragObject = source.Current;&lt;BR&gt;OnDragStart(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnDragStart(&lt;FONT color=#2b91af&gt;DragStartEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DragStart != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DragStart(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, e);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (e.Handled) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (e.DragObject != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;DoDragDrop(e.DragObject, &lt;FONT color=#2b91af&gt;DragDropEffects&lt;/FONT&gt;.All);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Type&lt;/FONT&gt; GetItemType()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (source == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ListBindingHelper&lt;/FONT&gt;.GetListItemType(source.DataSource, source.DataMember);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; GetIndex(&lt;FONT color=#2b91af&gt;DragEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Point&lt;/FONT&gt; p = GetClientPoint(e);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; i = GetIndex(p);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (i &amp;lt; 0 || i == source.Position) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; -1;&lt;FONT color=#0000ff&gt;&lt;BR&gt;float&lt;/FONT&gt; margin;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (lefttoright)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;margin = ((&lt;FONT color=#0000ff&gt;float&lt;/FONT&gt;)p.X - GetItemLeft(i)) / GetItemWidth();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;margin = ((&lt;FONT color=#0000ff&gt;float&lt;/FONT&gt;)p.Y - GetItemTop(i)) / GetItemHeight();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (margin &amp;gt; .5)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;i++;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (i &amp;gt; Count)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;i = Count;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; i;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Point&lt;/FONT&gt; GetClientPoint(&lt;FONT color=#2b91af&gt;DragEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Point&lt;/FONT&gt; p = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt;(e.X, e.Y);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; mainpanel.PointToClient(p);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt;? DragInsertIndex;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnDragOver(&lt;FONT color=#2b91af&gt;DragEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (e.Data.GetDataPresent(GetItemType()))&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;object&lt;/FONT&gt; o = e.Data.GetData(GetItemType());&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (allowreorder &amp;amp;&amp;amp; o == source.Current)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; i = GetIndex(e);&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;if&lt;/FONT&gt; (DragInsertIndex != i)&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 120pt"&gt;ClearDragInsertIndex();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;if&lt;/FONT&gt; (i != -1)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;e.Effect = &lt;FONT color=#2b91af&gt;DragDropEffects&lt;/FONT&gt;.Move;&lt;BR&gt;DragInsertIndex = i;&lt;BR&gt;mainpanel.InvalidateDragInsert(i);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;BR&gt;e.Effect = &lt;FONT color=#2b91af&gt;DragDropEffects&lt;/FONT&gt;.None;&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.OnDragOver(e);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; ClearDragInsertIndex()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DragInsertIndex != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; i = DragInsertIndex.Value;&lt;BR&gt;DragInsertIndex = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;BR&gt;mainpanel.InvalidateDragInsert(i);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnDragLeave(&lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ClearDragInsertIndex();&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.OnDragLeave(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnDragDrop(&lt;FONT color=#2b91af&gt;DragEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (DragInsertIndex != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;MoveItem(source.Position, DragInsertIndex.Value);&lt;BR&gt;ClearDragInsertIndex();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.OnDragDrop(e);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Header&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Header&lt;/FONT&gt; header;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(HeaderCategory)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShowHeader&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; header != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ShowHeader == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;InitHeader();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;header.Dispose();&lt;BR&gt;header = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; InitHeader()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;header = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Header&lt;/FONT&gt;();&lt;BR&gt;header.Height = headerheight;&lt;BR&gt;Controls.Add(header);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;&lt;/DIV&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;InitHeaderDesigner();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;#endif&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (navigator != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;navigator.SendToBack();&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; DefaultHeaderHeight = 30;&lt;FONT color=#0000ff&gt;&lt;BR&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; headerheight = DefaultHeaderHeight;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Category&lt;/FONT&gt;(HeaderCategory)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(DefaultHeaderHeight)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; HeaderHeight&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; headerheight; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;headerheight = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (header != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;header.Height = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Direct access to the controls of header portion of the control&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ControlCollection&lt;/FONT&gt; HeaderControlCollection&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (header == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; header.Controls;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Meant for the designer serialization for header controls&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#2b91af&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#2b91af&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt;[] HeaderControls&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (header == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Control&lt;/FONT&gt;[] ctr = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt;[header.Controls.Count];&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; ctr.Length; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ctr[i] = header.Controls[i];&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; ctr;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShowHeader = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;.Length &amp;gt; 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ShowHeader)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;header.Controls.AddRange(&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#2b91af&gt;Designer&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;DropOnlyDesigner&lt;/FONT&gt;))]&lt;BR&gt;[System.ComponentModel.Design.Serialization.&lt;FONT color=#2b91af&gt;DesignerSerializer&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;typeof&lt;/FONT&gt;(System.ComponentModel.Design.Serialization.&lt;FONT color=#2b91af&gt;CodeDomSerializer&lt;/FONT&gt;),&lt;FONT color=#0000ff&gt;&lt;BR&gt;typeof&lt;/FONT&gt;(System.ComponentModel.Design.Serialization.&lt;FONT color=#2b91af&gt;CodeDomSerializer&lt;/FONT&gt;))] &lt;FONT color=#008000&gt;//this serializer is attached to make sure the inheriting classes will not serialize properties of the protected instance&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;&lt;/DIV&gt;#endif&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Header&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;Panel&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; Header()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Dock = &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Top;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;Pen&lt;/FONT&gt; p = &lt;FONT color=#2b91af&gt;Pens&lt;/FONT&gt;.Black;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnPaint(&lt;FONT color=#2b91af&gt;PaintEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.OnPaint(e);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; y = Bottom - 1;&lt;BR&gt;e.Graphics.DrawLine(p, 0, y, Width, y);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; ISupportInitialize Members&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; initializing;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Indicates if the control is inside the initialization state.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; (in other words, between the BeginInit and EndInit inside the designer generated code)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsInitializing&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; initializing &amp;gt; 0;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ISupportInitialize&lt;/FONT&gt;.BeginInit()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;initializing++;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ISupportInitialize&lt;/FONT&gt;.EndInit()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (--initializing == 0)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (itemsize != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetItemSize();&lt;/DIV&gt;ResetList();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;enum&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ItemSizeMode&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Default mode: each item has the same size based on the layout of the controls added to it&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;BR&gt;Automatic,&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The size for each item is variable. The size per item is determined by the layout of the controls&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;BR&gt;Variable,&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The size for each item is variable. The user can change the size of an item in runtime.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;BR&gt;VariableUserSizable,&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Each item is fixed on whatever size is assigned to the ItemSize property&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;BR&gt;Fixed&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#region&lt;/FONT&gt; Design time support (needs a reference to System.Design)&lt;BR&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//this part contains the functionality for design time support&lt;BR&gt;//if wanted this part could be omitted in final distrubution code&lt;BR&gt;//(wouldn't bother to myself, but perhaps it is needed in the future&lt;BR&gt;// for compact framework distrubution or the likes)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#if&lt;/FONT&gt; IncludeDesignTimeSupport&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;namespace&lt;/FONT&gt; Subro.Controls&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;using&lt;/FONT&gt; System.ComponentModel.Design;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Windows.Forms.Design;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Windows.Forms.Design.Behavior;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;partial&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;#region&lt;/FONT&gt; designer&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; SetDesignTimeInstanceSize()&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;/*&lt;BR&gt;instance.Left = GetItemLeft(0);&lt;BR&gt;instance.Width = scrollpanel.Width - instance.Left;&lt;BR&gt;instance.Height = scrollpanel.Height;*/&lt;/FONT&gt;&lt;BR&gt;instance.Location = GetDesignerOffset();&lt;BR&gt;instance.Width = scrollpanel.Width - instance.Left;&lt;BR&gt;instance.Height = scrollpanel.Height - instance.Top;&lt;BR&gt;instance.Invalidate();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; InitDesignEnvironment()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;mainpanel.Dock = &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;BR&gt;instance.Dock = &lt;FONT color=#2b91af&gt;DockStyle&lt;/FONT&gt;.None;&lt;BR&gt;instance.Anchor = &lt;FONT color=#2b91af&gt;AnchorStyles&lt;/FONT&gt;.Left | &lt;FONT color=#2b91af&gt;AnchorStyles&lt;/FONT&gt;.Right | &lt;FONT color=#2b91af&gt;AnchorStyles&lt;/FONT&gt;.Top | &lt;FONT color=#2b91af&gt;AnchorStyles&lt;/FONT&gt;.Bottom;&lt;BR&gt;SetDesignTimeInstanceSize();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; InitHeaderDesigner()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Site == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#2b91af&gt;&lt;BR&gt;INestedContainer&lt;/FONT&gt; cont = (&lt;FONT color=#2b91af&gt;INestedContainer&lt;/FONT&gt;)GetService(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;INestedContainer&lt;/FONT&gt;));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (cont != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;cont.Add(header, &lt;FONT color=#a31515&gt;"Header"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControlDesigner&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ControlDesigner&lt;/FONT&gt;&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Initialize(&lt;FONT color=#2b91af&gt;IComponent&lt;/FONT&gt; component)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ContinuousControl&lt;/FONT&gt; cc = (component &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (component.GetType() == &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt;))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;cc.Init(); &lt;FONT color=#008000&gt;//for inheriting controls, Init allready is done in the constructor&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;base&lt;/FONT&gt;.Initialize(component);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (!EnableDesignMode(cc.instance, &lt;FONT color=#a31515&gt;"Controls"&lt;/FONT&gt;))&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;MessageBox&lt;/FONT&gt;.Show(&lt;FONT color=#a31515&gt;"Could not create child designer"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;//designercontrols = new List&amp;lt;Control&amp;gt;(cc.GetDesignerControls());&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;IDesignerHost&lt;/FONT&gt; host = (&lt;FONT color=#2b91af&gt;IDesignerHost&lt;/FONT&gt;)GetService(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;IDesignerHost&lt;/FONT&gt;));&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt; dc &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; cc.GetDesignerControls())&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;IDesigner&lt;/FONT&gt; id = host.GetDesigner(dc);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (id == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;EnableDesignMode(dc, dc.Name);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControlDocumentDesigner&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;DocumentDesigner&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Initialize(&lt;FONT color=#2b91af&gt;IComponent&lt;/FONT&gt; component)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ContinuousControl&lt;/FONT&gt; cc = component &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt;;&lt;BR&gt;cc._Instance = cc.instance;&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.Initialize(component);&lt;BR&gt;cc._Instance = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; inheriting classes can override this function to add any&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; controls that should be exposed to the designer this control&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; is dropped on&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IEnumerable&lt;/FONT&gt;&amp;lt;&lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt;&amp;gt; GetDesignerControls()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;yield&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;break&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DropOnlyDesigner&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;ParentControlDesigner&lt;/FONT&gt;&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt; Owner&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Control.Parent &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; PreFilterProperties(System.Collections.&lt;FONT color=#2b91af&gt;IDictionary&lt;/FONT&gt; properties)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;PropertyDescriptor&lt;/FONT&gt; pdo = (&lt;FONT color=#2b91af&gt;PropertyDescriptor&lt;/FONT&gt;)properties[&lt;FONT color=#a31515&gt;"Owner"&lt;/FONT&gt;];&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (pdo == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pdo = (&lt;FONT color=#2b91af&gt;PropertyDescriptor&lt;/FONT&gt;)properties[&lt;FONT color=#a31515&gt;"Parent"&lt;/FONT&gt;];&lt;/DIV&gt;properties.Clear();&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;properties.Add(&lt;FONT color=#a31515&gt;"Owner"&lt;/FONT&gt;, pdo);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;GlyphCollection&lt;/FONT&gt; GetGlyphs(&lt;FONT color=#2b91af&gt;GlyphSelectionType&lt;/FONT&gt; selectionType)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;GlyphCollection&lt;/FONT&gt; coll = &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.GetGlyphs(selectionType);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (selectionType == &lt;FONT color=#2b91af&gt;GlyphSelectionType&lt;/FONT&gt;.SelectedPrimary)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;coll.Add(CreateGlyph(Owner));&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; coll;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; select owner glyph&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;SelectParentGlyph&lt;/FONT&gt; CreateGlyph()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; CreateGlyph(Control.Parent);&lt;/DIV&gt;}&lt;FONT color=#2b91af&gt;&lt;BR&gt;SelectParentGlyph&lt;/FONT&gt; CreateGlyph(&lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt; ParentControl)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; r = BehaviorService.ControlRectInAdornerWindow(ParentControl);&lt;BR&gt;r.X = r.Right;&lt;BR&gt;r.Width = 30;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SelectParentGlyph&lt;/FONT&gt;(r, ParentControl);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SelectParentGlyph&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;Glyph&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectParentBehavior&lt;/FONT&gt; beh;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt; Owner;&lt;FONT color=#2b91af&gt;&lt;BR&gt;Rectangle&lt;/FONT&gt; bounds;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; SelectParentGlyph(&lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt; rect, &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt; Owner)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;: &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SelectParentBehavior&lt;/FONT&gt;())&lt;/DIV&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;beh = Behavior &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SelectParentBehavior&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.bounds = rect;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Cursor&lt;/FONT&gt; GetHitTest(&lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt; p)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (bounds.Contains(p))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Cursors&lt;/FONT&gt;.Hand;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Paint(&lt;FONT color=#2b91af&gt;PaintEventArgs&lt;/FONT&gt; pe)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (textsize == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SizeF&lt;/FONT&gt; size = pe.Graphics.MeasureString(Text, font, bounds.Width, sf);&lt;BR&gt;textsize = &lt;FONT color=#2b91af&gt;Size&lt;/FONT&gt;.Ceiling(size);&lt;BR&gt;bounds.Size = textsize.Value;&lt;/DIV&gt;}&lt;BR&gt;pe.Graphics.DrawRectangle(&lt;FONT color=#2b91af&gt;Pens&lt;/FONT&gt;.Black, bounds);&lt;BR&gt;pe.Graphics.DrawString(Text, font, &lt;FONT color=#2b91af&gt;Brushes&lt;/FONT&gt;.Black, Bounds, sf);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;Size&lt;/FONT&gt;? textsize;&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; Text = &lt;FONT color=#a31515&gt;"Select Owner"&lt;/FONT&gt;;&lt;FONT color=#2b91af&gt;&lt;BR&gt;StringFormat&lt;/FONT&gt; sf = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;StringFormat&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;StringFormatFlags&lt;/FONT&gt;.DirectionVertical);&lt;FONT color=#2b91af&gt;&lt;BR&gt;Font&lt;/FONT&gt; font = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Font&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;FontFamily&lt;/FONT&gt;.GenericSansSerif, 7);&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Rectangle&lt;/FONT&gt; Bounds&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; bounds;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; SelectParent()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;try&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;IServiceProvider&lt;/FONT&gt; provider = Owner.Site;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (provider == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;throw&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt;(Owner.Name + &lt;FONT color=#a31515&gt;" does not contain a service provider"&lt;/FONT&gt;);&lt;FONT color=#2b91af&gt;&lt;BR&gt;ISelectionService&lt;/FONT&gt; sel = (&lt;FONT color=#2b91af&gt;ISelectionService&lt;/FONT&gt;)provider.GetService(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;ISelectionService&lt;/FONT&gt;));&lt;BR&gt;sel.SetSelectedComponents(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt;[] { Owner }, &lt;FONT color=#2b91af&gt;SelectionTypes&lt;/FONT&gt;.Primary);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;catch&lt;/FONT&gt; (&lt;FONT color=#2b91af&gt;Exception&lt;/FONT&gt; ex)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;MessageBox&lt;/FONT&gt;.Show(ex.Message);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SelectParentBehavior&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;Behavior&lt;/FONT&gt;&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; OnMouseDown(&lt;FONT color=#2b91af&gt;Glyph&lt;/FONT&gt; g, &lt;FONT color=#2b91af&gt;MouseButtons&lt;/FONT&gt; button, &lt;FONT color=#2b91af&gt;Point&lt;/FONT&gt; mouseLoc)&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectParentGlyph&lt;/FONT&gt; sog = g &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SelectParentGlyph&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (sog == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.OnMouseDown(g, button, mouseLoc);&lt;/DIV&gt;sog.SelectParent();&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;InstanceDesigner&lt;/FONT&gt; : &lt;FONT color=#2b91af&gt;DropOnlyDesigner&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ControlInstance&lt;/FONT&gt; Control&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.Control &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ControlInstance&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;ContinuousControl&lt;/FONT&gt; Owner&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Control.owner; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;DesignerVerb&lt;/FONT&gt; selectowner;&lt;FONT color=#2b91af&gt;&lt;BR&gt;ISelectionService&lt;/FONT&gt; selservice;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Initialize(&lt;FONT color=#2b91af&gt;IComponent&lt;/FONT&gt; component)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.Initialize(component);&lt;BR&gt;Owner.InitDesignEnvironment();&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (selectowner == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;selectowner = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;DesignerVerb&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;"Select owner"&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;EventHandler&lt;/FONT&gt;(SelectOwner));&lt;BR&gt;Verbs.Add(selectowner);&lt;BR&gt;selservice = (&lt;FONT color=#2b91af&gt;ISelectionService&lt;/FONT&gt;)GetService(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;ISelectionService&lt;/FONT&gt;));&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; DeleteOwner(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Host.DestroyComponent(Owner);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; SelectOwner(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#2b91af&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SelectOwner();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; SelectOwner()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;selservice.SetSelectedComponents(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;IComponent&lt;/FONT&gt;[] { Owner }, &lt;FONT color=#2b91af&gt;SelectionTypes&lt;/FONT&gt;.Primary);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;Control&lt;/FONT&gt; GetParentForComponent(&lt;FONT color=#2b91af&gt;IComponent&lt;/FONT&gt; component)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Owner;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;IDesignerHost&lt;/FONT&gt; host;&lt;FONT color=#2b91af&gt;&lt;BR&gt;IDesignerHost&lt;/FONT&gt; Host&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (host == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;host = (&lt;FONT color=#2b91af&gt;IDesignerHost&lt;/FONT&gt;)GetService(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#2b91af&gt;IDesignerHost&lt;/FONT&gt;));&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; host;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; PreFilterAttributes(System.Collections.&lt;FONT color=#2b91af&gt;IDictionary&lt;/FONT&gt; attributes)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; var &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; attributes)&lt;BR&gt;{&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.PreFilterAttributes(attributes);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnPaintAdornments(&lt;FONT color=#2b91af&gt;PaintEventArgs&lt;/FONT&gt; pe)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;base&lt;/FONT&gt;.OnPaintAdornments(pe);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;if&lt;/FONT&gt; (Control == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;pe.Graphics.FillRectangle(&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SolidBrush&lt;/FONT&gt;(Owner.scrollpanel.BackColor),&lt;BR&gt;Control.ClientRectangle);&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;Point&lt;/FONT&gt; p = Owner.GetDesignerOffset();&lt;BR&gt;pe.Graphics.TranslateTransform(-p.X, -p.Y);&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;Rectangle&lt;/FONT&gt; bounds = Owner.GetNonPaddedItemBounds(0);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;pe.Graphics.FillRectangle(&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;new&lt;/FONT&gt; &lt;FONT color=#2b91af&gt;SolidBrush&lt;/FONT&gt;(Control.BackColor),&lt;BR&gt;bounds);&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;Owner.mainpanel.Paint(pe.Graphics);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;Point&lt;/FONT&gt; GetDesignerOffset()&lt;BR&gt;{&lt;FONT color=#2b91af&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Rectangle&lt;/FONT&gt; r = GetNonPaddedItemBounds(0);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; r.Location;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;}&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endif&lt;BR&gt;&lt;BR&gt;#endregion&lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY: Times New Roman"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =2;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/6567.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>LabelProvider</title><link>http://blogs.vbcity.com/hotdog/archive/2006/06/01/6030.aspx</link><pubDate>Thu, 01 Jun 2006 04:33:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2006/06/01/6030.aspx</guid><description>&lt;P&gt;For the description of most controls we use labels and I for one don't like to add a label manually for each control. Been using a component that paints values, but never got around to put it in a nice coat and with design time support up until now. The design time being the most work (although greatly alleviated by finding out how to use the isComplete parameter of the InstanceDescriptor ;-) ), the component is easy in use and deployment.&lt;BR&gt;Usage: drop it to your form (or container control) and you get a new property on each control (&amp;#8221;Label on LabelProviderName&amp;#8221;).&lt;BR&gt;You can simply type in the labeltext and a label will be painted on its parent.&lt;/P&gt;
&lt;P&gt;To set more details, when the text is set&amp;nbsp;a LabelInfo object will be created automatically. A plus sign appears in front of the property once it has been set, to indicate it can be expanded. Other properties for the label such as the Alignment, Font and Color can then be set.&lt;BR&gt;To make things complete, the LabelProvider component itself also contains a set of those properties. This is the leading set. Unless a property is set specifically for a single label, the settings of the main component will be used for all labels. (The effects can be easily tried out in the designer)&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Per request some quick setup instructions:&lt;BR&gt;&lt;STRONG&gt;Usage&lt;BR&gt;&lt;/STRONG&gt;Add this code to your project (or a dll containing this code). The component will automatically show up in the visual studio 2005 toolbox. Drag the LabelProvider to your form or control&amp;nbsp;in the form designer.&lt;BR&gt;Now each control you select will have an additional property: &amp;#8221;Label on ...&amp;#8221;, where ... is the name of the component. The text you type in in this property, will become the label for that control.&lt;BR&gt;&lt;BR&gt;That's it for the normal label usage. For more settings, you can change the settings on the component itself. Or you can change the settings per label: press the [+] in front of the &amp;#8220;Label on ...&amp;#8220;&amp;nbsp; property for additional settings&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Added per 22-9-6: &lt;BR&gt;ability to show icon (or show only icon, then a tooltip will be shown for the text, thus the labelprovider becomes an infoprovider)&lt;BR&gt;Changable cursor&lt;BR&gt;Click event&lt;BR&gt;Blinking possibility&lt;/P&gt;
&lt;P&gt;Small thing added on 19-10-6:&lt;BR&gt;text is drawn as disabled if the attached control is disabled&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;!-- --Start of code block
--&gt;
&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 1px solid; BORDER-TOP: #000080 1px solid; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 1px solid; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 1px solid"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 1px solid; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'300pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" selcount="3" selold="1" sel="1"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; HEIGHT: 300pt; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt; System;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Collections.Generic;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Text;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.ComponentModel;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.ComponentModel.Design;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.ComponentModel.Design.Serialization;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Drawing;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Drawing.Design;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Windows.Forms;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Windows.Forms.Design;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Reflection;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;namespace&lt;/FONT&gt; Subro.Controls&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;[&lt;FONT color=#008080&gt;ProvideProperty&lt;/FONT&gt;(&lt;FONT color=#800000&gt;"Label"&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;Control&lt;/FONT&gt;))]&lt;BR&gt;[&lt;FONT color=#008080&gt;ToolboxBitmap&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;Label&lt;/FONT&gt;))]&lt;BR&gt;[&lt;FONT color=#008080&gt;DefaultEvent&lt;/FONT&gt;(&lt;FONT color=#800000&gt;"LabelClicked"&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelProvider&lt;/FONT&gt; : &lt;FONT color=#008080&gt;Component&lt;/FONT&gt;, &lt;FONT color=#008080&gt;IExtenderProvider&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;#region&lt;/FONT&gt; Constructors&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; LabelProvider()
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;: &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;/DIV&gt;{&lt;BR&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; LabelProvider(&lt;FONT color=#008080&gt;IContainer&lt;/FONT&gt; container)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (container != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;container.Add(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;defsettings.SettingChanged += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(defsettings_SettingChanged);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; IExtenderProvider Members&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; CanExtend(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; extendee)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; extendee &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#008080&gt;Control&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;int&lt;/FONT&gt; IndexOf(&lt;FONT color=#008080&gt;Control&lt;/FONT&gt; c)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; list.Count; i++)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (list[i].Control == c) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; i;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; -1;&lt;/DIV&gt;}&lt;BR&gt;[&lt;FONT color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; GetLabel(&lt;FONT color=#008080&gt;Control&lt;/FONT&gt; c)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; i = IndexOf(c);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (i == -1)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; list[i].LabelInfo;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; SetLabel(&lt;FONT color=#008080&gt;Control&lt;/FONT&gt; c, &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; value)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; i = IndexOf(c);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (value == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (i == -1) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;list[i].Dispose();&lt;BR&gt;list.RemoveAt(i);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (i == -1)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;list.Add(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, c, value));&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;list[i].LabelInfo = value;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelClickedEventArgs&lt;/FONT&gt; : &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#008080&gt;Control&lt;/FONT&gt; Control;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; LabelInfo;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; LabelClickedEventArgs(&lt;FONT color=#008080&gt;Control&lt;/FONT&gt; c, &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; inf)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Control = c;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.LabelInfo = inf;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;LabelClickedEventArgs&lt;/FONT&gt;&amp;gt; LabelClicked;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;void&lt;/FONT&gt; OnLabelClicked(&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; l)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (LabelClicked != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;LabelClicked(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelClickedEventArgs&lt;/FONT&gt;(l.Control, l.LabelInfo));&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; : &lt;FONT color=#008080&gt;IDisposable&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#008080&gt;Control&lt;/FONT&gt; Control;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;LabelProvider&lt;/FONT&gt; Owner;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ControlLabel(&lt;FONT color=#008080&gt;LabelProvider&lt;/FONT&gt; Owner, &lt;FONT color=#008080&gt;Control&lt;/FONT&gt; c, &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; li)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (c == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;throw&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;ArgumentNullException&lt;/FONT&gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.Control = c;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.LabelInfo = li;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;BR&gt;li.DefaultSettings = Owner.defsettings;&lt;BR&gt;ResetParent();&lt;BR&gt;Control.ParentChanged += ehParentChanged;&lt;BR&gt;Control.LocationChanged += ehLocationChanged;&lt;BR&gt;Control.EnabledChanged += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(Control_EnabledChanged);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; enter/leave&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;bool&lt;/FONT&gt; focused, cursorchanged;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Focused&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; focused; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;Control&lt;/FONT&gt; ParentControl&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Parent.Parent; }&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;Cursor&lt;/FONT&gt; beforeEnter;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; CheckEnterLeave(&lt;FONT color=#008080&gt;Point&lt;/FONT&gt; p)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckEnterLeave(bounds.Contains(p));&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; CheckEnterLeave(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; hasfocus)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (hasfocus != focused)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (hasfocus)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (inf.Cursor != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; inf.Cursor != ParentControl.Cursor)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;beforeEnter = ParentControl.Cursor;&lt;BR&gt;ParentControl.Cursor = inf.Cursor;&lt;BR&gt;cursorchanged = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!inf.ShowText)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Parent.ShowTooltip(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Point&lt;/FONT&gt;((&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)bounds.Right,(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)bounds.Top));&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (cursorchanged)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ParentControl.Cursor = beforeEnter;&lt;BR&gt;cursorchanged = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;BR&gt;Parent.RemoveTooltip(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;BR&gt;focused = hasfocus;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Click()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.OnLabelClicked(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; label&lt;FONT color=#008080&gt;&lt;BR&gt;LabelInfo&lt;/FONT&gt; inf;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; LabelInfo&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; inf;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;RemoveInfoEvents();&lt;BR&gt;inf = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (inf != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;inf.SettingChanged += ehSettingChanged;&lt;/DIV&gt;Invalidate(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; LabelInfo_SettingChanged(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Invalidate(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Control_EnabledChanged(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Invalidate(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;EventHandler&lt;/FONT&gt; ehSettingChanged&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(LabelInfo_SettingChanged);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; RemoveInfoEvents()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (inf != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;inf.SettingChanged -= ehSettingChanged;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;RectangleF&lt;/FONT&gt; bounds;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Invalidate(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ClearBounds)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (ClearBounds)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!bounds.IsEmpty) bounds = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;RectangleF&lt;/FONT&gt;();&lt;BR&gt;StopBlink();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Parent != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Parent.Invalidate(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; BoundsSet&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; !bounds.IsEmpty; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;RectangleF&lt;/FONT&gt; Bounds&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; bounds; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; label bounds&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ContainsLabel&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; inf != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;(!&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.IsNullOrEmpty(inf.Text) || inf.ShowIcon);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Paint(&lt;FONT color=#008080&gt;Graphics&lt;/FONT&gt; g)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!ContainsLabel) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (bounds.IsEmpty) InitBounds(g);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (blinker != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; blinker.ShouldHide) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;inf.Paint(g, bounds,&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.Control.Enabled);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; InitBounds(&lt;FONT color=#008080&gt;Graphics&lt;/FONT&gt; g)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;bounds = inf.GetBounds(g, Control.Bounds);&lt;BR&gt;InitBlink(inf.Blink);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; InitBlink(&lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;.&lt;FONT color=#008080&gt;BlinkInfo&lt;/FONT&gt; blinkInfo)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (blinkInfo == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; || blinkInfo.Style == &lt;FONT color=#008080&gt;BlinkStyle&lt;/FONT&gt;.None || blinkInfo.Rate == 0) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;blinker = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Blinker&lt;/FONT&gt;(blinkInfo, &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; StopBlink()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (blinker != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;blinker.Stop();&lt;BR&gt;blinker = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;Blinker&lt;/FONT&gt; blinker;&lt;FONT color=#0000ff&gt;&lt;BR&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;Blinker&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;bool&lt;/FONT&gt; hide;&lt;FONT color=#008080&gt;&lt;BR&gt;LabelInfo&lt;/FONT&gt;.&lt;FONT color=#008080&gt;BlinkInfo&lt;/FONT&gt; inf;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;ControlLabel&lt;/FONT&gt; Owner;&lt;FONT color=#008080&gt;&lt;BR&gt;DateTime&lt;/FONT&gt; start = &lt;FONT color=#008080&gt;DateTime&lt;/FONT&gt;.Now;&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; hasend;&lt;FONT color=#008080&gt;&lt;BR&gt;DateTime&lt;/FONT&gt; end;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; Blinker(&lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;.&lt;FONT color=#008080&gt;BlinkInfo&lt;/FONT&gt; inf, &lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; Owner)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.inf = inf;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;BR&gt;hasend = inf.Style == &lt;FONT color=#008080&gt;BlinkStyle&lt;/FONT&gt;.LimitedTime &amp;amp;&amp;amp; inf.Duration &amp;gt; 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (hasend) end = start.AddMilliseconds(inf.Duration);&lt;BR&gt;SetTimer();&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;System.Threading.&lt;FONT color=#008080&gt;Timer&lt;/FONT&gt; timer;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShouldHide&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; hide; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;void&lt;/FONT&gt; Invalidate()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Owner.Control.InvokeRequired)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.Control.Invoke(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Threading.&lt;FONT color=#008080&gt;ThreadStart&lt;/FONT&gt;(Invalidate));&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.Invalidate(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; SwitchHide(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; state)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (hasend &amp;amp;&amp;amp; &lt;FONT color=#008080&gt;DateTime&lt;/FONT&gt;.Now &amp;gt;= end)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Stop();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (!stopped)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;hide = !hide;&lt;BR&gt;Invalidate();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;void&lt;/FONT&gt; SetTimer()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;timer =&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;new&lt;/FONT&gt; System.Threading.&lt;FONT color=#008080&gt;Timer&lt;/FONT&gt;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; System.Threading.&lt;FONT color=#008080&gt;TimerCallback&lt;/FONT&gt;(SwitchHide),&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;null&lt;/FONT&gt;, inf.Rate, inf.Rate);&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;bool&lt;/FONT&gt; stopped;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Stop()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;stopped = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (hide)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;hide = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;BR&gt;Invalidate();&lt;/DIV&gt;}&lt;FONT color=#008000&gt;&lt;BR&gt;//timer.Dispose();&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//timer = null;&lt;/FONT&gt;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; location changed&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; Control_LocationChanged(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Invalidate(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;EventHandler&lt;/FONT&gt; ehLocationChanged&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(Control_LocationChanged); }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Parent&lt;FONT color=#008080&gt;&lt;BR&gt;ParentReference&lt;/FONT&gt; Parent;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; RemoveFromParent()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Parent != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Parent.Remove(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetParent()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;RemoveFromParent();&lt;BR&gt;Parent = Owner.GetParentReference(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Control_ParentChanged(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetParent();&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;EventHandler&lt;/FONT&gt; ehParentChanged&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(Control_ParentChanged);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; IDisposable Members&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;bool&lt;/FONT&gt; isdisposed;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsDisposed { &lt;FONT color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; isdisposed; } }&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Dispose()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Control.ParentChanged -= ehParentChanged;&lt;BR&gt;Control.LocationChanged -= ehLocationChanged;&lt;BR&gt;Control.EnabledChanged -= &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(Control_EnabledChanged);&lt;BR&gt;RemoveInfoEvents();&lt;BR&gt;RemoveFromParent();&lt;BR&gt;CheckEnterLeave(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;BR&gt;isdisposed = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;ParentReference&lt;/FONT&gt;&amp;gt; parents = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;ParentReference&lt;/FONT&gt;&amp;gt;();&lt;FONT color=#008080&gt;&lt;BR&gt;ParentReference&lt;/FONT&gt; GetParentReference(&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; cl)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Control&lt;/FONT&gt; Parent = cl.Control.Parent;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Parent == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#008080&gt;&lt;BR&gt;ParentReference&lt;/FONT&gt; pr = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; parents.Count; i++)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (parents[i].Parent == Parent)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pr = parents[i];&lt;FONT color=#0000ff&gt;&lt;BR&gt;break&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (pr == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pr = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;ParentReference&lt;/FONT&gt;(Parent, &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;BR&gt;parents.Add(pr);&lt;/DIV&gt;}&lt;BR&gt;pr.Add(cl);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; pr;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;ParentReference&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;Control&lt;/FONT&gt; Parent;&lt;FONT color=#008080&gt;&lt;BR&gt;LabelProvider&lt;/FONT&gt; Owner;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; ParentReference(&lt;FONT color=#008080&gt;Control&lt;/FONT&gt; Parent, &lt;FONT color=#008080&gt;LabelProvider&lt;/FONT&gt; Owner)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Parent = Parent;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.Parent.Paint += ehPaint;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;BR&gt;Parent.MouseMove += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;MouseEventHandler&lt;/FONT&gt;(Parent_MouseMove);&lt;BR&gt;Parent.MouseLeave += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(Parent_MouseLeave);&lt;BR&gt;Parent.Click += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(Parent_Click);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; focus&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Parent_MouseMove(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;MouseEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckBounds();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Parent_MouseLeave(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;CheckBounds();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; CheckBounds()&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Point&lt;/FONT&gt; p = Parent.PointToClient(&lt;FONT color=#008080&gt;Control&lt;/FONT&gt;.MousePosition);&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; c &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; children)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;c.CheckEnterLeave(p);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Parent_Click(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; c &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; GetFocusedControls())&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;c.Click();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;IEnumerable&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt;&amp;gt; GetFocusedControls()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; children.Count; i++)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ControlLabel&lt;/FONT&gt; c = children[i];&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!c.IsDisposed &amp;amp;&amp;amp; c.Focused) &lt;FONT color=#0000ff&gt;yield&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; c;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (c.IsDisposed) i--;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; Paint&lt;FONT color=#008080&gt;&lt;BR&gt;PaintEventHandler&lt;/FONT&gt; ehPaint&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;PaintEventHandler&lt;/FONT&gt;(Parent_Paint);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Parent_Paint(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;PaintEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; cl &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; children)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;cl.Paint(e.Graphics);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Invalidate(&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; cl)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (cl.BoundsSet)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Parent.Invalidate(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Region&lt;/FONT&gt;(cl.Bounds));&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Invalidate();&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Invalidates all current labels&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Invalidate()&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Region&lt;/FONT&gt; r = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Region&lt;/FONT&gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; cl &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; children)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (cl.BoundsSet)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;r.Union(cl.Bounds);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Parent.Invalidate();&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;BR&gt;Parent.Invalidate(r);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; Children&lt;/DIV&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt;&amp;gt; children = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt;&amp;gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Add(&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; cl)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;children.Add(cl);&lt;BR&gt;Invalidate(cl);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Remove(&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; cl)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;children.Remove(cl);&lt;BR&gt;Invalidate(cl);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (children.Count == 0)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Dispose();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; tooltip&lt;FONT color=#008080&gt;&lt;BR&gt;ToolTip&lt;/FONT&gt; tt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; ShowTooltip(&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; c, &lt;FONT color=#008080&gt;Point&lt;/FONT&gt; p)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (tt == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;tt = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;ToolTip&lt;/FONT&gt;();&lt;BR&gt;tt.ShowAlways = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;tt.Show(c.LabelInfo.Text, Parent, p.X, p.Y, 5000);&lt;FONT color=#008000&gt;&lt;BR&gt;//tt.SetToolTip(c.Control, c.LabelInfo.Text);&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; RemoveTooltip(&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt; c)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (tt == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;tt.Hide(Parent);&lt;FONT color=#008000&gt;&lt;BR&gt;//tt.SetToolTip(c.Control, null);&lt;/FONT&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#endregion&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Dispose()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Parent.Paint -= ehPaint;&lt;BR&gt;Parent.MouseMove -= &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;MouseEventHandler&lt;/FONT&gt;(Parent_MouseMove);&lt;BR&gt;Parent.MouseLeave -= &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(Parent_MouseLeave);&lt;BR&gt;Parent.Click -= &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(Parent_Click);&lt;BR&gt;Owner.parents.Remove(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (tt != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;tt.Dispose();&lt;BR&gt;tt = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt;&amp;gt; list = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;ControlLabel&lt;/FONT&gt;&amp;gt;();&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Default settings&lt;FONT color=#0000ff&gt;&lt;BR&gt;private&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; defsettings = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&lt;BR&gt;[&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Content)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; DefaultSettings&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; defsettings; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; defsettings_SettingChanged(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#008080&gt;ParentReference&lt;/FONT&gt; p &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; parents)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;p.Invalidate();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#008080&gt;ISite&lt;/FONT&gt; Site&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.Site;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;defsettings.DesignTime = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;.DesignMode;&lt;FONT color=#0000ff&gt;&lt;BR&gt;base&lt;/FONT&gt;.Site = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Designer&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayoutEditor&lt;/FONT&gt; : &lt;FONT color=#008080&gt;UITypeEditor&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#008080&gt;UITypeEditorEditStyle&lt;/FONT&gt; GetEditStyle(&lt;FONT color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;UITypeEditorEditStyle&lt;/FONT&gt;.DropDown;&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;IWindowsFormsEditorService&lt;/FONT&gt; iw;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; EditValue(&lt;FONT color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context, &lt;FONT color=#008080&gt;IServiceProvider&lt;/FONT&gt; provider, &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;iw = (&lt;FONT color=#008080&gt;IWindowsFormsEditorService&lt;/FONT&gt;)provider.GetService(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;IWindowsFormsEditorService&lt;/FONT&gt;));&lt;FONT color=#008080&gt;&lt;BR&gt;LayoutPicker&lt;/FONT&gt; f = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutPicker&lt;/FONT&gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (value != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;f.Result = (&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;)value;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (context.Instance &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;LabelInfo&lt;/FONT&gt; inf = context.Instance &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (inf.DefaultSettings != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; inf.DefaultSettings.Layout != &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.NotSet)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;f.RevertValue = inf.DefaultSettings.Layout;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;BR&gt;f.TablePanel.LayoutChosen += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;LayoutPicker&lt;/FONT&gt;.&lt;FONT color=#008080&gt;LayoutPickerTable&lt;/FONT&gt;.&lt;FONT color=#008080&gt;LayoutChosenEventArgs&lt;/FONT&gt;&amp;gt;(TablePanel_LayoutChosen);&lt;BR&gt;iw.DropDownControl(f);&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;return&lt;/FONT&gt; f.Result;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; TablePanel_LayoutChosen(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;LayoutPicker&lt;/FONT&gt;.&lt;FONT color=#008080&gt;LayoutPickerTable&lt;/FONT&gt;.&lt;FONT color=#008080&gt;LayoutChosenEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;iw.CloseDropDown();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;BR&gt;[&lt;FONT color=#008080&gt;TypeConverter&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;.&lt;FONT color=#008080&gt;LabelInfoConverter&lt;/FONT&gt;))]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;#region&lt;/FONT&gt; Constructor&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; LabelInfo(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Text)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Text = Text;&lt;BR&gt;Init();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; setings&lt;FONT color=#0000ff&gt;&lt;BR&gt;enum&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Font, Padding, Layout, ForeColor, BackColor, Icon, ShowIcon, ShowText, Cursor, BlinkStyle, BlinkRate, BlinkDuration&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;object&lt;/FONT&gt;[] settings;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Init()&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Array&lt;/FONT&gt; arr = &lt;FONT color=#008080&gt;Enum&lt;/FONT&gt;.GetValues(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;));&lt;BR&gt;settings = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt;[arr.Length];&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; designtime;&lt;FONT color=#0000ff&gt;&lt;BR&gt;internal&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; DesignTime&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (owner != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; owner.DesignTime;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; designtime;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (designtime == &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;designtime = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (designtime)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (blink == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;blink = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;BlinkInfo&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;object&lt;/FONT&gt; GetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; i = (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)setting;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (settings[i] == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (owner != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; owner.GetSetting(setting);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; GetDefaultSetting(setting);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; settings[i];&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;T GetSetting&amp;lt;T&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;object&lt;/FONT&gt; o = GetSetting(setting);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (IsNullValue(setting, o))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetDefaultSetting&amp;lt;T&amp;gt;(setting);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; (T)o;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;object&lt;/FONT&gt; GetDefaultSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;switch&lt;/FONT&gt; (setting)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Font:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; DefaultFont;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Padding:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; 5;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Layout:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Default;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ForeColor:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.Black;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BackColor:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.Empty;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Icon:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; DefaultIcon;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowIcon:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowText:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkDuration:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; 5000;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkRate:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; 500;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkStyle:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;BlinkStyle&lt;/FONT&gt;.None;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;BR&gt;T GetDefaultSetting&amp;lt;T&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; (T)GetDefaultSetting(setting);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; IsNullValue(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting, &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (value == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (value &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#008080&gt;ValueType&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (setting == &lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Layout)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; (&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;)value == &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.NotSet;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (value &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#008080&gt;Color&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ((&lt;FONT color=#008080&gt;Color&lt;/FONT&gt;)value).IsEmpty;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (value &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT color=#008080&gt;Convert&lt;/FONT&gt;.ChangeType(value, &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)) == 0;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; HasSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; settings[(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)setting] != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting, &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;object&lt;/FONT&gt; cur = GetSetting(setting);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (IsNullValue(setting, value))&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (cur == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;;&lt;BR&gt;value = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (value.Equals(cur))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt;;&lt;/DIV&gt;settings[(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)setting] = value;&lt;BR&gt;OnSettingChanged();&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;settings[(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)setting] = owner == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; ? GetDefaultSetting(setting) : &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; setting)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;object&lt;/FONT&gt; o = settings[(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)setting];&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; !IsNullValue(setting, o);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt; SettingChanged;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; OnSettingChanged()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (SettingChanged != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SettingChanged(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; Text&lt;FONT color=#0000ff&gt;&lt;BR&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; text;&lt;BR&gt;[&lt;FONT color=#008080&gt;NotifyParentProperty&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Text&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; text; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;.Trim().Length == 0)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;text = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;text = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (TextChanged != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;TextChanged(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;/DIV&gt;OnSettingChanged();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; ToString()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; text;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt; TextChanged;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Layout&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.NotSet)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Layout&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Layout);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Layout, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;bool&lt;/FONT&gt; ShouldSerializeLayout()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Layout);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Color&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The font color. NB: setting this value will overwrite the &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="ForeBrush"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt; setting&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;Color&lt;/FONT&gt;), &lt;FONT color=#800000&gt;"Empty"&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;Color&lt;/FONT&gt; Color&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;Color&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ForeColor);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ForeColor, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;BR&gt;brush = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeColor()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ForeColor);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetColor()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ForeColor);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;Color&lt;/FONT&gt;), &lt;FONT color=#800000&gt;"Empty"&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;Color&lt;/FONT&gt; BackColor&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;Color&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BackColor);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BackColor, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;BR&gt;backbrush = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeBackColor()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BackColor);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetBackColor()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BackColor);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Brush&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#008080&gt;Brush&lt;/FONT&gt; brush, backbrush;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; In designtime, a solidbrush can be set through a color picker, but in runtime, the more advanced&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; brushes can be set as well&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;Brush&lt;/FONT&gt; ForeBrush&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (brush == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (owner == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;brush = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;SolidBrush&lt;/FONT&gt;(Color);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; owner.ForeBrush;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; brush;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;brush = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;OnSettingChanged();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;Brush&lt;/FONT&gt; GetForeBrush()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (brush != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; brush;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (HasSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ForeColor))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;SolidBrush&lt;/FONT&gt;(Color);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; ForeBrush;&lt;/DIV&gt;}&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; In designtime, a solidbrush can be set through a color picker, but in runtime, the more advanced&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; brushes can be set as well&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;Brush&lt;/FONT&gt; BackBrush&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (backbrush == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; owner != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; owner.BackBrush;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; backbrush;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;backbrush = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;OnSettingChanged();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;Brush&lt;/FONT&gt; GetBackBrush()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (backbrush != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; backbrush;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (HasSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BackColor))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;SolidBrush&lt;/FONT&gt;(BackColor);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (owner != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; owner.GetBackBrush();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; BackBrush;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Bounds&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; HasLayout(&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; layoutFlags, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; CheckBit)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; (layoutFlags &amp;amp; CheckBit) == CheckBit;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; IconPadding = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Paint(&lt;FONT color=#008080&gt;Graphics&lt;/FONT&gt; g, &lt;FONT color=#008080&gt;RectangleF&lt;/FONT&gt; rect,&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Enabled)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Brush&lt;/FONT&gt; b = GetBackBrush();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (b != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;g.FillRectangle(b, rect);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (ShowIcon)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Point&lt;/FONT&gt; p = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Point&lt;/FONT&gt;((&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)rect.X, (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)(rect.Y + (rect.Height - Icon.Height) * .5));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt;(Enabled)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;g.DrawIcon(Icon, p.X, p.Y);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ControlPaint&lt;/FONT&gt;.DrawImageDisabled(g, Icon.ToBitmap(), p.X, p.Y, &lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.Empty);&lt;/DIV&gt;&lt;BR&gt;rect.Offset(Icon.Width + IconPadding, 0);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ShowText)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Enabled)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;g.DrawString(text, Font, GetForeBrush(), rect);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ControlPaint&lt;/FONT&gt;.DrawStringDisabled(g, text, Font, &lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.LightGray, rect, &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Calculates where the label should be situated on its parent&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;param name="g"&amp;gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;returns&amp;gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;RectangleF&lt;/FONT&gt; GetBounds(&lt;FONT color=#008080&gt;Graphics&lt;/FONT&gt; g, &lt;FONT color=#008080&gt;Rectangle&lt;/FONT&gt; RelateTo)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SizeF&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;sizeI = ShowIcon ? Icon.Size : &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;SizeF&lt;/FONT&gt;(),&lt;BR&gt;size = ShowText ? g.MeasureString(text, Font) : &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;SizeF&lt;/FONT&gt;();&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;if&lt;/FONT&gt; (!sizeI.IsEmpty)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (size.IsEmpty)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;size = sizeI;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;size.Width += IconPadding + sizeI.Width;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (sizeI.Height &amp;gt; size.Height) size.Height = sizeI.Height;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;return&lt;/FONT&gt; GetBounds(size, RelateTo, Padding, Layout);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#008080&gt;RectangleF&lt;/FONT&gt; GetBounds(&lt;FONT color=#008080&gt;SizeF&lt;/FONT&gt; size, &lt;FONT color=#008080&gt;Rectangle&lt;/FONT&gt; RelateTo, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; padding, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; layout)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;PointF&lt;/FONT&gt; pf = RelateTo.Location;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt;&lt;BR&gt;h = RelateTo.Height,&lt;BR&gt;w = RelateTo.Width;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (HasLayout(layout, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Left))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pf.X -= padding + size.Width;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (HasLayout(layout, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Right))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pf.X += padding + w;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (HasLayout(layout, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Center))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pf.X += (w - size.Width) / 2;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (HasLayout(layout, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.RightFromCenter))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pf.X += w - size.Width;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (HasLayout(layout, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Top))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pf.Y -= padding + size.Height;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (HasLayout(layout, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Bottom))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pf.Y += h + padding;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (HasLayout(layout, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Middle))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pf.Y += (h - size.Height) / 2;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (HasLayout(layout, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.UnderMiddle))
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;pf.Y += h - size.Height;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;RectangleF&lt;/FONT&gt;(pf, size);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; PaintSymbol(&lt;FONT color=#008080&gt;Graphics&lt;/FONT&gt; g, &lt;FONT color=#008080&gt;Rectangle&lt;/FONT&gt; bounds, &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Layout)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;float&lt;/FONT&gt; perc = .50f;&lt;FONT color=#008080&gt;&lt;BR&gt;RectangleF&lt;/FONT&gt; rect = bounds;&lt;BR&gt;rect.Width *= perc;&lt;BR&gt;rect.Height *= perc;&lt;BR&gt;rect.X = (bounds.Width - rect.Width) / 2;&lt;BR&gt;rect.Y = (bounds.Height - rect.Height) / 2;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; PenWidth = 2;&lt;FONT color=#008080&gt;&lt;BR&gt;Rectangle&lt;/FONT&gt; r = &lt;FONT color=#008080&gt;Rectangle&lt;/FONT&gt;.Round(rect);&lt;BR&gt;g.DrawRectangle(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Pen&lt;/FONT&gt;(&lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.Navy, PenWidth), r);&lt;FONT color=#008080&gt;&lt;BR&gt;SizeF&lt;/FONT&gt; size = rect.Size;&lt;BR&gt;perc = .3f;&lt;BR&gt;size.Width *= perc;&lt;BR&gt;size.Height *= perc;&lt;BR&gt;rect = &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;.GetBounds(size, r, PenWidth + 1, Layout);&lt;BR&gt;r = &lt;FONT color=#008080&gt;Rectangle&lt;/FONT&gt;.Round(rect);&lt;BR&gt;g.DrawRectangle(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Pen&lt;/FONT&gt;(&lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.YellowGreen, PenWidth), r);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; defaults&lt;FONT color=#0000ff&gt;&lt;BR&gt;private&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; owner;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; For design time support, the owner is set to determine the defaults&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; DefaultSettings&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; owner; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { owner = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Font&lt;FONT color=#0000ff&gt;&lt;BR&gt;static&lt;/FONT&gt; &lt;FONT color=#008080&gt;Font&lt;/FONT&gt; DefaultFont = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Font&lt;/FONT&gt;(&lt;FONT color=#800000&gt;"Times New Roman"&lt;/FONT&gt;, 10);&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;Font&lt;/FONT&gt; Font&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;Font&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Font);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Font, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeFont()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Font);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetFont()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Font);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Cursor&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;Cursor&lt;/FONT&gt; Cursor&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;Cursor&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Cursor);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Cursor, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeCursor()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Cursor);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetCursor()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Cursor);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Padding&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The amount of space that should exist between the end of the text and the control&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(-1)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Padding&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Padding);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Padding, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializePadding()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Padding);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetPadding()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Padding);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Icon&lt;BR&gt;[System.Runtime.InteropServices.&lt;FONT color=#008080&gt;DllImport&lt;/FONT&gt;(&lt;FONT color=#800000&gt;"shell32.dll"&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;extern&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#008080&gt;IntPtr&lt;/FONT&gt; ExtractIcon(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; hInst, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; lpszExeFileName, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; nIconIndex);&lt;FONT color=#0000ff&gt;&lt;BR&gt;static&lt;/FONT&gt; &lt;FONT color=#008080&gt;Icon&lt;/FONT&gt; GetIcon(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; index)&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//IntPtr handle = ExtractIcon(0, "user32.dll", index);&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;IntPtr&lt;/FONT&gt; handle = ExtractIcon(0, &lt;FONT color=#800000&gt;"shell32.dll"&lt;/FONT&gt;, index);&lt;FONT color=#008080&gt;&lt;BR&gt;Icon&lt;/FONT&gt; ic = &lt;FONT color=#008080&gt;Icon&lt;/FONT&gt;.FromHandle(handle);&lt;FONT color=#008080&gt;&lt;BR&gt;Bitmap&lt;/FONT&gt; bmp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Bitmap&lt;/FONT&gt;(16, 16);&lt;FONT color=#008080&gt;&lt;BR&gt;Graphics&lt;/FONT&gt;.FromImage(bmp).DrawIcon(ic, &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Rectangle&lt;/FONT&gt;(0, 0, bmp.Width, bmp.Height));&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;Icon&lt;/FONT&gt;.FromHandle(bmp.GetHicon());&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;static&lt;/FONT&gt; &lt;FONT color=#008080&gt;Icon&lt;/FONT&gt; DefaultIcon = GetIcon(73);&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;Icon&lt;/FONT&gt; Icon&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;Icon&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Icon);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Icon, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeIcon()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Icon);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetIcon()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.Icon);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; ShowIcon&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShowIcon&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowIcon);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowIcon, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeShowIcon()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowIcon);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetShowIcon()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowIcon);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; ShowText&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; ShowText&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetSetting&amp;lt;&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowText);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowText, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeShowText()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowText);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetShowText()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.ShowText);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Blink&lt;/DIV&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;BlinkInfo&lt;/FONT&gt; blink;&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Content)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;BlinkInfo&lt;/FONT&gt; Blink&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (blink == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;blink = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;BlinkInfo&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; blink;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeBlink()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkStyle)&lt;BR&gt;|| ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkRate)&lt;BR&gt;|| ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkDuration);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;BR&gt;[&lt;FONT color=#008080&gt;TypeConverter&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;ExpandableObjectConverter&lt;/FONT&gt;))]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;BlinkInfo&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; Owner;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; BlinkInfo(&lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; Owner)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; Style&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;BlinkStyle&lt;/FONT&gt; Style&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Owner.GetSetting&amp;lt;&lt;FONT color=#008080&gt;BlinkStyle&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkStyle);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkStyle, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeStyle()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Owner.ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkStyle);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetStyle()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkStyle);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Rate&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(0)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Rate&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Owner.GetSetting&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkRate);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkRate, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeRate()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Owner.ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkRate);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetRate()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkRate);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Duration&lt;BR&gt;[&lt;FONT color=#008080&gt;AmbientValue&lt;/FONT&gt;(0)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Duration&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Owner.GetSetting&amp;lt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&amp;gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkDuration);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.SetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkDuration, &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; ShouldSerializeDuration()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Owner.ShouldSerializeSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkDuration);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ResetDuration()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.ResetSetting(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;.BlinkDuration);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; ToString()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Style == &lt;FONT color=#008080&gt;BlinkStyle&lt;/FONT&gt;.None) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#800000&gt;"None"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; res = &lt;FONT color=#800000&gt;"Blink every "&lt;/FONT&gt; + Rate + &lt;FONT color=#800000&gt;" milliseconds"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (Style == &lt;FONT color=#008080&gt;BlinkStyle&lt;/FONT&gt;.LimitedTime) res += &lt;FONT color=#800000&gt;" for a timespan of "&lt;/FONT&gt; + Duration + &lt;FONT color=#800000&gt;" milliseconds"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;BR&gt;#region&lt;/FONT&gt; Type Converter&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;DefaultInstanceConverter&lt;/FONT&gt;&amp;lt;T&amp;gt; : &lt;FONT color=#008080&gt;ExpandableObjectConverter&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; CanConvertTo(&lt;FONT color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context, &lt;FONT color=#008080&gt;Type&lt;/FONT&gt; destinationType)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.CanConvertTo(context, destinationType)&lt;BR&gt;|| destinationType == &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;InstanceDescriptor&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; ConvertTo(&lt;FONT color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context, System.Globalization.&lt;FONT color=#008080&gt;CultureInfo&lt;/FONT&gt; culture, &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value, &lt;FONT color=#008080&gt;Type&lt;/FONT&gt; destinationType)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (value &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; T &amp;amp;&amp;amp; destinationType == &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;InstanceDescriptor&lt;/FONT&gt;))&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetInstanceDescriptor((T)value);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.ConvertTo(context, culture, value, destinationType);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT color=#008080&gt;InstanceDescriptor&lt;/FONT&gt; GetInstanceDescriptor(T obj)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ConstructorInfo&lt;/FONT&gt; ci = obj.GetType().GetConstructor(&lt;FONT color=#008080&gt;Type&lt;/FONT&gt;.EmptyTypes);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (ci == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;throw&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Exception&lt;/FONT&gt;(obj.GetType().FullName + &lt;FONT color=#800000&gt;" does not contain parameterless constructors"&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;InstanceDescriptor&lt;/FONT&gt;(ci, &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfoConverter&lt;/FONT&gt; : &lt;FONT color=#008080&gt;DefaultInstanceConverter&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;&amp;gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#008080&gt;InstanceDescriptor&lt;/FONT&gt; GetInstanceDescriptor(&lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt; li)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.IsNullOrEmpty(li.text)) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;bool&lt;/FONT&gt; isComplete = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt; s &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; &lt;FONT color=#008080&gt;Enum&lt;/FONT&gt;.GetValues(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelInfoSettings&lt;/FONT&gt;)))&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (li.ShouldSerializeSetting(s))&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;isComplete = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;break&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;InstanceDescriptor&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;).GetConstructor(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Type&lt;/FONT&gt;[] { &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;) }),&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt;[] { li.text }, isComplete);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; CanConvertFrom(&lt;FONT color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context, &lt;FONT color=#008080&gt;Type&lt;/FONT&gt; sourceType)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.CanConvertFrom(context, sourceType)&lt;BR&gt;|| sourceType == &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; ConvertFrom(&lt;FONT color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context, System.Globalization.&lt;FONT color=#008080&gt;CultureInfo&lt;/FONT&gt; culture, &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Control&lt;/FONT&gt; c = context.Instance &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#008080&gt;Control&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (c != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp;&amp;amp; value &lt;FONT color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;string&lt;/FONT&gt; txt = value &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;;&lt;FONT color=#008080&gt;&lt;BR&gt;LabelInfo&lt;/FONT&gt; li = context.PropertyDescriptor.GetValue(c) &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (li == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;li = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;(txt);&lt;BR&gt;context.PropertyDescriptor.SetValue(c, li);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;li.Text = txt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 100pt"&gt;return&lt;/FONT&gt; li;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.ConvertFrom(context, culture, value);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsValid(&lt;FONT color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context, &lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; value)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;LabelInfo&lt;/FONT&gt; inf = value &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelInfo&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (inf == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; !&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;.IsNullOrEmpty(inf.text);&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;enum&lt;/FONT&gt; &lt;FONT color=#008080&gt;BlinkStyle&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;None,&lt;BR&gt;Permanent,&lt;BR&gt;LimitedTime&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;[&lt;FONT color=#008080&gt;Flags&lt;/FONT&gt;]&lt;BR&gt;[&lt;FONT color=#008080&gt;Editor&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelProvider&lt;/FONT&gt;.&lt;FONT color=#008080&gt;LabelLayoutEditor&lt;/FONT&gt;), &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#008080&gt;UITypeEditor&lt;/FONT&gt;))]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;enum&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;NotSet = 0,&lt;BR&gt;Top = 1,&lt;BR&gt;AboveMiddle = 2,&lt;BR&gt;Middle = 4,&lt;BR&gt;UnderMiddle = 8,&lt;BR&gt;Bottom = 16,&lt;BR&gt;Left = 32,&lt;BR&gt;LeftFromCenter = 64,&lt;BR&gt;Center = 128,&lt;BR&gt;RightFromCenter = 256,&lt;BR&gt;Right = 512,&lt;BR&gt;Default = &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Left | &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.AboveMiddle&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#region&lt;/FONT&gt; LayoutPicker&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Control to select a &lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;lt;see cref="LabelLayout"/&amp;gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;. Used in design time for LabelLayout properties&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;BR&gt;[&lt;FONT color=#008080&gt;ToolboxItem&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutPicker&lt;/FONT&gt; : &lt;FONT color=#008080&gt;UserControl&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; LayoutPicker()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;table.Dock = &lt;FONT color=#008080&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;BR&gt;Controls.Add(table);&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;LayoutPickerTable&lt;/FONT&gt; table = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutPickerTable&lt;/FONT&gt;();&lt;BR&gt;[&lt;FONT color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutPickerTable&lt;/FONT&gt; TablePanel&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; table;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;BR&gt;[&lt;FONT color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Default)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Result&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; table.Result; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { table.Result = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;LabelLayout&lt;/FONT&gt; revertvalue;&lt;BR&gt;[&lt;FONT color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.NotSet)]&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; RevertValue&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; revertvalue; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;revertvalue = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; ((revertvalue == &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.NotSet) == (lblRevert == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;))&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (lblRevert == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;lblRevert = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Label&lt;/FONT&gt;();&lt;BR&gt;lblRevert.ForeColor = &lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.Blue;&lt;BR&gt;lblRevert.Dock = &lt;FONT color=#008080&gt;DockStyle&lt;/FONT&gt;.Bottom;&lt;BR&gt;lblRevert.Font = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Font&lt;/FONT&gt;(lblRevert.Font, &lt;FONT color=#008080&gt;FontStyle&lt;/FONT&gt;.Underline);&lt;BR&gt;lblRevert.Click += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(lblRevert_Click);&lt;BR&gt;lblRevert.Text = &lt;FONT color=#800000&gt;"Set to parent"&lt;/FONT&gt;;&lt;BR&gt;lblRevert.TextAlign = &lt;FONT color=#008080&gt;ContentAlignment&lt;/FONT&gt;.MiddleCenter;&lt;BR&gt;lblRevert.Cursor = &lt;FONT color=#008080&gt;Cursors&lt;/FONT&gt;.Hand;&lt;BR&gt;Controls.Add(lblRevert);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;lblRevert.Dispose();&lt;BR&gt;lblRevert = &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; lblRevert_Click(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Result = revertvalue;&lt;BR&gt;table.InvokeLayoutChosen(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;Label&lt;/FONT&gt; lblRevert;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutPickerTable&lt;/FONT&gt; : &lt;FONT color=#008080&gt;TableLayoutPanel&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Label&lt;/FONT&gt; MiddleControl = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;Label&lt;/FONT&gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; cnt = 5;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; LayoutPickerTable()
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;: &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;(&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Default)&lt;/DIV&gt;{&lt;BR&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; LayoutPickerTable(&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Current)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res = startvalue = Current;&lt;BR&gt;RowCount = ColumnCount = cnt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;float&lt;/FONT&gt; perc = 100 / cnt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; cnt; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ColumnStyles.Add(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;ColumnStyle&lt;/FONT&gt;(&lt;FONT color=#008080&gt;SizeType&lt;/FONT&gt;.Percent, perc));&lt;BR&gt;RowStyles.Add(&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;RowStyle&lt;/FONT&gt;(&lt;FONT color=#008080&gt;SizeType&lt;/FONT&gt;.Percent, perc));&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; cnt; i++)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AddButton(i, 0);&lt;BR&gt;AddButton(i, cnt - 1);&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (i &amp;gt; 0 &amp;amp;&amp;amp; i &amp;lt; cnt - 1)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;AddButton(0, i);&lt;BR&gt;AddButton(cnt - 1, i);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;MiddleControl.Dock = &lt;FONT color=#008080&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;BR&gt;MiddleControl.BackColor = &lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.Gray;&lt;BR&gt;MiddleControl.TextAlign = &lt;FONT color=#008080&gt;ContentAlignment&lt;/FONT&gt;.BottomCenter;&lt;BR&gt;Controls.Add(MiddleControl, 1, 1);&lt;BR&gt;SetRowSpan(MiddleControl, 3);&lt;BR&gt;SetColumnSpan(MiddleControl, 3);&lt;BR&gt;MiddleControl.Paint += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;PaintEventHandler&lt;/FONT&gt;(MiddleControl_Paint);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Navigate(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Col, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Row, &lt;FONT color=#008080&gt;LayoutButton&lt;/FONT&gt; b)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;TableLayoutPanelCellPosition&lt;/FONT&gt; cell = GetCellPosition(b);&lt;BR&gt;Navigate(Col, Row, cell.Column, cell.Row);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Navigate(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Col, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Row, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; curcol, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; currow)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;currow = &lt;FONT color=#008080&gt;Math&lt;/FONT&gt;.Max(0, &lt;FONT color=#008080&gt;Math&lt;/FONT&gt;.Min(cnt - 1, Row + currow));&lt;BR&gt;curcol = &lt;FONT color=#008080&gt;Math&lt;/FONT&gt;.Max(0, &lt;FONT color=#008080&gt;Math&lt;/FONT&gt;.Min(cnt - 1, Col + curcol));&lt;FONT color=#008080&gt;&lt;BR&gt;LayoutButton&lt;/FONT&gt; b = GetControlFromPosition(curcol, currow) &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutButton&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (b == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Navigate(Col, Row, curcol, currow);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;b.Focus();&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; OnKeyDown(&lt;FONT color=#008080&gt;KeyEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (e.KeyCode == &lt;FONT color=#008080&gt;Keys&lt;/FONT&gt;.Cancel)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Cancel();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Cancel()&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Result = startvalue;&lt;BR&gt;OnLayoutChosen(&lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; MiddleControl_Paint(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;PaintEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;LabelInfo&lt;/FONT&gt;.PaintSymbol(e.Graphics, MiddleControl.Bounds, res);&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;LabelLayout&lt;/FONT&gt; startvalue;&lt;FONT color=#0000ff&gt;&lt;BR&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutButton&lt;/FONT&gt; : &lt;FONT color=#008080&gt;Button&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Layout;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; LayoutButton(&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Layout)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Layout = Layout;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#008080&gt;Color&lt;/FONT&gt; BackColor&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Selected)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;Color&lt;/FONT&gt;.Gray;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;Control&lt;/FONT&gt;.DefaultBackColor;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//base.BackColor = value;&lt;/FONT&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Selected&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Parent == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; Owner.res == Layout;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#008080&gt;&lt;BR&gt;LayoutPickerTable&lt;/FONT&gt; Owner&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; Parent &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutPickerTable&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;protected&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; IsInputKey(&lt;FONT color=#008080&gt;Keys&lt;/FONT&gt; keyData)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;switch&lt;/FONT&gt; (keyData)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;Keys&lt;/FONT&gt;.Down:
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.Navigate(0, 1, &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;Keys&lt;/FONT&gt;.Up:
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.Navigate(0, -1, &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;Keys&lt;/FONT&gt;.Left:
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.Navigate(-1, 0, &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;Keys&lt;/FONT&gt;.Right:
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Owner.Navigate(1, 0, &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;break&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;default&lt;/FONT&gt;:&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;.IsInputKey(keyData);&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;void&lt;/FONT&gt; AddButton(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Column, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Row)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;LabelLayout&lt;/FONT&gt; lay = GetLayout(Column, Row);&lt;FONT color=#008080&gt;&lt;BR&gt;LayoutButton&lt;/FONT&gt; b = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutButton&lt;/FONT&gt;(lay);&lt;BR&gt;b.Dock = &lt;FONT color=#008080&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;BR&gt;b.TabStop = &lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;;&lt;BR&gt;b.Click += &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;(b_Click);&lt;BR&gt;Controls.Add(b, Column, Row);&lt;BR&gt;buttons.Add(b);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;LabelLayout&lt;/FONT&gt; GetLayout(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; col, &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; row)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (col == 0)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res |= &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Left;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (col == cnt - 1)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res |= &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Right;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res |= (&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;)((&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.LeftFromCenter &amp;lt;&amp;lt; col - 1);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; (row == 0)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res |= &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Top;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (row == cnt - 1)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res |= &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.Bottom;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;else&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;res |= (&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;)((&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt;.AboveMiddle &amp;lt;&amp;lt; row - 1);&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;return&lt;/FONT&gt; res;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; b_Click(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;LayoutButton&lt;/FONT&gt; b = sender &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutButton&lt;/FONT&gt;;&lt;BR&gt;Result = b.Layout;&lt;BR&gt;OnLayoutChosen(&lt;FONT color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; OnLayoutChosen(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Cancelled)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (LayoutChosen != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;LayoutChosen(&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutChosenEventArgs&lt;/FONT&gt;(Result, Cancelled));&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; InvokeLayoutChosen(&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Cancelled)&lt;BR&gt;{
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;OnLayoutChosen(Cancelled);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;LayoutChosenEventArgs&lt;/FONT&gt; : &lt;FONT color=#008080&gt;EventArgs&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Cancelled;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Result;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; LayoutChosenEventArgs(&lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Result, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; Cancelled)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;this&lt;/FONT&gt;.Result = Result;&lt;FONT color=#0000ff&gt;&lt;BR&gt;this&lt;/FONT&gt;.Cancelled = Cancelled;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT color=#008080&gt;EventHandler&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;LayoutChosenEventArgs&lt;/FONT&gt;&amp;gt; LayoutChosen;&lt;FONT color=#008080&gt;&lt;BR&gt;LabelLayout&lt;/FONT&gt; res;&lt;FONT color=#008080&gt;&lt;BR&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;LayoutButton&lt;/FONT&gt;&amp;gt; buttons = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#008080&gt;LayoutButton&lt;/FONT&gt;&amp;gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;LabelLayout&lt;/FONT&gt; Result&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; res; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;LayoutButton&lt;/FONT&gt; b = GetSelectedButton();&lt;BR&gt;res = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;BR&gt;MiddleControl.Text = res.ToString();&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (b != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;b.Invalidate();&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;if&lt;/FONT&gt; ((b = GetSelectedButton()) != &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;)
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;b.Invalidate();&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;LayoutButton&lt;/FONT&gt; GetSelectedButton()&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#008080&gt;LayoutButton&lt;/FONT&gt; btn &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; buttons)&lt;BR&gt;{&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (btn.Selected)&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; btn;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;BR&gt;}&lt;SPAN style="FONT-FAMILY: Times New Roman"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =1;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/6030.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>Obtaining all types in a solution in both runtime and designtime</title><link>http://blogs.vbcity.com/hotdog/archive/2006/03/31/5943.aspx</link><pubDate>Fri, 31 Mar 2006 06:49:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2006/03/31/5943.aspx</guid><description>&lt;P&gt;Often, mostly for designers, I want to get a list of available types. Mostly specific types and from all Assemblies. Had multiple code functions for that and that multiple times, because for different projects I tended to rewrite them (argh? yes argh ). But... now I decided to just storm ahead and create some default functionality.&lt;/P&gt;
&lt;P&gt;Why, that's easy,&amp;nbsp;I can almost hear you say. Just use Assembly.GetTypes.... Right....Some issues there: I want all referenced assemblies as well and, it should work in design time. And off course some filtering,&amp;nbsp;assignable to other (interface) types. &lt;/P&gt;
&lt;P&gt;The design mode is the difficult part. Most seemed to be 'straight forward' enough: use an IServiceProvider&amp;nbsp; to obtain an IDesignerHost. The IServiceProvider could normally be obtained from the ISite of a component or Control. And if none was provider it could be obtained from LicenseManager.CurrentContext. Then the IDesignerhost exposed a RootComponentClassName property which could lead to the type and thus to the assembly from which the design time. For some scenarios, eg when using an UITypeEditor, the LicenseManager.CurrentContext will not be set, but then it can be specifically set inside the editor.&lt;BR&gt;But... this would only work the first time when the component was added to the form. After that, the RootComponentClassName would contain only the name of the form, not the full namespace.&lt;BR&gt;After some fiddling around and playing the guitar very badly, because I don't know how, it turned out that the IDesignerHost would contain the full name after loading had completed. Knowing that, it was a matter of working around, but the code should continue as well... So a wrapper control would be best while wrapping anyway.&lt;/P&gt;
&lt;P&gt;The result is in the code below. There is one difference still between design time and runtime: runtime uses the EntryAssembly (the main executable) and design time the Assembly in which the design is taking place. This is intented: when assigning a type to a property, the assembly must know the type for the code to compile. In runtime, the appdomain has the main assembly loaded and the types can be used throughout the entire appdomain.&lt;/P&gt;
&lt;P&gt;The classes included:&lt;BR&gt;-The TypeEnumerator itself is the main component. It can be used as a component, just as an instance to get types, or as a DataSource.&lt;BR&gt;-The TypeEnumeratorSettings holds properties for the filtering. It can be exchanged with the other classes.&lt;BR&gt;-The TypeSelector is a listbox holding control which uses the TypeEnumerator to display the types and enable the use to select them.&lt;BR&gt;-The TypeEditor is an UITypeEditor which can extend a designer for properties with the 'Type' type, or the 'Type[]' type. The TypeSelector and TypeEnumerator for example use it for setting their FilterType(s)&lt;/P&gt;

&lt;!-- --Start of code block
--&gt;&lt;DIV Style=" Border='3px #000080 Double'; Margin-Left=10pt; Margin-Right=2pt;" OnKeyDown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;&amp; i&lt;ch.selcount){ch.sel=i;ch.click();}"&gt;&lt;DIV Style=" Font-Size=9pt; Font-Family='Microsoft Sans Serif'; Border-Bottom='3px #000080 Double';" OnClick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'250pt':null;if(i==1&amp;&amp; ch.offsetHeight&gt;h)ch.style.height=h;" sel=1 selold=1 selcount=3&gt;&lt;b&gt;  Code &lt;/b&gt;&lt;a href="javascript:" Style=" Margin-Left=10pt; Margin-Right=10pt;" OnClick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');"&gt;Copy&lt;/a&gt;&lt;SPAN Style=" Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=0"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();"&gt;Hide&lt;/SPAN&gt;&lt;SPAN Style=" Font-Weight=bolder; Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=1"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();" Checked=True&gt;Scroll&lt;/SPAN&gt;&lt;SPAN Style=" Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=2"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();"&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;&lt;DIV Style=" BackGround-Color=#dcdcdc; overflow='auto'; Height=250pt;"&gt;&lt;FONT Color=#0000ff&gt;namespace&lt;/FONT&gt; ReflectionWrappers&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//references needed:&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//-System.windows.forms&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//-System.Drawing&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.ComponentModel;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.ComponentModel.Design;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Drawing.Design;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Reflection;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Collections.Generic;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Windows.Forms;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Windows.Forms.Design;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Class to enemurate available types. This class can be used directly, as a component, and as a DataSource&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumerator&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;Component&lt;/FONT&gt;, &lt;FONT Color=#008080&gt;IListSource&lt;/FONT&gt;, &lt;FONT Color=#008080&gt;ISupportInitialize&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; GetTopAssembly()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetTopAssembly(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; GetTopAssembly(&lt;FONT Color=#008080&gt;IServiceProvider&lt;/FONT&gt; provider)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;IDesignerHost&lt;/FONT&gt; host = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; GetTopAssembly(&lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; provider, &lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; host, &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; GetTopAssembly(&lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IServiceProvider&lt;/FONT&gt; provider, &lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IDesignerHost&lt;/FONT&gt; id, &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; SupressErrors)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;id = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#008080&gt;&lt;br&gt;Assembly&lt;/FONT&gt; a;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;LicenseManager&lt;/FONT&gt;.UsageMode == &lt;FONT Color=#008080&gt;LicenseUsageMode&lt;/FONT&gt;.Designtime&lt;br&gt;|| (a = &lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt;.GetEntryAssembly()) == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (id == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (provider == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;provider = &lt;FONT Color=#008080&gt;LicenseManager&lt;/FONT&gt;.CurrentContext;&lt;/div&gt;id = (&lt;FONT Color=#008080&gt;IDesignerHost&lt;/FONT&gt;)provider.GetService(&lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;IDesignerHost&lt;/FONT&gt;));&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (id == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; || id.RootComponentClassName == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Exception&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotAn assembly was tried to be obtained in design time, but no designer was (fully) loaded yet. When using this functionality in a control or component, please call it after intialization is completed. The TypeSelector control contains functionality on how to go about&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#008000&gt;&lt;br&gt;//id.RootComponent.GetType() would return the base class being edited,&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//not the actual form or component. RootComponentClassName should contain the&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//proper namespace&lt;/FONT&gt;&lt;FONT Color=#008080&gt;&lt;br&gt;Type&lt;/FONT&gt; type = &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;.GetType(id.RootComponentClassName, &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (type == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (id.Loading)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Exception&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotThe proper type could not be obtained in design time. The designer was still loading, please call this function after loading is completed. Assign to the Load event to be able to actually use the new values&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Exception&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotAn assembly was tried to be obtained in design time, but the proper type could not be determined: &amp;quot&lt;/FONT&gt; + id.RootComponentClassName + &lt;FONT Color=#800000&gt;&amp;quot.\nMake sure the current project has been build if you just added or changed a reference. If this error persists, you might have to reload the solution (aka restart visual studio)&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;br&gt;a = type.Assembly;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;catch&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (SupressErrors)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;throw&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; a;&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; TypeEnumerator()&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt;())&lt;/div&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//Source : http://blogs.vbcity.com/hotdog/archive/2006/03/31/5943.aspx&lt;/FONT&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; TypeEnumerator(&lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt; Settings)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Settings = Settings;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; TypeEnumerator(&lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; InAssembly)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;(InAssembly, &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;/div&gt;{&lt;br&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; TypeEnumerator(&lt;FONT Color=#0000ff&gt;params&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] FilterTypes)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;, FilterTypes)&lt;/div&gt;{&lt;br&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; TypeEnumerator(&lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; InAssembly, &lt;FONT Color=#0000ff&gt;params&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] FilterTypes)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;()&lt;/div&gt;{&lt;div style="margin-left:20pt"&gt;settings.Filter.FilterTypes = FilterTypes;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; TypeEnumerator(&lt;FONT Color=#008080&gt;IContainer&lt;/FONT&gt; container)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;()&lt;/div&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (container != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;container.Add(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;);&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Used for designer instances&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotServiceProvider&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; TypeEnumerator(&lt;FONT Color=#008080&gt;IServiceProvider&lt;/FONT&gt; ServiceProvider)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;()&lt;/div&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.ServiceProvider = ServiceProvider;&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IServiceProvider&lt;/FONT&gt; provider;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; For design time only: the service provider that can give the current designer (IDesignerHost)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If this value is not specified, the &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotSite&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; property is used, but in some cases (eg an &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotUITypeEditor&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;),&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; this component itself will not be in designmode, and the Site will not be available. In those cases&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; the proper provider can be set (or if possible, the assembly itself ;-) )&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;br&gt;[&lt;FONT Color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IServiceProvider&lt;/FONT&gt; ServiceProvider&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (provider != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; provider;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;if&lt;/FONT&gt; (Site != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; Site;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;if&lt;/FONT&gt; (Container != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Container &lt;FONT Color=#0000ff&gt;is&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ISite&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; ((&lt;FONT Color=#008080&gt;ISite&lt;/FONT&gt;)Container);&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt; { provider = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/div&gt;}&lt;FONT Color=#008080&gt;&lt;br&gt;Type&lt;/FONT&gt;[] types;&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; listchanged=&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; OnListChanged(&lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; ClearList)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;listchanged |= ClearList;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (suspendlistchange || Initializing)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (ListChanged != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;ListChanged(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt; ListChanged;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Returns all non system types out of the toplevel assembly.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; To specify further settings, use an instance of the TypeEnumerator&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;&amp;gt GetAllTypes()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumerator&lt;/FONT&gt;().GetTypes();&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#008080&gt;&lt;div style="margin-left:40pt"&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;&amp;gt GetTypes()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; a &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; GetAssemblies())&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt; t &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; GetTypes(a))&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; t;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt; settings;&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotThe settings on which the obtaining of specified types is based&amp;quot&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Content)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt; Settings&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; settings; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (DesignMode)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;value&lt;/FONT&gt; = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt;();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ArgumentNullException&lt;/FONT&gt;();&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (settings == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#008080&gt;&lt;br&gt;PropertyChangedEventHandler&lt;/FONT&gt; handler = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;PropertyChangedEventHandler&lt;/FONT&gt;(settings_PropertyChanged);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (settings != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;settings.PropertyChanged -= handler;&lt;/div&gt;settings = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;settings.PropertyChanged += handler;&lt;br&gt;OnListChanged(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; settings_PropertyChanged(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;PropertyChangedEventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;OnListChanged(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; suspendlistchange;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] GetList()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (listchanged &amp;amp&amp;amp !Initializing)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;Cursor&lt;/FONT&gt; cur = &lt;FONT Color=#008080&gt;Cursor&lt;/FONT&gt;.Current;&lt;FONT Color=#008080&gt;&lt;br&gt;Cursor&lt;/FONT&gt;.Current = &lt;FONT Color=#008080&gt;Cursors&lt;/FONT&gt;.WaitCursor;&lt;br&gt;suspendlistchange = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;List&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;&amp;gt list = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;List&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;&amp;gt();&lt;FONT Color=#0000ff&gt;&lt;br&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt; t &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; GetTypes())&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;list.Add(t);&lt;/div&gt;}&lt;br&gt;types = list.ToArray();&lt;br&gt;listchanged = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;finally&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;suspendlistchange = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT Color=#008080&gt;&lt;br&gt;Cursor&lt;/FONT&gt;.Current = cur;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; types;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] Types&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; GetList(); }&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Fires when the component is ready for use. Will only fire if the types are asked for (with &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotGetList&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; or &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotTypes&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; or if BeginEdit and EndEdit is used.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If the component is used in a designer, beginedit and endedit are used automatically in which case&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Load will fire as well.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt; Load;&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; InitTopAssembly()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (settings.TopAssembly != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;provider = ServiceProvider;&lt;FONT Color=#008080&gt;&lt;br&gt;IDesignerHost&lt;/FONT&gt; host = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;suspendlistchange = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;settings.TopAssembly = GetTopAssembly(&lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; provider, &lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; host, &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;catch&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (host != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp host.Loading)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;host.LoadComplete += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(host_LoadComplete);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;throw&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;finally&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;suspendlistchange = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Load != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;Load(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Gets all assemblies according to the specified settings.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt;&amp;gt GetAssemblies()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (!InitTopAssembly())&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;break&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; settings.TopAssembly;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (settings.IncludeReferencedAssemblies)&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//bool designtime = LicenseManager.UsageMode == LicenseUsageMode.Designtime;&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;AssemblyName&lt;/FONT&gt; a &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; settings.TopAssembly.GetReferencedAssemblies())&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (settings.IncludeSystemAssemblies&lt;br&gt;||&lt;br&gt;(!a.Name.StartsWith(&lt;FONT Color=#800000&gt;&amp;quotSystem.&amp;quot&lt;/FONT&gt;) &amp;amp&amp;amp a.Name != &lt;FONT Color=#800000&gt;&amp;quotmscorlib&amp;quot&lt;/FONT&gt; &amp;amp&amp;amp a.Name != &lt;FONT Color=#800000&gt;&amp;quotSystem&amp;quot&lt;/FONT&gt;))&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt;.Load(a);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; host_LoadComplete(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;InitTopAssembly();&lt;br&gt;OnListChanged(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Checks if the specified type should be included according to the current settings&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quott&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; CheckType(&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt; t)&lt;br&gt;{&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (settings.HasFilter &amp;amp&amp;amp&lt;div style="margin-left:20pt"&gt;!settings.Filter.ValidateType(t, &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;))&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;if&lt;/FONT&gt; (settings.HasExlusionRules&lt;div style="margin-left:20pt"&gt;&amp;amp&amp;amp settings.Exclude.ValidateType(t, &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;))&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#008080&gt;&lt;div style="margin-left:40pt"&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;&amp;gt GetTypes(&lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; a)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt; t &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; a.GetTypes())&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (CheckType(t))&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; t;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;#region&lt;/FONT&gt; IListSource Members&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; ContainsListCollection&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;; }&lt;/div&gt;}&lt;br&gt;System.Collections.&lt;FONT Color=#008080&gt;IList&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IListSource&lt;/FONT&gt;.GetList()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetList();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;#endregion&lt;br&gt;#region&lt;/FONT&gt; ISupportInitialize Members&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; Initializing&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; initcount &amp;gt 0; }&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;int&lt;/FONT&gt; initcount = 0;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; BeginInit()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;initcount++;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; EndInit()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (--initcount &amp;lt= 0)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;initcount = 0;&lt;br&gt;InitTopAssembly();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (listchanged)&lt;div style="margin-left:20pt"&gt;OnListChanged(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#endregion&lt;/FONT&gt;&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;br&gt;[&lt;FONT Color=#008080&gt;TypeConverter&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;ComponentConverter&lt;/FONT&gt;))]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;INotifyPropertyChanged&lt;/FONT&gt;&lt;br&gt;{&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; topAssembly;&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotThe Assembly in which to (begin the) search. If this value is null, the top assembly where this value is called is used&amp;quot&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;( &lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Assembly&lt;/FONT&gt; TopAssembly&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; topAssembly; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (topAssembly == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;topAssembly = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;OnPropertyChanged(&lt;FONT Color=#800000&gt;&amp;quotTopAssembly&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; includeReferencedAssemblies = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quot&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IncludeReferencedAssemblies&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; includeReferencedAssemblies; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (includeReferencedAssemblies == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;includeReferencedAssemblies = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;OnPropertyChanged(&lt;FONT Color=#800000&gt;&amp;quotIncludeReferencedAssemblies&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; includeSystemAssemblies = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotIf you want to include types in the referenced system assemblies, set this value to true. By default only non-framework-system code is included&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IncludeSystemAssemblies&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; includeSystemAssemblies; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (includeSystemAssemblies == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;includeSystemAssemblies = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;OnPropertyChanged(&lt;FONT Color=#800000&gt;&amp;quotIncludeSystemAssemblies&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;#region&lt;/FONT&gt; Filter&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeFilter&lt;/FONT&gt; filtersettings,exclude;&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;( &lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Content)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotOnly types that correspond with the settings included in this property are included in the list.&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeFilter&lt;/FONT&gt; Filter&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt;(filtersettings==&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;filtersettings = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeFilter&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;,&lt;FONT Color=#800000&gt;&amp;quotFilter&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; filtersettings;&lt;/div&gt;}&lt;/div&gt;}&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; HasFilter&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; filtersettings != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp !filtersettings.AllowAll; }&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotThe type(s) to which the types in this list must be assignable&amp;quot&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Editor&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;TypeEditor&lt;/FONT&gt;), &lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;UITypeEditor&lt;/FONT&gt;))]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] FilterTypes&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; {&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (filtersettings == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; filtersettings.FilterTypes; &lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Filter.FilterTypes = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;OnPropertyChanged(&lt;FONT Color=#800000&gt;&amp;quotFilterTypes&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowAbstract&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; exclude == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; || !exclude.FilterAbstract; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; != AllowAbstract)&lt;div style="margin-left:20pt"&gt;Exclude.FilterAbstract = !&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Content)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotTypes that correspond with the settings in this property are excluded from the selection&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeFilter&lt;/FONT&gt; Exclude&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (exclude == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;exclude = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeFilter&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;,&lt;FONT Color=#800000&gt;&amp;quotExcluded&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; exclude;&lt;/div&gt;}&lt;/div&gt;}&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; HasExlusionRules&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; exclude != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp !exclude.AllowAll; }&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#008080&gt;TypeConverter&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;ComponentConverter&lt;/FONT&gt;))]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeFilter&lt;/FONT&gt;:&lt;FONT Color=#008080&gt;INotifyPropertyChanged&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt; Owner;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; AssignedProperty;&lt;FONT Color=#0000ff&gt;&lt;br&gt;internal&lt;/FONT&gt; TypeFilter(&lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt; owner,&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; MyPropery)&lt;br&gt;{&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:80pt"&gt;this&lt;/FONT&gt;.Owner = owner;&lt;br&gt;AssignedProperty = MyPropery;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] filterTypes;&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotThe type(s) to which the types in this list must be assignable&amp;quot&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Editor&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;TypeEditor&lt;/FONT&gt;), &lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;UITypeEditor&lt;/FONT&gt;))]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] FilterTypes&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; filterTypes; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;.Length == 0) &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (filterTypes == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;filterTypes = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;OnPropertyChanged(&lt;FONT Color=#800000&gt;&amp;quotFilterTypes&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:60pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Checks if the specified type validates against this filter&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quott&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotIsExclusion&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; ValidateType(&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt; t,&lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsExclusion)&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//check filter types&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (filterTypes != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt; ft &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; filterTypes)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (ft.IsAssignableFrom(t)==IsExclusion) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; IsExclusion;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#008000&gt;&lt;div style="margin-left:80pt"&gt;//check flags&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (typeattr != DefaultTypeAttributes)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;TypeAttributes&lt;/FONT&gt; res = typeattr &amp;amp t.Attributes;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (IsExclusion)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; res &amp;gt 0;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; res == typeattr;&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;#region&lt;/FONT&gt; INotifyPropertyChanged Members&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#008080&gt;PropertyChangedEventHandler&lt;/FONT&gt; PropertyChanged;&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; OnPropertyChanged(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; name)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (PropertyChanged != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;PropertyChanged(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;PropertyChangedEventArgs&lt;/FONT&gt;(name));&lt;/div&gt;}&lt;br&gt;Owner.OnPropertyChanged(AssignedProperty);&lt;/div&gt;} &lt;FONT Color=#0000ff&gt;&lt;br&gt;#endregion&lt;/div&gt;&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt; DefaultTypeAttributes = (&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt;)0; &lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt; typeattr = DefaultTypeAttributes;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotSystem.Reflection.TypeAttributes&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; to check the Type against&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(DefaultTypeAttributes)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;( &lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotAttributes on which to filter. Flagwise so multiple properties can be combined&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt; FilterAttributes&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; typeattr; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;typeattr = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp&amp;nbsp&amp;nbsp&lt;div style="margin-left:60pt"&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowAll&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;div style="margin-left:20pt"&gt;filterTypes == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;&lt;br&gt;&amp;amp&amp;amp typeattr == DefaultTypeAttributes&lt;br&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;filterTypes = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;br&gt;typeattr = DefaultTypeAttributes;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; FilterOnAttribute(&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt; ta)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; typeattr != DefaultTypeAttributes &amp;amp&amp;amp (typeattr &amp;amp ta) &amp;gt 0;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; SetAttribute(&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt; ta, &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; On)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (FilterOnAttribute(ta) == On) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (On)&lt;div style="margin-left:20pt"&gt;typeattr |= ta;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;typeattr ^= ta;&lt;/div&gt;OnPropertyChanged(&lt;FONT Color=#800000&gt;&amp;quotFilter&amp;quot&lt;/FONT&gt; + ta.ToString());&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; FilterAbstract&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; FilterOnAttribute(&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt;.Abstract);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetAttribute(&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt;.Abstract, &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div style="margin-left:60pt"&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; FilterPublic&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; FilterOnAttribute(&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt;.Public);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetAttribute(&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt;.Public, &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;div style="margin-left:60pt"&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; FilterNestedPublic&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; FilterOnAttribute(&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt;.NestedPublic);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetAttribute(&lt;FONT Color=#008080&gt;TypeAttributes&lt;/FONT&gt;.NestedPublic, &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:60pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; ToString()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (AllowAll) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#800000&gt;&amp;quotFilter set&amp;quot&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#endregion&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;#region&lt;/FONT&gt; INotifyPropertyChanged Members&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#008080&gt;PropertyChangedEventHandler&lt;/FONT&gt; PropertyChanged;&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; OnPropertyChanged(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; name)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (PropertyChanged != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;PropertyChanged(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;PropertyChangedEventArgs&lt;/FONT&gt;(name));&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;#endregion&lt;/FONT&gt;&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:20pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Listbox style control to select types&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultEvent&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotSelectionFinal&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeSelector&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;UserControl&lt;/FONT&gt;,&lt;FONT Color=#008080&gt;ISupportInitialize&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;ListBox&lt;/FONT&gt; lb = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ListBox&lt;/FONT&gt;();&lt;FONT Color=#008080&gt;&lt;br&gt;Panel&lt;/FONT&gt; pnlControls = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Panel&lt;/FONT&gt;();&lt;FONT Color=#008080&gt;&lt;br&gt;CheckBox&lt;/FONT&gt;&lt;br&gt;chkIncludeSystem = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;CheckBox&lt;/FONT&gt;(),&lt;br&gt;chkIncludeReferencedAssemblies = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;CheckBox&lt;/FONT&gt;();&lt;FONT Color=#008080&gt;&lt;br&gt;ToolTip&lt;/FONT&gt; tt = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ToolTip&lt;/FONT&gt;();&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; TypeSelector()&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumerator&lt;/FONT&gt;())&lt;/div&gt;{&lt;br&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; TypeSelector(&lt;FONT Color=#008080&gt;TypeEnumerator&lt;/FONT&gt; Enumerator)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Enumerator == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ArgumentNullException&lt;/FONT&gt;();&lt;/div&gt;SuspendLayout();&lt;br&gt;te = Enumerator;&lt;br&gt;te.BeginInit();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (te.ServiceProvider == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;te.ServiceProvider = Site;&lt;/div&gt;te.Load += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(te_ListChanged);&lt;br&gt;te.ListChanged += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(te_ListChanged);&lt;br&gt;te.EndInit();&lt;br&gt;lb.Dock = &lt;FONT Color=#008080&gt;DockStyle&lt;/FONT&gt;.Fill;&lt;br&gt;lb.DisplayMember = &lt;FONT Color=#800000&gt;&amp;quotName&amp;quot&lt;/FONT&gt;;&lt;br&gt;lb.SelectedIndexChanged += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(lb_SelectedIndexChanged);&lt;br&gt;lb.Click += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(lb_Click);&lt;br&gt;lb.DoubleClick += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(lb_DoubleClick);&lt;br&gt;lb.DataSourceChanged += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(lb_DataSourceChanged);&lt;br&gt;lb.BorderStyle = &lt;FONT Color=#008080&gt;BorderStyle&lt;/FONT&gt;.None;&lt;br&gt;lb.MouseMove += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;MouseEventHandler&lt;/FONT&gt;(lb_MouseMove);&lt;br&gt;lb.MouseLeave += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(lb_MouseLeave);&lt;br&gt;Controls.Add(lb);&lt;FONT Color=#008000&gt;&lt;br&gt;//pnlControls.Height = 20;&lt;/FONT&gt;&lt;br&gt;pnlControls.AutoSize = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;pnlControls.Dock = &lt;FONT Color=#008080&gt;DockStyle&lt;/FONT&gt;.Bottom;&lt;br&gt;pnlControls.BorderStyle = &lt;FONT Color=#008080&gt;BorderStyle&lt;/FONT&gt;.None;&lt;br&gt;Controls.Add(pnlControls);&lt;br&gt;chkIncludeReferencedAssemblies.DataBindings.Add(&lt;FONT Color=#800000&gt;&amp;quotChecked&amp;quot&lt;/FONT&gt;, te.Settings, &lt;FONT Color=#800000&gt;&amp;quotIncludeReferencedAssemblies&amp;quot&lt;/FONT&gt;);&lt;br&gt;AddControl(chkIncludeReferencedAssemblies);&lt;br&gt;chkIncludeSystem.DataBindings.Add(&lt;FONT Color=#800000&gt;&amp;quotChecked&amp;quot&lt;/FONT&gt;, te.Settings, &lt;FONT Color=#800000&gt;&amp;quotIncludeSystemAssemblies&amp;quot&lt;/FONT&gt;);&lt;br&gt;AddControl(chkIncludeSystem);&lt;br&gt;ShortNotation = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;br&gt;tt.ShowAlways = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;tt.InitialDelay = 200;&lt;br&gt;tt.ReshowDelay = 500;&lt;br&gt;tt.SetToolTip(chkIncludeReferencedAssemblies, &lt;FONT Color=#800000&gt;&amp;quotIf this value is false, only the types in the main assembly will be shown&amp;quot&lt;/FONT&gt;);&lt;br&gt;tt.SetToolTip(chkIncludeSystem, &lt;FONT Color=#800000&gt;&amp;quotDetermines if System/framework types should be included&amp;quot&lt;/FONT&gt;);&lt;br&gt;selectionmode = GetDefaultSelectionMode();&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.BorderStyle = &lt;FONT Color=#008080&gt;BorderStyle&lt;/FONT&gt;.FixedSingle;&lt;br&gt;Padding = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Padding&lt;/FONT&gt;(1);&lt;br&gt;ResumeLayout();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; AddControl(&lt;FONT Color=#008080&gt;Control&lt;/FONT&gt; c)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;c.Dock = &lt;FONT Color=#008080&gt;DockStyle&lt;/FONT&gt;.Bottom;&lt;br&gt;c.Height = 16;&lt;br&gt;c.Font = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; System.Drawing.&lt;FONT Color=#008080&gt;Font&lt;/FONT&gt;(c.Font.FontFamily, 7);&lt;br&gt;pnlControls.Controls.Add(c);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; AddControl(&lt;FONT Color=#008080&gt;CheckBox&lt;/FONT&gt; c)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;AddControl((&lt;FONT Color=#008080&gt;Control&lt;/FONT&gt;)c);&lt;br&gt;c.TabStop = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;br&gt;c.AutoEllipsis = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;c.DataBindings[0].DataSourceUpdateMode = &lt;FONT Color=#008080&gt;DataSourceUpdateMode&lt;/FONT&gt;.OnPropertyChanged;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; lb_SelectedIndexChanged(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (SelectedItemChanged != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;SelectedItemChanged(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, e);&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; lb_Click(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;OnSelectionFinal(&lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;.SingleClick, e);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;int&lt;/FONT&gt; lastmouseindex = -1;&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; lb_MouseMove(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;MouseEventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetLBToolTip();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; lb_MouseLeave(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetLBToolTip();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; SetLBToolTip()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;System.Drawing.&lt;FONT Color=#008080&gt;Point&lt;/FONT&gt; p = lb.PointToClient(MousePosition);&lt;FONT Color=#0000ff&gt;&lt;br&gt;int&lt;/FONT&gt; i = lb.IndexFromPoint(p);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (i == lastmouseindex) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;lastmouseindex = i;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (i != -1)&lt;div style="margin-left:20pt"&gt;tt.Show(lb.Items[i].ToString(), lb, p);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;tt.Hide(lb);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt; SelectedItemChanged;&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; lb_DoubleClick(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;OnSelectionFinal(&lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;.DoubleClick, e);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; allowusersettings = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quottrue if the user can adapt the criteria (default), otherwise false&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowUserSettings&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; allowusersettings; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;pnlControls.Visible = allowusersettings = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;BorderStyle&lt;/FONT&gt;.FixedSingle)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;BorderStyle&lt;/FONT&gt; BorderStyle&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;.BorderStyle; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;.BorderStyle = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/div&gt;}&lt;br&gt;[&lt;FONT Color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt; SelectedType&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; lb.SelectedItem &lt;FONT Color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;lb.SelectedItems.Clear();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;lb.SelectedItem = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] SelectedTypes&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (lb.SelectedItems.Count == 0) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#008080&gt;&lt;br&gt;Type&lt;/FONT&gt;[] types = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[lb.SelectedItems.Count];&lt;FONT Color=#0000ff&gt;&lt;br&gt;for&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt types.Length; i++)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;types[i] = (&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;)lb.SelectedItems[i];&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; types;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;lb.SelectedItems.Clear();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt; t &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;lb.SelectedItems.Add(t);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#008080&gt;Editor&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;TypeEditor&lt;/FONT&gt;), &lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;UITypeEditor&lt;/FONT&gt;))]&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Hidden)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[] FilterTypes&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; te.Settings.Filter.FilterTypes; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;te.Settings.Filter.FilterTypes = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;div style="margin-left:40pt"&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; MultiSelect&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; lb.SelectionMode == System.Windows.Forms.&lt;FONT Color=#008080&gt;SelectionMode&lt;/FONT&gt;.MultiExtended; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;lb.SelectionMode =&lt;FONT Color=#0000ff&gt;&lt;br&gt;value&lt;/FONT&gt;&lt;br&gt;? System.Windows.Forms.&lt;FONT Color=#008080&gt;SelectionMode&lt;/FONT&gt;.MultiExtended&lt;br&gt;: System.Windows.Forms.&lt;FONT Color=#008080&gt;SelectionMode&lt;/FONT&gt;.One;&lt;FONT Color=#008000&gt;&lt;br&gt;//only reset selectionmode if no manual change was made&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (!selectionmanualset)&lt;div style="margin-left:20pt"&gt;ResetSelectionMode();&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; shortnotation;&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotIf true, the descriptions will be shown in shorter format&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; ShortNotation&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; shortnotation; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;shortnotation = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;chkIncludeSystem.Text = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; ? &lt;FONT Color=#800000&gt;&amp;quotSystem&amp;quot&lt;/FONT&gt; : &lt;FONT Color=#800000&gt;&amp;quotInclude system assemblies&amp;quot&lt;/FONT&gt;;&lt;br&gt;chkIncludeReferencedAssemblies.Text = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; ? &lt;FONT Color=#800000&gt;&amp;quotReferences&amp;quot&lt;/FONT&gt; : &lt;FONT Color=#800000&gt;&amp;quotInclude referenced assemblies&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (llClear != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;llClear.Text = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; ? &lt;FONT Color=#800000&gt;&amp;quotClear&amp;quot&lt;/FONT&gt; : &lt;FONT Color=#800000&gt;&amp;quotClear selection&amp;quot&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#008080&gt;&lt;div style="margin-left:40pt"&gt;Button&lt;/FONT&gt; btnOK;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Used for designers: indicates if an ok button should be shown&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; ShowOk&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; btnOK != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (ShowOk == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;btnOK = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Button&lt;/FONT&gt;();&lt;br&gt;btnOK.Text = &lt;FONT Color=#800000&gt;&amp;quotOK&amp;quot&lt;/FONT&gt;;&lt;br&gt;btnOK.AutoSize = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;AddControl(btnOK);&lt;br&gt;btnOK.Click += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(btnOK_Click);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;btnOK.Dispose();&lt;br&gt;btnOK = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#008080&gt;&lt;br&gt;LinkLabel&lt;/FONT&gt; llClear;&lt;br&gt;[&lt;FONT Color=#008080&gt;Description&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotShow a label to clear the selection..&amp;quot&lt;/FONT&gt;)]&lt;br&gt;[&lt;FONT Color=#008080&gt;DefaultValue&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; ShowClear&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; llClear != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (ShowClear == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;llClear = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;LinkLabel&lt;/FONT&gt;();&lt;br&gt;llClear.Click += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(llClear_Click);&lt;br&gt;ShortNotation = shortnotation;&lt;br&gt;AddControl(llClear);&lt;br&gt;llClear.BringToFront();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;llClear.Dispose();&lt;br&gt;llClear = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; llClear_Click(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SelectedType = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;br&gt;OnSelectionFinal(&lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;.ClearSelection, e);&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Fires when the selection is final.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; How the selection is made, can be set by using &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotSelectionMode&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Default settings:&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; A doubleclick on an item is always considered final. A single click is considered final&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; when not using multiselect.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotShowOk&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; is used, the ok click is considered final as well&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt; SelectionFinal;&lt;br&gt;[&lt;FONT Color=#008080&gt;Flags&lt;/FONT&gt;]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;enum&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Default = 0,&lt;br&gt;SingleClick = 1,&lt;br&gt;DoubleClick = 2,&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If showOK is used. &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;br&gt;OK = 4,&lt;br&gt;ClearSelection = 8&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt; selectionmode;&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; selectionmanualset;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt; SelectionMode&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; selectionmode; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//for the default value, fill in the actual default value&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;.Default)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;value&lt;/FONT&gt; = GetDefaultSelectionMode();&lt;/div&gt;selectionmode = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;selectionmanualset = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; ShouldSerializeSelectionMode()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; selectionmode != GetDefaultSelectionMode();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ResetSelectionMode()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;selectionmode = GetDefaultSelectionMode();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt; GetDefaultSelectionMode()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetDefaultSelectionMode(MultiSelect);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt; GetDefaultSelectionMode(&lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; Multiselect)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;FinalSelectionMode&lt;/FONT&gt; fs = &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;.DoubleClick | &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;.OK;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (!MultiSelect)&lt;div style="margin-left:20pt"&gt;fs |= &lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;.SingleClick;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; fs;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; OnSelectionFinal(&lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt; mode, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (SelectionFinal != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;&lt;br&gt;&amp;amp&amp;amp (mode &amp;amp selectionmode) &amp;gt 0)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SelectionFinal(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, e);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; btnOK_Click(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;OnSelectionFinal(&lt;FONT Color=#008080&gt;FinalSelectionMode&lt;/FONT&gt;.OK, e);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; te_ListChanged(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Cursor = &lt;FONT Color=#008080&gt;Cursors&lt;/FONT&gt;.WaitCursor;&lt;FONT Color=#0000ff&gt;&lt;br&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;lb.Items.Clear();&lt;br&gt;lb.Items.AddRange(te.Types);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;finally&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Cursor = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; lb_DataSourceChanged(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//remember selected items&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//looks silly, but it works ;-)&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//the selecteditemcollection is updated and the listbox knows it. uhuh.&lt;/FONT&gt;&lt;br&gt;SelectedTypes = SelectedTypes;&lt;FONT Color=#008000&gt;&lt;br&gt;//clear/set tooltip&lt;/FONT&gt;&lt;br&gt;SetLBToolTip();&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumerator&lt;/FONT&gt; te;&lt;br&gt;[&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;DesignerSerializationVisibility&lt;/FONT&gt;.Content)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt; Settings&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; te.Settings;&lt;/div&gt;}&lt;/div&gt;}&lt;br&gt;[&lt;FONT Color=#008080&gt;Browsable&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumerator&lt;/FONT&gt; Enumerator&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; te; }&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; System.Drawing.&lt;FONT Color=#008080&gt;Size&lt;/FONT&gt; DefaultSize&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; System.Drawing.&lt;FONT Color=#008080&gt;Size&lt;/FONT&gt;(100, 150);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#region&lt;/FONT&gt; ISupportInitialize Members&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; BeginInit()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;te.BeginInit();&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; EndInit()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;te.EndInit();&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;#endregion&lt;/FONT&gt;&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; An &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotUITypeEditor&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; for selecting Type or Types. If the target property is an array, multiselect is used, otherwise single select&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEditor&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;UITypeEditor&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeSelector&lt;/FONT&gt; Selector;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumeratorSettings&lt;/FONT&gt; Settings&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; Selector.Settings;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; TypeEditor()&lt;br&gt;{&lt;br&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeSelector&lt;/FONT&gt; CreateSelector(&lt;FONT Color=#008080&gt;IServiceProvider&lt;/FONT&gt; provider)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;TypeEnumerator&lt;/FONT&gt; te = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeEnumerator&lt;/FONT&gt;(provider);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;TypeSelector&lt;/FONT&gt;(te);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#008080&gt;UITypeEditorEditStyle&lt;/FONT&gt; GetEditStyle(&lt;FONT Color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#008080&gt;UITypeEditorEditStyle&lt;/FONT&gt;.DropDown;&lt;/div&gt;}&lt;FONT Color=#008080&gt;&lt;br&gt;IWindowsFormsEditorService&lt;/FONT&gt; iw;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; EditValue(&lt;FONT Color=#008080&gt;ITypeDescriptorContext&lt;/FONT&gt; context, &lt;FONT Color=#008080&gt;IServiceProvider&lt;/FONT&gt; provider, &lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; value)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Selector == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Selector = CreateSelector(provider);&lt;br&gt;Selector.SelectionFinal += &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt;(Selector_SelectionFinal);&lt;br&gt;Selector.ShortNotation = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; multiselect = context.PropertyDescriptor.PropertyType.IsArray;&lt;br&gt;Selector.MultiSelect = multiselect;&lt;br&gt;Selector.ShowOk = multiselect;&lt;br&gt;Selector.ShowClear = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT Color=#008000&gt;&lt;br&gt;//set current value&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (value == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;Selector.SelectedType = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;if&lt;/FONT&gt; (multiselect)&lt;div style="margin-left:20pt"&gt;Selector.SelectedTypes = (&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;[])value;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;Selector.SelectedType = (&lt;FONT Color=#008080&gt;Type&lt;/FONT&gt;)value;&lt;FONT Color=#008000&gt;&lt;/div&gt;//show dropdown&lt;/FONT&gt;&lt;br&gt;iw = (&lt;FONT Color=#008080&gt;IWindowsFormsEditorService&lt;/FONT&gt;)provider.GetService(&lt;FONT Color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;IWindowsFormsEditorService&lt;/FONT&gt;));&lt;br&gt;iw.DropDownControl(Selector);&lt;FONT Color=#008000&gt;&lt;br&gt;//return value&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; multiselect ? (&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt;)Selector.SelectedTypes : Selector.SelectedType;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;void&lt;/FONT&gt; Selector_SelectionFinal(&lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; sender, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt; e)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;iw.CloseDropDown();&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV Style=" Display='none'; BackGround-Color=#dcdcdc;" OnDblClick="var o = parentNode.firstChild;o.sel =1;o.click()"&gt;&lt;b&gt; . . .&lt;/b&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/5943.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>drag and drop outlook attachments</title><link>http://blogs.vbcity.com/hotdog/archive/2006/03/16/5896.aspx</link><pubDate>Thu, 16 Mar 2006 10:35:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2006/03/16/5896.aspx</guid><description>&lt;P&gt;Wanted to have a wrapper around the drag and drop outlook attachments for the &lt;A href="http://blogs.vbcity.com/hotdog/archive/2006/03/03/5861.aspx"&gt;File Select Control&lt;/A&gt;, but that turned somewhat harder than expected. Saving one attachment was easy enough. It could be done completely managed (found some other examples that do the same on the net), but saving multiple wasn't to be found&amp;nbsp;in .net (at least not as far as I could find :-/) and even though the File Select control doesn't support multiple files (yet), the wrapper certainly should :p&lt;/P&gt;
&lt;P&gt;The problem is that with the windows forms DataObject created when dropping, you can only get data on the default index. The only solution seemed to be using the unmanaged wrappers.Luckily the first step was easy: the DataObject explicitely implements the&amp;nbsp;ComTypes.IDataObject interface and thus could be parsed. Getting the proper formatter and all seemed to be a bigger headache. To make a long story (and more than half a day of trial and error frustration to create the entire wrapper) short, a combination of using the .net DataObject and the unmanaged wrappers lead to the solution (see below in this post to read just that part). &lt;/P&gt;
&lt;P&gt;The entire wrapper: (for an example, see the File Select Control mentioned above)&lt;/P&gt;&lt;!-- --Start of code block
--&gt;
&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 3px double; BORDER-TOP: #000080 3px double; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 3px double; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 3px double"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 3px double; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'250pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" selcount="3" selold="1" sel="1"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; HEIGHT: 250pt; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;namespace&lt;/FONT&gt; Subro.Outlook&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;using&lt;/FONT&gt; System;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Collections.Generic;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Text;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Windows.Forms;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.IO;&lt;FONT color=#008000&gt;&lt;BR&gt;//the interopservices are needed to get to unmanaged code to get the streams&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//for attachments if there are more. (for one, it can be done problemless with managed code)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Runtime.InteropServices;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; ct =System.Runtime.InteropServices.ComTypes;&lt;FONT color=#0000ff&gt;&lt;BR&gt;using&lt;/FONT&gt; System.Runtime.InteropServices.ComTypes;&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Wrapper around the drop data from attachments from outlook&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT color=#008080&gt;OutlookAttachmentDropCatcher&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;[] GetFiles(&lt;FONT color=#008080&gt;DragEventArgs&lt;/FONT&gt; e)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;OutlookAttachmentDropCatcher&lt;/FONT&gt;(e).GetFiles();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The name to identify a file group when dragging outlook files&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GroupIdentifier = &lt;FONT color=#800000&gt;"FileGroupDescriptor"&lt;/FONT&gt;;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The name to identify the raw data of the attachments in the clipboard&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;DataFormats&lt;/FONT&gt;.&lt;FONT color=#008080&gt;Format&lt;/FONT&gt; ContentsIdentifier = &lt;FONT color=#008080&gt;DataFormats&lt;/FONT&gt;.GetFormat(&lt;FONT color=#800000&gt;"FileContents"&lt;/FONT&gt;);&lt;BR&gt;&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The drop data with which this OutlookAttachment object was created&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#008080&gt;DataObject&lt;/FONT&gt; DropData;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; OutlookAttachmentDropCatcher(&lt;FONT color=#008080&gt;DragEventArgs&lt;/FONT&gt; e) 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;: &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;((&lt;FONT color=#008080&gt;DataObject&lt;/FONT&gt;)e.Data)&lt;/DIV&gt;{&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; OutlookAttachmentDropCatcher(&lt;FONT color=#008080&gt;DataObject&lt;/FONT&gt; Data)&lt;BR&gt;{&lt;FONT color=#008000&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//Source: http://blogs.vbcity.com/hotdog/archive/2006/03/16/5896.aspx&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//check there for updates....&lt;/FONT&gt;&lt;BR&gt;DropData = Data;&lt;FONT color=#008080&gt;&lt;BR&gt;MemoryStream&lt;/FONT&gt; s = (&lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt;)Data.GetData(GroupIdentifier);&lt;BR&gt;ReadHeaders(s);&lt;BR&gt;s.Close();&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; COM structs&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;struct&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILETIME&lt;/FONT&gt;&lt;BR&gt;{&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;int&lt;/FONT&gt; dwLowDateTime;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; dwHighDateTime;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; FILETIME(&lt;FONT color=#008080&gt;BinaryReader&lt;/FONT&gt; br)&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;dwLowDateTime = br.ReadInt32();&lt;BR&gt;dwHighDateTime = br.ReadInt32();&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;struct&lt;/FONT&gt; &lt;FONT color=#008080&gt;CLSID&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;byte&lt;/FONT&gt;[] ID;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; CLSID(&lt;FONT color=#008080&gt;BinaryReader&lt;/FONT&gt; br)&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;ID = br.ReadBytes(16);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;struct&lt;/FONT&gt; &lt;FONT color=#008080&gt;SizeL&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; X, Y;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; SizeL(&lt;FONT color=#008080&gt;BinaryReader&lt;/FONT&gt; br)&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;X = br.ReadInt32();&lt;BR&gt;Y = br.ReadInt32();&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;struct&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILEDESCRIPTOR&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;int&lt;/FONT&gt; dwFlags;&lt;FONT color=#008080&gt;&lt;BR&gt;CLSID&lt;/FONT&gt; clsid;&lt;FONT color=#008080&gt;&lt;BR&gt;SizeL&lt;/FONT&gt; sizel;&lt;FONT color=#008080&gt;&lt;BR&gt;SizeL&lt;/FONT&gt; pointl;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; dwFileAttributes;&lt;FONT color=#008080&gt;&lt;BR&gt;FILETIME&lt;/FONT&gt; ftCreationTime;&lt;FONT color=#008080&gt;&lt;BR&gt;FILETIME&lt;/FONT&gt; ftLastAccessTime;&lt;FONT color=#008080&gt;&lt;BR&gt;FILETIME&lt;/FONT&gt; ftLastWriteTime;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; nFileSizeHigh;&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; nFileSizeLow;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; FileName;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; FILEDESCRIPTOR(&lt;FONT color=#008080&gt;BinaryReader&lt;/FONT&gt; br)&lt;BR&gt;{&lt;FONT color=#008000&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//these flags aren't really filled when coming&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//from outlook, but who knows....someday it might be used :p&lt;/FONT&gt;&lt;BR&gt;dwFlags = br.ReadInt32();&lt;BR&gt;clsid = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;CLSID&lt;/FONT&gt;(br);&lt;BR&gt;sizel = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;SizeL&lt;/FONT&gt;(br);&lt;BR&gt;pointl = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;SizeL&lt;/FONT&gt;(br);&lt;BR&gt;dwFileAttributes = br.ReadInt32();&lt;BR&gt;ftCreationTime =&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILETIME&lt;/FONT&gt;(br);&lt;BR&gt;ftLastAccessTime = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILETIME&lt;/FONT&gt;(br);&lt;BR&gt;ftLastWriteTime = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILETIME&lt;/FONT&gt;(br);&lt;BR&gt;nFileSizeHigh = br.ReadInt32();&lt;BR&gt;nFileSizeLow = br.ReadInt32();&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; MAX_PATH = 256;&lt;FONT color=#0000ff&gt;&lt;BR&gt;byte&lt;/FONT&gt;[] bytes = br.ReadBytes(MAX_PATH);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; i = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (; i &amp;lt; MAX_PATH &amp;amp;&amp;amp; bytes[i] != 0; i++)&lt;BR&gt;{ }&lt;BR&gt;FileName = &lt;FONT color=#008080&gt;Encoding&lt;/FONT&gt;.ASCII.GetString(bytes, 0, i);&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 80pt"&gt;br.ReadInt32(); &lt;FONT color=#008000&gt;//not entirely sure what this entry does...&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;struct&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILEGROUPDESCRIPTOR&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;uint&lt;/FONT&gt; cItems;&lt;FONT color=#008080&gt;&lt;BR&gt;FILEDESCRIPTOR&lt;/FONT&gt;[] fgd;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;[] Names;&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;public&lt;/FONT&gt; FILEGROUPDESCRIPTOR(&lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt; s)&lt;BR&gt;{&lt;FONT color=#008080&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;BinaryReader&lt;/FONT&gt; br = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;BinaryReader&lt;/FONT&gt;(s);&lt;BR&gt;cItems = br.ReadUInt32();&lt;BR&gt;fgd = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILEDESCRIPTOR&lt;/FONT&gt;[cItems];&lt;BR&gt;Names = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;[cItems];&lt;FONT color=#0000ff&gt;&lt;BR&gt;for&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i = 0; i &amp;lt; cItems; i++)&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;fgd[i] = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILEDESCRIPTOR&lt;/FONT&gt;(br);&lt;BR&gt;Names[i] = fgd[i].FileName;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;FILEGROUPDESCRIPTOR&lt;/FONT&gt; descriptor;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; ReadHeaders(&lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt; s)&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;descriptor = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FILEGROUPDESCRIPTOR&lt;/FONT&gt;(s);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;string&lt;/FONT&gt; tempfolder = &lt;FONT color=#008080&gt;Environment&lt;/FONT&gt;.GetFolderPath(&lt;FONT color=#008080&gt;Environment&lt;/FONT&gt;.&lt;FONT color=#008080&gt;SpecialFolder&lt;/FONT&gt;.InternetCache) + &lt;FONT color=#800000&gt;@"\OLK3D2\"&lt;/FONT&gt;;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The folder where temporary files are stored (when dragging files from outlook)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; TempFolder&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; tempfolder;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;throw&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;ArgumentNullException&lt;/FONT&gt;();&lt;BR&gt;tempfolder = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (!tempfolder.EndsWith(&lt;FONT color=#800000&gt;@"\"&lt;/FONT&gt;)) tempfolder += &lt;FONT color=#800000&gt;@"\"&lt;/FONT&gt;;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets the stream of the specified attachment (without saving)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB: Name must be one of the attachment names (see &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SEE cref="GetNames" /&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;PARAM name="Name"&gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt; GetStream(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetStream(IndexOf(Name));&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; IndexOf(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AttachmentName)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#008080&gt;Array&lt;/FONT&gt;.IndexOf&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt;(descriptor.Names, AttachmentName);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets the stream of the FIRST attachment&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt; GetStream()&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetStream(0);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Gets the stream at Index of the available attachments&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;PARAM name="Index"&gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt; GetStream(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (Index == 0)&lt;BR&gt;{&lt;FONT color=#008000&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//the first is easy: just copy the formatted .net data&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;MemoryStream&lt;/FONT&gt; ms = (&lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt;)DropData.GetData(ContentsIdentifier.Name);&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; ms;&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; GetHigherAttachment(Index);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;#region&lt;/FONT&gt; unmanaged&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;MemoryStream&lt;/FONT&gt; GetHigherAttachment(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#008000&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//this is where it gets ugly :p&lt;/DIV&gt;&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;ct.&lt;FONT color=#008080&gt;IDataObject&lt;/FONT&gt; data = (ct.&lt;FONT color=#008080&gt;IDataObject&lt;/FONT&gt;)DropData;&lt;FONT color=#008080&gt;&lt;BR&gt;STGMEDIUM&lt;/FONT&gt; medium;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; possible errors (not used)&lt;FONT color=#008000&gt;&lt;BR&gt;/*&lt;BR&gt;unchecked&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;const int 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;S_OK = 0,&lt;BR&gt;DV_E_LINDEX = (int)0x80040068,&lt;BR&gt;DV_E_FORMATETC = (int)0x80040064,&lt;BR&gt;DV_E_TYMED = (int)0x80040069,&lt;BR&gt;//DV_E_DVASPECT = -2147221397,&lt;BR&gt;E_INVALIDARG = (int)0x80070057,&lt;BR&gt;E_UNEXPECTED = (int)0x8000FFFF,&lt;BR&gt;OLE_E_NOTRUNNING = (int)0x80040005,&lt;BR&gt;E_OUTOFMEMORY = (int)0x8007000E;&lt;/DIV&gt;&lt;/DIV&gt;}*/&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//find the proper format&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;IEnumFORMATETC&lt;/FONT&gt; formats = data.EnumFormatEtc(&lt;FONT color=#008080&gt;DATADIR&lt;/FONT&gt;.DATADIR_GET);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; cnt = DropData.GetFormats().Length;&lt;FONT color=#008080&gt;&lt;BR&gt;FORMATETC&lt;/FONT&gt;[] resF = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FORMATETC&lt;/FONT&gt;[cnt];&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt;[] resI = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;[cnt];&lt;BR&gt;formats.Next(cnt, resF, resI);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; index = &lt;FONT color=#008080&gt;Array&lt;/FONT&gt;.IndexOf&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt;(DropData.GetFormats(), ContentsIdentifier.Name);&lt;FONT color=#008080&gt;&lt;BR&gt;FORMATETC&lt;/FONT&gt; format = resF[index];&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//set the index to get&lt;/FONT&gt;&lt;BR&gt;format.lindex = Index;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//get the istream object&lt;/FONT&gt;&lt;BR&gt;data.GetData(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; format, &lt;FONT color=#0000ff&gt;out&lt;/FONT&gt; medium);&lt;FONT color=#008080&gt;&lt;BR&gt;IStream&lt;/FONT&gt; stream = (&lt;FONT color=#008080&gt;IStream&lt;/FONT&gt;)&lt;FONT color=#008080&gt;Marshal&lt;/FONT&gt;.GetObjectForIUnknown(medium.unionmember);&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//read the istream into a memorystream (saving could have been done directly, but this is the more general approach)&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;MemoryStream&lt;/FONT&gt; ms = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Block_Length = 1024;&lt;FONT color=#0000ff&gt;&lt;BR&gt;byte&lt;/FONT&gt;[] bytes = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[Block_Length];&lt;FONT color=#0000ff&gt;&lt;BR&gt;ulong&lt;/FONT&gt; count = 0;&lt;FONT color=#008080&gt;&lt;BR&gt;IntPtr&lt;/FONT&gt; countptr = &lt;FONT color=#008080&gt;Marshal&lt;/FONT&gt;.AllocHGlobal(8);&lt;FONT color=#008080&gt;&lt;BR&gt;Marshal&lt;/FONT&gt;.StructureToPtr(count, countptr, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;for&lt;/FONT&gt; (; ; )&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;stream.Read(bytes, Block_Length, countptr);&lt;BR&gt;count = (&lt;FONT color=#0000ff&gt;uint&lt;/FONT&gt;)&lt;FONT color=#008080&gt;Marshal&lt;/FONT&gt;.PtrToStructure(countptr, &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;uint&lt;/FONT&gt;));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (count == 0) &lt;FONT color=#0000ff&gt;break&lt;/FONT&gt;;&lt;BR&gt;ms.Write(bytes, 0, (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)count);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;finally&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#008080&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Marshal&lt;/FONT&gt;.FreeHGlobal(countptr);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;return&lt;/FONT&gt; ms;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; The number of dropped attachments&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; AttachmentCount&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; descriptor.Names.Length; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Returns the attachment names&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;[] GetNames()&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; descriptor.Names;&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Saves the file to the temp directory and returns the full location.&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB: Name must be one of the attachments (see &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SEE cref="GetNames" /&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;PARAM name="Name"&gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetFile(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetFile(IndexOf(Name));&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Saves the FIRST file to the temp directory and returns its url. You can use this function&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; if you are sure there's only one attachment&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetFile()&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; GetFile(0);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Saves the files at the Index position of the available attachments&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;PARAM name="Index"&gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; GetFile(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;string&lt;/FONT&gt; Name = descriptor.Names[Index];&lt;FONT color=#0000ff&gt;&lt;BR&gt;string&lt;/FONT&gt; url = tempfolder + Name;&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; SaveAttachment(Name, url);&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; alwaysoverwrite = &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Indicates if (temporary) files may always be overwritten when saving&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AlwaysOverWrite&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; alwaysoverwrite; }&lt;FONT color=#0000ff&gt;&lt;BR&gt;set&lt;/FONT&gt; { alwaysoverwrite = &lt;FONT color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/DIV&gt;}&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; Saves the Attachment to the specified location&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; NB: Name must be one of the attachments (see &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SEE cref="GetNames" /&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;PARAM name="Name"&gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;PARAM name="Path"&gt;&lt;/PARAM&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; SaveAttachment(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AttachmentName, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Path)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; SaveAttachment(AttachmentName, Path, alwaysoverwrite);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; SaveAttachment(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; AttachmentIndex, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Path)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; SaveAttachment(AttachmentIndex, Path, alwaysoverwrite);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; SaveAttachment(&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; AttachmentName, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Path, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AlwaysOverWrite)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; SaveAttachment(IndexOf(AttachmentName), Path, AlwaysOverWrite);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; SaveAttachment(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; AttachmentIndex, &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; Path, &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; AlwaysOverWrite)&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;if&lt;/FONT&gt; (!AlwaysOverWrite &amp;amp;&amp;amp; &lt;FONT color=#008080&gt;File&lt;/FONT&gt;.Exists(Path))&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;switch&lt;/FONT&gt; (&lt;FONT color=#008080&gt;MessageBox&lt;/FONT&gt;.Show(&lt;FONT color=#800000&gt;"Temporary file for "&lt;/FONT&gt; + descriptor.Names[AttachmentIndex] + &lt;FONT color=#800000&gt;" allready exists. Overwrite?"&lt;/FONT&gt;, &lt;FONT color=#800000&gt;"file exists"&lt;/FONT&gt;, &lt;FONT color=#008080&gt;MessageBoxButtons&lt;/FONT&gt;.YesNoCancel))&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;DialogResult&lt;/FONT&gt;.No:&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; Path;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;case&lt;/FONT&gt; &lt;FONT color=#008080&gt;DialogResult&lt;/FONT&gt;.Cancel:&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;File&lt;/FONT&gt;.WriteAllBytes(Path, GetStream(AttachmentIndex).ToArray());&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; Path;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#808080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; saves all files to the temporary directory and returns the url's&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;/SUMMARY&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;///&lt;/FONT&gt;&lt;FONT color=#008000&gt; &lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;[] GetFiles()&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;string&lt;/FONT&gt;[] files = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;[descriptor.Names.Length];&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; i = 0;&lt;FONT color=#0000ff&gt;&lt;BR&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt; name &lt;FONT color=#0000ff&gt;in&lt;/FONT&gt; descriptor.Names)&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;files[i++] = GetFile(name);&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;return&lt;/FONT&gt; files;&lt;/DIV&gt;}&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =1;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;
&lt;P&gt;The specific multiple attachments code:&lt;/P&gt;&lt;!-- --Start of code block
--&gt;
&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 1px double; BORDER-TOP: #000080 1px double; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 1px double; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 1px double"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 1px double; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'125pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" selcount="3" selold="1" sel="1"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; HEIGHT: 125pt; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#region&lt;/FONT&gt; unmanaged&lt;/DIV&gt;&lt;BR&gt;&lt;FONT color=#008080&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;MemoryStream&lt;/FONT&gt; GetHigherAttachment(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;BR&gt;{&lt;FONT color=#008000&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;//this is where it gets ugly :p&lt;/DIV&gt;&lt;/DIV&gt;&lt;/FONT&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;ct.&lt;FONT color=#008080&gt;IDataObject&lt;/FONT&gt; data = (ct.&lt;FONT color=#008080&gt;IDataObject&lt;/FONT&gt;)DropData;&lt;FONT color=#008080&gt;&lt;BR&gt;STGMEDIUM&lt;/FONT&gt; medium;&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;#region&lt;/FONT&gt; possible errors (not used)&lt;FONT color=#008000&gt;&lt;BR&gt;/*&lt;BR&gt;unchecked&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;const int 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;S_OK = 0,&lt;BR&gt;DV_E_LINDEX = (int)0x80040068,&lt;BR&gt;DV_E_FORMATETC = (int)0x80040064,&lt;BR&gt;DV_E_TYMED = (int)0x80040069,&lt;BR&gt;//DV_E_DVASPECT = -2147221397,&lt;BR&gt;E_INVALIDARG = (int)0x80070057,&lt;BR&gt;E_UNEXPECTED = (int)0x8000FFFF,&lt;BR&gt;OLE_E_NOTRUNNING = (int)0x80040005,&lt;BR&gt;E_OUTOFMEMORY = (int)0x8007000E;&lt;/DIV&gt;&lt;/DIV&gt;}*/&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;#endregion&lt;/DIV&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//find the proper format&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;IEnumFORMATETC&lt;/FONT&gt; formats = data.EnumFormatEtc(&lt;FONT color=#008080&gt;DATADIR&lt;/FONT&gt;.DATADIR_GET);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; cnt = DropData.GetFormats().Length;&lt;FONT color=#008080&gt;&lt;BR&gt;FORMATETC&lt;/FONT&gt;[] resF = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FORMATETC&lt;/FONT&gt;[cnt];&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt;[] resI = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;[cnt];&lt;BR&gt;formats.Next(cnt, resF, resI);&lt;FONT color=#0000ff&gt;&lt;BR&gt;int&lt;/FONT&gt; index = &lt;FONT color=#008080&gt;Array&lt;/FONT&gt;.IndexOf&amp;lt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt;(DropData.GetFormats(), ContentsIdentifier.Name);&lt;FONT color=#008080&gt;&lt;BR&gt;FORMATETC&lt;/FONT&gt; format = resF[index];&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//set the index to get&lt;/FONT&gt;&lt;BR&gt;format.lindex = Index;&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//get the istream object&lt;/FONT&gt;&lt;BR&gt;data.GetData(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; format, &lt;FONT color=#0000ff&gt;out&lt;/FONT&gt; medium);&lt;FONT color=#008080&gt;&lt;BR&gt;IStream&lt;/FONT&gt; stream = (&lt;FONT color=#008080&gt;IStream&lt;/FONT&gt;)&lt;FONT color=#008080&gt;Marshal&lt;/FONT&gt;.GetObjectForIUnknown(medium.unionmember);&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//read the istream into a memorystream (saving could have been done directly, but this is the more general approach)&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;MemoryStream&lt;/FONT&gt; ms = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;MemoryStream&lt;/FONT&gt;();&lt;FONT color=#0000ff&gt;&lt;BR&gt;const&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Block_Length = 1024;&lt;FONT color=#0000ff&gt;&lt;BR&gt;byte&lt;/FONT&gt;[] bytes = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[Block_Length];&lt;FONT color=#0000ff&gt;&lt;BR&gt;ulong&lt;/FONT&gt; count = 0;&lt;FONT color=#008080&gt;&lt;BR&gt;IntPtr&lt;/FONT&gt; countptr = &lt;FONT color=#008080&gt;Marshal&lt;/FONT&gt;.AllocHGlobal(8);&lt;FONT color=#008080&gt;&lt;BR&gt;Marshal&lt;/FONT&gt;.StructureToPtr(count, countptr, &lt;FONT color=#0000ff&gt;true&lt;/FONT&gt;);&lt;FONT color=#0000ff&gt;&lt;BR&gt;try&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;for&lt;/FONT&gt; (; ; )&lt;BR&gt;{ 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;stream.Read(bytes, Block_Length, countptr);&lt;BR&gt;count = (&lt;FONT color=#0000ff&gt;uint&lt;/FONT&gt;)&lt;FONT color=#008080&gt;Marshal&lt;/FONT&gt;.PtrToStructure(countptr, &lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;(&lt;FONT color=#0000ff&gt;uint&lt;/FONT&gt;));&lt;FONT color=#0000ff&gt;&lt;BR&gt;if&lt;/FONT&gt; (count == 0) &lt;FONT color=#0000ff&gt;break&lt;/FONT&gt;;&lt;BR&gt;ms.Write(bytes, 0, (&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;)count);&lt;/DIV&gt;}&lt;/DIV&gt;}&lt;FONT color=#0000ff&gt;&lt;BR&gt;finally&lt;/FONT&gt;&lt;BR&gt;{&lt;FONT color=#008080&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;Marshal&lt;/FONT&gt;.FreeHGlobal(countptr);&lt;/DIV&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;return&lt;/FONT&gt; ms;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;}&lt;/DIV&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;#endregion&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =1;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/5896.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>Wrapper around registering file extensions</title><link>http://blogs.vbcity.com/hotdog/archive/2006/03/07/5873.aspx</link><pubDate>Tue, 07 Mar 2006 07:01:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2006/03/07/5873.aspx</guid><description>&lt;P&gt;Want to assign your application to a certain file extension? The .net setup project has all those options build in. hoorray. But if you want to have that&amp;nbsp;control in your own&amp;nbsp;program,&amp;nbsp;you'll have&amp;nbsp;to do it with a (bunch of) registry settings. no hoorray. It can be a bother to get the setup right. So.. time for another wrapper. There might be others available, but couldn't really find reusable code at first glance.&lt;/P&gt;
&lt;P&gt;The wrapper supports simply quickly assigning a application to a certain extension, but also the other properties such as iconfile, printto and some others can be set (and obtained of course). Enumerating all or filtered extensions is currently made in .net 2.0 format, because well... using the yield return is more efficient than keeping an entire list of the FileExtension objects &amp;nbsp;:)&lt;BR&gt;The current functionality works as far as I've tested it, but additional options probably will be included at a later time (requests perhaps?)&lt;/P&gt;
&lt;P&gt;Update 18-3-6 : Added the FileData class and some extra functionality around obtaining icons (some icons are indexed inside eg. shell32.dll. if they are loaded with the filename, only the first icon is loaded). &lt;FONT size=1&gt;(The FileData class is used in the &lt;/FONT&gt;&lt;A href="http://blogs.vbcity.com/hotdog/archive/2006/03/03/5861.aspx"&gt;&lt;FONT size=1&gt;FileSelect Control&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The complete functional code:&lt;/STRONG&gt;&lt;/P&gt;
&lt;!-- --Start of code block
--&gt;&lt;DIV Style=" Border='3px #000080 Double'; Margin-Left=10pt; Margin-Right=2pt;" OnKeyDown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;&amp; i&lt;ch.selcount){ch.sel=i;ch.click();}"&gt;&lt;DIV Style=" Font-Size=9pt; Font-Family='Microsoft Sans Serif'; Border-Bottom='3px #000080 Double';" OnClick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'250pt':null;if(i==1&amp;&amp; ch.offsetHeight&gt;h)ch.style.height=h;" sel=1 selold=1 selcount=3&gt;&lt;b&gt;  Code &lt;/b&gt;&lt;a href="javascript:" Style=" Margin-Left=10pt; Margin-Right=10pt;" OnClick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');"&gt;Copy&lt;/a&gt;&lt;SPAN Style=" Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=0"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();"&gt;Hide&lt;/SPAN&gt;&lt;SPAN Style=" Font-Weight=bolder; Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=1"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();" Checked=True&gt;Scroll&lt;/SPAN&gt;&lt;SPAN Style=" Margin-Left=5pt; Margin-Right=5pt; Cursor='hand';" OnClick="parentNode.sel=2"&gt;&lt;Input Type="Radio" Style="" OnClick="this.blur();"&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;&lt;DIV Style=" BackGround-Color=#dcdcdc; overflow='auto'; Height=250pt;"&gt;&lt;FONT Color=#0000ff&gt;#define&lt;/FONT&gt; Net20 &lt;FONT Color=#008000&gt;//remove or comment this line to remove any functionality only available in .net 2.0 (and higher)&lt;br&gt;&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;namespace&lt;/FONT&gt; Subro.IO&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;using&lt;/FONT&gt; System;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;#if&lt;/FONT&gt; Net20&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;using&lt;/FONT&gt; System.Collections.Generic;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;#else&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;using System.Collections;&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;#endif&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;using&lt;/FONT&gt; System.Text;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; Microsoft.Win32;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Drawing;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.IO;&lt;FONT Color=#0000ff&gt;&lt;br&gt;using&lt;/FONT&gt; System.Windows.Forms;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Information around a registered file extension.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Use the static functions to get lists&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;partial&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;FileRegKey&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; FileExtension(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Extension)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;(Extension)&lt;/div&gt;{&lt;br&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The extension this &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFileExtension&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; class holds information for&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Extension&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; Name; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Name = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; CheckValue(&lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; value)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (!CheckExtension(value))&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Exception&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotInvalid Extension format: &amp;quot&lt;/FONT&gt; + value&lt;br&gt;+ &lt;FONT Color=#800000&gt;&amp;quot.\nFormat should be a dot followed by one or more allowed characters (Vague isn't it? See the AllowedCharacters constant for a list. Of course letters and digits are also allowed).&amp;quot&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;.CheckValue(&lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; value);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;#region&lt;/FONT&gt; Registry&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; onKeyChanged()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;setStarter();&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.onKeyChanged();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Refresh()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;starter = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.Refresh();&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The value defined in the main registry entry that points&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; to the key that contains the start information. This value can be the&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; same as that of other extensions to use the same data (eg, .zip,.pkzip,.tar can point to the same location)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; NB, changing this property means creating a new &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; In general it's more user friendly to assign this through the &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; property unless&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; assigning to an existing info entry&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; AssociatedName&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; DefaultValue &lt;FONT Color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ArgumentNullException&lt;/FONT&gt;();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (DefaultValue != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp AssociatedName.ToLower() == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;.ToLower())&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt;;&lt;/div&gt;DefaultValue = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;setStarter();&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;#endregion&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarter&lt;/FONT&gt; starter;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFileStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; information associated with this file&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarter&lt;/FONT&gt; Starter&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;GetKey();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (starter == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#008000&gt;//create a default starter &lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;AssociatedName = Extension.Substring(1) + &lt;FONT Color=#800000&gt;&amp;quot Files&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; starter;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;starter = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;AssociatedName = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; ? &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; : &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;.Name;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; setStarter()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Exists())&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt; subname = AssociatedName;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (subname != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (starter == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; || starter.Name.ToLower() != subname.ToLower())&lt;div style="margin-left:20pt"&gt;starter = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarter&lt;/FONT&gt;(subname);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;br&gt;starter = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Gets the description of the associated file&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; You can set this property through the &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; property.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If no &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; is assigned, the contenttype is returned&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Description&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;GetKey();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (starter == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; ContentType;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; starter.Description;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Gets the icon-name of the associated &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; GetIconName()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;GetKey();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (starter == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; starter.IconFileName;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Gets the icon of the associated &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt; GetIcon()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;GetKey();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (starter == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; GetDefaultIcon();&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; starter.GetIcon();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt; defaultIcon;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Gets the icon used for unknown file types&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt; GetDefaultIcon()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (defaultIcon == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;defaultIcon = ExtractIcon(&lt;FONT Color=#800000&gt;&amp;quotshell32.dll&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; defaultIcon;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt; ExtractIcon(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; File)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; ExtractIcon(File, 0);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt; ExtractIcon(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; File, &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Index)&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//In .net 2.0 there's a static method Icon.ExtractAssociatedIcon, but this does not support&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//indexes (only the first icon is extracted)&lt;/FONT&gt;&lt;FONT Color=#008000&gt;&lt;br&gt;//that's why for version 2.0 as well as the prior ones, the dllimport below is used&lt;/FONT&gt;&lt;FONT Color=#008080&gt;&lt;br&gt;IntPtr&lt;/FONT&gt; h = ExtractIcon(0, File, Index);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt;.FromHandle(h);&lt;/div&gt;}&lt;br&gt;[System.Runtime.InteropServices.&lt;FONT Color=#008080&gt;DllImport&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotshell32.dll&amp;quot&lt;/FONT&gt;)]&lt;FONT Color=#0000ff&gt;&lt;br&gt;extern&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IntPtr&lt;/FONT&gt; ExtractIcon(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; hInst, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; lpszExeFileName, &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; nIconIndex);&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;const&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; ContentTypeValue = &lt;FONT Color=#800000&gt;&amp;quotContent Type&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The content type description for the current entry.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; ContentType&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetValue(ContentTypeValue) &lt;FONT Color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetValue(ContentTypeValue, &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Returns the extension and the descriptive text&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; ToString()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; Extension + &lt;FONT Color=#800000&gt;&amp;quot: &amp;quot&lt;/FONT&gt; + Description;&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Base class for &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFileExtension&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; and &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFileStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileRegKey&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; FileRegKey(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;(&lt;FONT Color=#008080&gt;Registry&lt;/FONT&gt;.ClassesRoot, Name)&lt;/div&gt;{&lt;br&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Wrapper around a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotMicrosoft.Win32.RegistryKey&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt; Root;&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegistryKey&lt;/FONT&gt; rootkey;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegistryKey&lt;/FONT&gt; RootKey&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Root == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; rootkey;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; Root.RegistryKey;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; FullName&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; (Root == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;&lt;br&gt;? rootkey.Name&lt;br&gt;: Root.FullName)&lt;br&gt;+ &lt;FONT Color=#800000&gt;@&amp;quot\&amp;quot&lt;/FONT&gt; + name;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; RegKey(&lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt; BaseDir, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (BaseDir == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ArgumentNullException&lt;/FONT&gt;();&lt;br&gt;Root = BaseDir;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Name = Name;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; RegKey(&lt;FONT Color=#008080&gt;RegistryKey&lt;/FONT&gt; BaseDir, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (BaseDir == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ArgumentNullException&lt;/FONT&gt;();&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.rootkey = BaseDir;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Name = Name;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; name;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The name of the key.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; NB, changing the name looks up or creates a new key, it will not&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; rename the existing one&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;internal&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; name; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (name != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp !AllowNameChange()) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;; &lt;FONT Color=#008000&gt;//throw instead?&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;ArgumentNullException&lt;/FONT&gt;();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;if&lt;/FONT&gt; (CheckValue(&lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;))&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;name = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;br&gt;Refresh();&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowNameChange()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Normally the registry key is looked up once and the values buffered, but if an external program has altered&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; the registry, you can force a refresh with this method&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Refresh()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;regkey = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;br&gt;regkeysSearched = &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; CheckValue(&lt;FONT Color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; value)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Indicates if this key already exists&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; Exists()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;GetKey();&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; regkey != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; regkeysSearched;&lt;FONT Color=#008080&gt;&lt;br&gt;RegistryKey&lt;/FONT&gt; regkey;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Gets the corresponding registry key (if any)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegistryKey&lt;/FONT&gt; RegistryKey&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;GetKey();&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; regkey;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The default value for the current entry&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; DefaultValue&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetValue(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;SetValue(&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;, &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; GetValue(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;GetKey();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (regkey == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; regkey.GetValue(Name);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; SetValue(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name, &lt;FONT Color=#0000ff&gt;object&lt;/FONT&gt; value)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Writable = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;RegistryKey.SetValue(Name, value);&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Forcibly creates this subkey&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Create()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (!Exists())&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Root != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) Root.Writable = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;br&gt;RootKey.CreateSubKey(name);&lt;br&gt;Refresh();&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Forces a flush of the changes if values have been changed&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Flush()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (regkey != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) regkey.Flush();&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Writes any changes to disk&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; Close()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (regkey != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) regkey.Close();&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Gets a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotRegKey&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; indicating a subkey for this item.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If it doesn't exist, it will be created if a value is set.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; You can also use &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotCreateSubKey&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; to ensure it is created.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotName&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt; GetSubKey(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, Name);&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Same as &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotGetSubKey&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;, but this method forces the creation &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; where &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotGetSubKey&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; just returns the object which will create&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; itself when needed (a value is set)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotName&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt; CreateSubKey(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;RegKey&lt;/FONT&gt; key = GetSubKey(Name);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (!key.Exists())&lt;div style="margin-left:20pt"&gt;key.Create();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; key;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Get the registry information if not done so already after the last Refresh&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; GetKey()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (!regkeysSearched)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;regkeysSearched = &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Root == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (rootkey == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;throw&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Exception&lt;/FONT&gt;(&lt;FONT Color=#800000&gt;&amp;quotNo root was specified!&amp;quot&lt;/FONT&gt;);&lt;/div&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;if&lt;/FONT&gt; (Root.Exists())&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//RegistryKey classes = ;&lt;/FONT&gt;&lt;br&gt;rootkey = Root.RegistryKey;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (rootkey != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;regkey = rootkey.OpenSubKey(name, writable);&lt;/div&gt;onKeyChanged();&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; writable;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The current state of the registry key. This property can be set manually, but&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; this isn't really necessary. Normally a key is opened as readonly and switched&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; to writable only when required.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; NB: when set to writable, this key will be created when it doesn't exist yet (see &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotCreate&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; Writable&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; writable; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (writable == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;writable = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Create();&lt;/div&gt;}&lt;br&gt;Refresh();&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; onKeyChanged()&lt;br&gt;{&lt;br&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The extra info for a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFileExtension&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;. This is a reusable entry that&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; can be used for multiple extensions.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; eg, one starter can be used for &amp;quot.zip&amp;quot,&amp;quot.tar&amp;quot,&amp;quot.gz&amp;quot, etc.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarter&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;FileRegKey&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; FileStarter(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;(Name)&lt;/div&gt;{&lt;br&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The description of the files that are started by this entry&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Description&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; DefaultValue &lt;FONT Color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DefaultValue = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;const&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; showextValueName = &lt;FONT Color=#800000&gt;&amp;quotAlwaysShowExt&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Self descriptive really eh :p&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AlwaysShowExtension&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;object&lt;/FONT&gt; o = GetValue(showextValueName);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (o == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;)o == 1;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (AlwaysShowExtension == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;SetValue(showextValueName, 1);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;if&lt;/FONT&gt; (Exists())&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.RegistryKey.DeleteValue(showextValueName);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;const&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; defaultIconEntry = &lt;FONT Color=#800000&gt;&amp;quotDefaultIcon&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The name of the icon associated with this type&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; IconFileName&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;RegKey&lt;/FONT&gt; key = GetIconEntry();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (key == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; key.DefaultValue &lt;FONT Color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;RegKey&lt;/FONT&gt; key = GetIconEntry();&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (key != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;key.DefaultValue = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Loads the icon specified in &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotIconFileName&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; System.Drawing.&lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt; GetIcon()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt; file = IconFileName;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (file != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;File&lt;/FONT&gt;.Exists(file))&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; System.Drawing.&lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt;(file);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;int&lt;/FONT&gt; p = file.LastIndexOf(&lt;FONT Color=#800000&gt;','&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;br&gt;int&lt;/FONT&gt; i;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (p != -1 &amp;amp&amp;amp &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;.TryParse(file.Substring(p + 1), &lt;FONT Color=#0000ff&gt;out&lt;/FONT&gt; i))&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;.ExtractIcon(file.Substring(0, p), i);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;.GetDefaultIcon();&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt; GetIconEntry()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetSubKey(defaultIconEntry);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; onKeyChanged()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;shell = shellex = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;base&lt;/FONT&gt;.onKeyChanged();&lt;/div&gt;}&lt;FONT Color=#008080&gt;&lt;br&gt;FileStarterShell&lt;/FONT&gt; shell, shellex;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Contains the actual start information&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShell&lt;/FONT&gt; Shell&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (shell == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;shell = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShell&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; shell;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The application or command used to open the file.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If you assign this value manually, don't forget to add a &amp;quot%1&amp;quot if you want&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; to include the file to open&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; OpenCommand&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; Shell.OpenCommand; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt; { Shell.OpenCommand = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Contains the start information if it has to use ShellEx.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Normally you don't have to use this and can use &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotShell&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; instead&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShell&lt;/FONT&gt; ShellEx&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (shellex == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;shellex = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShell&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; shellex;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The actual shell info to start a &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFileStarter&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; application&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShell&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; FileStarterShell(&lt;FONT Color=#008080&gt;FileStarter&lt;/FONT&gt; owner, &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; Ex)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;(owner, Ex ? &lt;FONT Color=#800000&gt;&amp;quotshellEx&amp;quot&lt;/FONT&gt; : &lt;FONT Color=#800000&gt;&amp;quotshell&amp;quot&lt;/FONT&gt;)&lt;/div&gt;{&lt;div style="margin-left:20pt"&gt;Open = AddMenu(&lt;FONT Color=#800000&gt;&amp;quotopen&amp;quot&lt;/FONT&gt;);&lt;br&gt;Edit = AddMenu(&lt;FONT Color=#800000&gt;&amp;quotedit&amp;quot&lt;/FONT&gt;);&lt;br&gt;PrintTo = AddMenu(&lt;FONT Color=#800000&gt;&amp;quotprintto&amp;quot&lt;/FONT&gt;);&lt;br&gt;Play = AddMenu(&lt;FONT Color=#800000&gt;&amp;quotplay&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Commands to normally open a file (doubleclick in explorer)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; Open;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Commands to edit a file (edit in the right click explorer menu)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; Edit;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Commands when to print (print in right click explorer menu)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; PrintTo;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Commands with which to play (play in right click explorer menu, used for media files)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; Play;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Returns the menu with the specified name.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The default menus such as Open and PrintTo can also be obtained directly&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotMenuName&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;[&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; MenuName]&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt; search = MenuName.ToLower();&lt;FONT Color=#0000ff&gt;&lt;br&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; f &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; menus)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (f.Name == search) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; f;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; AddMenu(MenuName);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; An extra function around the indexed property to make it easier to find ;-)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotMenuName&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; GetMenu(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; MenuName)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;[MenuName];&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; AddMenu(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; name)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;FileStarterShellMenu&lt;/FONT&gt; m = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, name);&lt;br&gt;menus.Add(m);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; m;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;/div&gt;&lt;/div&gt;#if&lt;/FONT&gt; Net20&lt;FONT Color=#008080&gt;&lt;div style="margin-left:40pt"&gt;List&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt;&amp;gt menus = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;List&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt;&amp;gt();&lt;FONT Color=#0000ff&gt;&lt;/div&gt;#else&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;ArrayList menus = new ArrayList();&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;#endif&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; sets the commandline (application) to open the file&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; OpenCommand&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; Open.Command; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt; { Open.Command = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowNameChange()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShellMenu&lt;/FONT&gt; : &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileStarterShell&lt;/FONT&gt; Owner;&lt;FONT Color=#0000ff&gt;&lt;br&gt;internal&lt;/FONT&gt; FileStarterShellMenu(&lt;FONT Color=#008080&gt;FileStarterShell&lt;/FONT&gt; owner, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Name)&lt;div style="margin-left:20pt"&gt;: &lt;FONT Color=#0000ff&gt;base&lt;/FONT&gt;(owner, Name)&lt;/div&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Owner = owner;&lt;br&gt;commandKey = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#800000&gt;&amp;quotcommand&amp;quot&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;protected&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;override&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; AllowNameChange()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegKey&lt;/FONT&gt; commandKey;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Assign the command to start up with the specified application&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotpath&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; SetApplication(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; path)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Command = path + &lt;FONT Color=#800000&gt;@&amp;quot %1&amp;quot&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Command&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; commandKey.DefaultValue &lt;FONT Color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt; { commandKey.DefaultValue = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;; }&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; This part of the class contains the static functions&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;partial&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;/div&gt;#if&lt;/FONT&gt; Net20&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;&amp;gt EnumerateExtensionInfo()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; subkeyname &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; GetRegisteredExtensions())&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;(subkeyname);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Returns the names of all the registered extensions (including the general '*').&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The StartsWith value indicates what to search for (null or &amp;quot.&amp;quot returns all, &amp;quotex&amp;quot returns &amp;quot.exe&amp;quot,&amp;quot.ex_&amp;quot etc)&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt GetRegisteredExtensions(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; StartsWith)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetRegisteredExtensions(StartsWith, &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt GetRegisteredExtensions()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; GetRegisteredExtensions(&lt;FONT Color=#800000&gt;&amp;quot.&amp;quot&lt;/FONT&gt;, &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;);&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotStartsWith&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotIncludeDefault&amp;quot&amp;gt&amp;ltc&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;true&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/c&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; if the general '*' entry should be included, otherwise &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltc&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;false&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/c&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;IEnumerable&lt;/FONT&gt;&amp;lt&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt;&amp;gt GetRegisteredExtensions(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; StartsWith, &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IncludeDefault)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (IncludeDefault)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#800000&gt;&amp;quot*&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#008080&gt;&lt;/div&gt;RegistryKey&lt;/FONT&gt; classes = &lt;FONT Color=#008080&gt;Registry&lt;/FONT&gt;.ClassesRoot;&lt;FONT Color=#0000ff&gt;&lt;br&gt;foreach&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; subkeyname &lt;FONT Color=#0000ff&gt;in&lt;/FONT&gt; classes.GetSubKeyNames())&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (subkeyname.StartsWith(StartsWith))&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;yield&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; subkeyname;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;/div&gt;#endif&lt;br&gt;&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Characters that are allowed besides characters or digits.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; AllowedCharacters = &lt;FONT Color=#800000&gt;&amp;quot-_&amp;quot&lt;/FONT&gt;;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Checks if the specified Extension has a valid setup&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotExtension&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltreturns&amp;gt&amp;lt/returns&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; CheckExtension(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Extension)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (Extension == &lt;FONT Color=#800000&gt;&amp;quot*&amp;quot&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;FONT Color=#008000&gt;&lt;br&gt;//check extension type (could have used regex, but went for the speed)&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Extension.Length &amp;lt 2) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Extension[0] != &lt;FONT Color=#800000&gt;'.'&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;for&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; i = 1; i &amp;lt Extension.Length; i++)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (!&lt;FONT Color=#0000ff&gt;char&lt;/FONT&gt;.IsLetterOrDigit(Extension[i]))&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (AllowedCharacters.IndexOf(Extension[i]) == -1)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;false&lt;/FONT&gt;;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;true&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;RegistryKey&lt;/FONT&gt; RenameKey(&lt;FONT Color=#008080&gt;RegistryKey&lt;/FONT&gt; key, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; NewName)&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//must be a better way than this to simply rename...&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;string&lt;/FONT&gt; name = key.Name;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; key;&lt;/div&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:40pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Sets the application as the name for the startup group&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotApplication&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotExtension&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt; RegisterApplication(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Application, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Extension)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;FileExtension&lt;/FONT&gt; ext = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;(Extension);&lt;br&gt;ext.Starter.Shell.Open.SetApplication(Application);&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; ext;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; assigns the specified extension to an existing application group&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotStarterGroup&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltparam name=&amp;quotExtension&amp;quot&amp;gt&amp;lt/param&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt; AssignExtension(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; StarterGroup, &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Extension)&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;FileExtension&lt;/FONT&gt; ext = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;(Extension);&lt;br&gt;ext.AssociatedName = StarterGroup;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; ext;&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#808080&gt;&lt;div style="margin-left:20pt"&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Wrapper around the &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotSystem.IO.FileInfo&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt;, with some extra functionality such as the extension&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileData&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;private&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileInfo&lt;/FONT&gt; file;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FileData() { }&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FileData(&lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; File)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;FileName = File;&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The filename for which this info is set&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; FileName&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; file == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; ? &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; : file.FullName; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (FileName == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; || &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;.Trim().Length == 0)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;file = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;file = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileInfo&lt;/FONT&gt;(&lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;);&lt;/div&gt;}&lt;br&gt;valid = file != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp file.Exists;&lt;br&gt;icon = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;br&gt;ext = &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (FileChanged != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;FileChanged(&lt;FONT Color=#0000ff&gt;this&lt;/FONT&gt;, &lt;FONT Color=#008080&gt;EventArgs&lt;/FONT&gt;.Empty);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;event&lt;/FONT&gt; &lt;FONT Color=#008080&gt;EventHandler&lt;/FONT&gt; FileChanged;&lt;FONT Color=#0000ff&gt;&lt;br&gt;bool&lt;/FONT&gt; valid;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Indicates whether a file is set and exists&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsValid&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; valid; }&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; Returns the underlying &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsee cref=&amp;quotFileInfo&amp;quot/&amp;gt&lt;/FONT&gt;&lt;FONT Color=#008000&gt; object&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileInfo&lt;/FONT&gt; Info&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; file; }&lt;/div&gt;}&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; The folder in which the file is held&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Folder&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt; { &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; file != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; ? file.DirectoryName : &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;; }&lt;FONT Color=#0000ff&gt;&lt;br&gt;set&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (file == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; || Folder == &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt;;&lt;br&gt;FileName = &lt;FONT Color=#0000ff&gt;value&lt;/FONT&gt; + &lt;FONT Color=#800000&gt;@&amp;quot\&amp;quot&lt;/FONT&gt; + (valid ? file.Name : &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;);&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#008080&gt;&lt;br&gt;FileExtension&lt;/FONT&gt; ext;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;ltsummary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; returns the extension information. NB: getting some properies of the Extension&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; causes registry entries to be created (by design).&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; If that is not the intention, check Extension.Exists() first.&lt;/FONT&gt;&lt;FONT Color=#808080&gt;&lt;br&gt;///&lt;/FONT&gt;&lt;FONT Color=#008000&gt; &lt;/FONT&gt;&lt;FONT Color=#808080&gt;&amp;lt/summary&amp;gt&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt; ExtensionInfo&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (ext == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt; &amp;amp&amp;amp valid &amp;amp&amp;amp &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;.CheckExtension(Extension))&lt;div style="margin-left:20pt"&gt;ext = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;FileExtension&lt;/FONT&gt;(Extension);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; ext;&lt;/div&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;string&lt;/FONT&gt; Extension&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (file == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;) &lt;FONT Color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;;&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; file.Extension;&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;FONT Color=#008080&gt;&lt;div style="margin-left:40pt"&gt;Icon&lt;/FONT&gt; icon;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt; AssociatedIcon&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (icon == &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;#if&lt;/FONT&gt; Net20&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:100pt"&gt;if&lt;/FONT&gt; (valid)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;try&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;icon = &lt;FONT Color=#008080&gt;Icon&lt;/FONT&gt;.ExtractAssociatedIcon(FileName); &lt;FONT Color=#008000&gt;//long live this new functionality!&lt;/FONT&gt;&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;catch&lt;/FONT&gt; { }&lt;FONT Color=#0000ff&gt;&lt;/div&gt;if&lt;/FONT&gt;(icon ==&lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;FONT Color=#0000ff&gt;&lt;/div&gt;#endif&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:120pt"&gt;if&lt;/FONT&gt; (ExtensionInfo != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;icon = ext.GetIcon();&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:80pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;return&lt;/FONT&gt; icon;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;#if&lt;/FONT&gt; Net20&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawFile(&lt;FONT Color=#008080&gt;Graphics&lt;/FONT&gt; g, &lt;FONT Color=#008080&gt;Rectangle&lt;/FONT&gt; bounds, &lt;FONT Color=#008080&gt;Font&lt;/FONT&gt; Font, &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IncludeIcon)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt; (IncludeIcon)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;int&lt;/FONT&gt; hw = &lt;FONT Color=#008080&gt;Math&lt;/FONT&gt;.Min(32, bounds.Height - 2);&lt;FONT Color=#0000ff&gt;&lt;br&gt;int&lt;/FONT&gt; y = (bounds.Height - hw) / 2;&lt;FONT Color=#008080&gt;&lt;br&gt;Rectangle&lt;/FONT&gt; rIcon = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Rectangle&lt;/FONT&gt;(1, y, hw, hw);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (AssociatedIcon != &lt;FONT Color=#0000ff&gt;null&lt;/FONT&gt;)&lt;div style="margin-left:20pt"&gt;g.DrawIcon(AssociatedIcon, rIcon);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;rIcon.Inflate(-2, -2);&lt;FONT Color=#008080&gt;&lt;br&gt;Pen&lt;/FONT&gt; pen = &lt;FONT Color=#008080&gt;Pens&lt;/FONT&gt;.Red;&lt;br&gt;g.DrawRectangle(pen, rIcon);&lt;br&gt;g.DrawLine(pen, rIcon.X, rIcon.Y, rIcon.Right, rIcon.Bottom);&lt;br&gt;g.DrawLine(pen, rIcon.X, rIcon.Bottom, rIcon.Right, rIcon.Y);&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&lt;div style="margin-left:80pt"&gt;hw = rIcon.Right + 4;&lt;br&gt;bounds.Offset(hw, 0);&lt;br&gt;bounds.Width -= hw;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;string&lt;/FONT&gt; text = FileName;&lt;FONT Color=#008080&gt;&lt;br&gt;SizeF&lt;/FONT&gt; s = g.MeasureString(text, Font);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (s.Width &amp;lt bounds.Width)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;g.DrawString(text, Font, &lt;FONT Color=#008080&gt;Brushes&lt;/FONT&gt;.Black, bounds);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;else&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#008080&gt;&lt;div style="margin-left:20pt"&gt;TextFormatFlags&lt;/FONT&gt; flags = &lt;FONT Color=#008080&gt;TextFormatFlags&lt;/FONT&gt;.SingleLine | &lt;FONT Color=#008080&gt;TextFormatFlags&lt;/FONT&gt;.Right | &lt;FONT Color=#008080&gt;TextFormatFlags&lt;/FONT&gt;.EndEllipsis;&lt;FONT Color=#008080&gt;&lt;br&gt;TextRenderer&lt;/FONT&gt;.DrawText(g, file.Name, Font, bounds, &lt;FONT Color=#008080&gt;Color&lt;/FONT&gt;.Black, flags);&lt;br&gt;s = &lt;FONT Color=#008080&gt;TextRenderer&lt;/FONT&gt;.MeasureText(g, file.Name, Font, bounds.Size, flags);&lt;FONT Color=#0000ff&gt;&lt;br&gt;float&lt;/FONT&gt; rem = bounds.Width - s.Width;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (rem &amp;gt 3)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;bounds.Width = (&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;)rem;&lt;br&gt;Font = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#008080&gt;Font&lt;/FONT&gt;(Font.FontFamily, Font.Size - 2, &lt;FONT Color=#008080&gt;FontStyle&lt;/FONT&gt;.Italic);&lt;FONT Color=#008080&gt;&lt;br&gt;TextRenderer&lt;/FONT&gt;.DrawText(g, file.DirectoryName, Font, bounds, &lt;FONT Color=#008080&gt;Color&lt;/FONT&gt;.Black, flags);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;#endif&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV Style=" Display='none'; BackGround-Color=#dcdcdc;" OnDblClick="var o = parentNode.firstChild;o.sel =1;o.click()"&gt;&lt;b&gt; . . .&lt;/b&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Example code:&lt;BR&gt;&lt;/STRONG&gt;Will also post a little 'admin' program that uses the classes and some more examples some time in the future (not saying near future mind you :p)&lt;/P&gt;&lt;!-- --Start of code block
--&gt;
&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 1px solid; BORDER-TOP: #000080 1px solid; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 1px solid; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 1px solid"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 1px solid; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'125pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" sel="2" selold="2" selcount="3"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//simply assigning an application&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;FileExtension&lt;/FONT&gt;.RegisterApplication(&lt;FONT color=#800000&gt;@"t:\bla.bat"&lt;/FONT&gt;, &lt;FONT color=#800000&gt;".test2"&lt;/FONT&gt;);&lt;/DIV&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//Assigning an application and setting the icon&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;FileStarter&lt;/FONT&gt; starter = &lt;FONT color=#008080&gt;FileExtension&lt;/FONT&gt;.RegisterApplication(&lt;FONT color=#800000&gt;@"t:\bla.bat"&lt;/FONT&gt;, &lt;FONT color=#800000&gt;".test2"&lt;/FONT&gt;).Starter;&lt;BR&gt;starter.IconFileName = &lt;FONT color=#800000&gt;"FullFileNameOfTheIcon"&lt;/FONT&gt;;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =2;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;!-- 
End of code block----&gt;As said, the FileStarter class points to where it all happens. &lt;BR&gt;That entry and not the extension entry decides the icon, the&amp;nbsp;description and the right click options in windows explorer.&lt;/P&gt;
&lt;P&gt;Those right click menu options are another interesting option to a file.&lt;BR&gt;The default menu option 'open' also applies to opening by doubleclicking and some other entries belong to the defaults as well (printto and play to name a few), But creating new options for the right click menu is easy enough as well, they are subkeys of the shell entry just like the rest. Of course, this is also included in the wrapper:&lt;!-- --Start of code block
--&gt;&lt;/P&gt;
&lt;DIV onkeydown="var k =event.keyCode,i=-1,ch=this.firstChild;if(k==32){i=ch.sel;if(++i==ch.selcount)i=0;}else i = k - 49;if(i&gt;=0 &amp;amp;&amp;amp; i&lt;ch.selcount){ch.sel=i;ch.click();}" style="BORDER-RIGHT: #000080 1px solid; BORDER-TOP: #000080 1px solid; MARGIN-LEFT: 10pt; BORDER-LEFT: #000080 1px solid; MARGIN-RIGHT: 2pt; BORDER-BOTTOM: #000080 1px solid"&gt;
&lt;DIV style="FONT-SIZE: 9pt; BORDER-BOTTOM: #000080 1px solid; FONT-FAMILY: 'Microsoft Sans Serif'" onclick="var i=this.sel,j,ch,count = this.selcount;if(i==this.selold)return;this.selold=i;for(j=0;j&lt;count;j++){ch=this.childNodes[2+j];ch.childNodes[0].checked=j==i;ch.style.fontWeight = j==i ? 'bolder' : 'normal';}ch=parentNode.childNodes[1];var sh=new Array('none','');j=i==0?0:1;ch.style.display=sh[j];ch.nextSibling.style.display=sh[1-j];var h =ch.offsetHeight;ch.style.height=i==1?'125pt':null;if(i==1&amp;amp;&amp;amp; ch.offsetHeight&gt;h)ch.style.height=h;" sel="2" selold="2" selcount="3"&gt;&lt;B&gt;Code &lt;/B&gt;&lt;A style="MARGIN-LEFT: 10pt; MARGIN-RIGHT: 10pt" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].innerText);alert('Code copied to clipboard');" href="javascript:"&gt;Copy&lt;/A&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=0&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Hide&lt;/SPAN&gt;&lt;SPAN style="MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=1&gt;&lt;INPUT onclick=this.blur(); type=radio&gt;Scroll&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bolder; MARGIN-LEFT: 5pt; CURSOR: hand; MARGIN-RIGHT: 5pt" onclick=parentNode.sel=2&gt;&lt;INPUT onclick=this.blur(); type=radio CHECKED&gt;Full&lt;/SPAN&gt;&lt;!-- CodeBlock by R.Verpalen 2005 : http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx--&gt;&lt;/DIV&gt;
&lt;DIV style="OVERFLOW: auto; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;FONT color=#008000&gt;
&lt;DIV style="MARGIN-LEFT: 60pt"&gt;//this sets a test menu option only for the extension ".test2"&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;//you could also set it for ALL files by using: new FileExtension("*");&lt;/FONT&gt;&lt;FONT color=#008080&gt;&lt;BR&gt;FileExtension&lt;/FONT&gt; ext = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#008080&gt;FileExtension&lt;/FONT&gt;(&lt;FONT color=#800000&gt;".test2"&lt;/FONT&gt;);&lt;BR&gt;ext.Starter.Shell[&lt;FONT color=#800000&gt;"Test menu"&lt;/FONT&gt;].Command = &lt;FONT color=#800000&gt;@"t:\bla.bat"&lt;/FONT&gt;;&lt;FONT color=#0000ff&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;DIV ondblclick="var o = parentNode.firstChild;o.sel =2;o.click()" style="DISPLAY: none; BACKGROUND-COLOR: #dcdcdc"&gt;&lt;B&gt;. . .&lt;/B&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/5873.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Robert Verpalen</dc:creator><title>AutoFormatter 2.0 (Rtf to HTML conversion)</title><link>http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx</link><pubDate>Fri, 30 Dec 2005 12:14:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2005/12/30/5759.aspx</guid><description>&lt;P&gt;&lt;FONT size=1&gt;(First introduced here: &lt;/FONT&gt;&lt;A href="http://blogs.vbcity.com/hotdog/archive/2004/09/11/280.aspx"&gt;&lt;FONT size=1&gt;http://blogs.vbcity.com/hotdog/archive/2004/09/11/280.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=1&gt;&amp;nbsp;,&lt;/FONT&gt; )&lt;BR&gt;This is the second version of the AutoFormatter. Mainly intended for easily posting code blocks to .. let's say a blog, it can also be used for rtf conversion in general.&lt;/P&gt;
&lt;P&gt;
&lt;HR&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=4&gt;&lt;FONT color=#000080&gt;&lt;STRONG&gt;DOWNLOAD&lt;/STRONG&gt;/INSTALL&lt;/FONT&gt;&lt;/FONT&gt; &lt;BR&gt;&lt;BR&gt;&lt;A href="http://www.xs4all.nl/~rbverp/SubroSoftware/Download/Autoformatter/AutoFormatter.exe"&gt;&lt;FONT size=4&gt;Run exe (22-1-2006)&lt;/FONT&gt;&lt;/A&gt; The other options all want to access the internet to check for updates. Download or run this exe to use a version that does not try to do so. That also means of course that you might not use the last version &lt;BR&gt;&lt;BR&gt;---While testing the .application extension link did not seem to be processed properly, so you might have some problems with the links below&lt;BR&gt;&lt;A href="http://www.xs4all.nl/~rbverp/SubroSoftware/Download/Autoformatter/AutoFormatter.application"&gt;Run directly&lt;/A&gt; Run AutoFormatter directly from the internet. You can visit &lt;A href="http://www.xs4all.nl/~rbverp/SubroSoftware/Download/Autoformatter/publish.htm"&gt;this page&lt;/A&gt; first to check if the required framework is installed or for more info on ClickOnce deployment. &lt;BR&gt;&lt;BR&gt;&lt;A href="http://www.xs4all.nl/~rbverp/SubroSoftware/Download/Autoformatter/setup.exe"&gt;Setup&lt;/A&gt; Setup application to run on your local machine. If installed this way updates can be automatically downloaded. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;
&lt;HR&gt;
&lt;BR&gt;SOURCE CODE &lt;BR&gt;&lt;A href="http://www.xs4all.nl/~rbverp/SubroSoftware/Download/Autoformatter/Code.zip"&gt;AutoFormatter.zip&lt;/A&gt;&amp;nbsp;(version 7-1-2006) The zip contains the source code. Written visual C# 2005 express edition. This executable may from time to time be newer than the executable, because well... it's too much work to update the source as well for some minor changes&amp;nbsp;:p&lt;BR&gt;
&lt;P&gt;
&lt;HR&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Requirements: .net framework 2.0 (&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5&amp;amp;DisplayLang=en"&gt;click here&lt;/A&gt; for the msdn download page) If the setup file is used, a check for the framework is automatically performed&lt;/P&gt;
&lt;P&gt;
&lt;HR&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Screenshots:&lt;BR&gt;&lt;A href="http://blogs.vbcity.com/upload/hotdog/autoformatter/screenshots/rtf.jpg"&gt;rtf&lt;/A&gt; &lt;BR&gt;&lt;A href="http://blogs.vbcity.com/upload/hotdog/autoformatter/screenshots/advanced_options.jpg"&gt;Advanced options&lt;/A&gt; &lt;BR&gt;&lt;A href="http://blogs.vbcity.com/upload/hotdog/autoformatter/screenshots/preview.jpg"&gt;Preview&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;
&lt;P&gt;
&lt;HR&gt;
&lt;BR&gt;Note to upgraders from 1.0 : AF2.0 uses the improved applicationsettings functionality of the .net 2.0 framework and no longer the xml dataset. That means old settings are not ported, but they weren't that many, so hopefully that won't be seen as a drawback.&lt;BR&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Some development info: &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;At first the AF was a quick and dirty way to be able to post code onto my blog, but since more people than just me seem to be using it (maybe just 2 people, but hey, that's still more than just me), decided to try and make it a 'complete' tool with better functionality. Also rewritten and cleaned most of it up, so that expanding shouldn't be too much of a problem.&lt;BR&gt;The AutoFormatter contains custom objects that can parse themselves to html format. Eg there's a style class with a minimum of properties/attributes, which are the ones being used by the codeblock, such as background-color and onClick. The properties/attributes themselves are fields of the class type CanAppend, which is parsed automatically if a value is set. Other properties are therefore easily added in the html classes without having to add any parsing code.&lt;BR&gt;I'm pretty content with how it turned out now. Some features will be added in the future, but I like its current look and feel.&lt;BR&gt;The original plan was to use the .net 2.0 build in html elements (of System.Windows.Forms, used in the browser control), but they turned out to be insufficient adaptable for the set goal. Turned out those objects in turn used mshtml objects in the background. Those had all the html options with them and are included in the framework. Rewrote the code to use mshtml which worked great. Unfortunately, some of its behaviour I did not like. The goal was to keep the produced code to a minumum and the mshtml sometimes bloated for example the border settings. Besides that it was a tad slower (not much really, mainly the initializing the first time) . All and all I wanted to keep total control and went back to creating custom classes. Just wanted to say that here in case you were wondering why the available options weren't used ;-)&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;

&lt;P&gt;&lt;/P&gt;
&lt;P&gt;TODO (per 17/1/2006):&lt;BR&gt;-Create file directly&lt;BR&gt;-Upload the file&lt;BR&gt;-Support (embedded) images. This will be done in combination with the creating/uploading of a file&lt;BR&gt;-custom replacements from rtf characters to html tags&lt;BR&gt;&lt;STRIKE&gt;-custom style settings&lt;/STRIKE&gt; (implemented on a basic level per 7-1-2006)&lt;BR&gt;-Assigning class ids so css sheets can be used to set the default styles (and ability to create css info)&lt;BR&gt;&lt;STRIKE&gt;-ColorPicker should support choosing transparant.&lt;/STRIKE&gt; (Implemented per 7-1-2006)&lt;BR&gt;&lt;STRIKE&gt;-Unicode characters&lt;/STRIKE&gt;&amp;nbsp;(Implemented per 22-1-2006)&lt;BR&gt;-Bullet list&lt;BR&gt;-Keywords (C#,TSQL,VB, and any custom set)&lt;BR&gt;&lt;BR&gt;About the&amp;nbsp;keywords. That is, defining sets of keywords that get a specific formatting (eg for TSQL: &amp;#8220;select&amp;#8220;,&amp;#8220;from&amp;#8220;,&amp;#8220;update&amp;#8220;, etc. get a style of &amp;#8220;color:blue&amp;#8220;) Not too big a problem, but still much work. The real problem is if people really need it? What this would do, is format keywords &lt;EM&gt;after&lt;/EM&gt; the rtf formatting is applied, so as an extra. The setup would be to simply select 'none' or a file of keyword settings to apply. The keyword file would contain pairs of keywords and style settings, where the style is the normal html style tag. (and cascading to quickly apply a style to multiple keywords).&lt;BR&gt;So, if any of you are interested in such features, please drop me a note, so I know it wouldn't be a useless feature. cheers.&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/5759.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>