<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>HotDog's Blog</title><link>http://blogs.vbcity.com/hotdog/</link><description>Hotdog (Robert Verpalen) about C# and vb.net</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>Split String Function T-SQL</title><link>http://blogs.vbcity.com/hotdog/archive/2008/06/04/9085.aspx</link><pubDate>Wed, 04 Jun 2008 01:21:00 GMT</pubDate><guid>http://blogs.vbcity.com/hotdog/archive/2008/06/04/9085.aspx</guid><wfw:comment>http://blogs.vbcity.com/hotdog/comments/9085.aspx</wfw:comment><comments>http://blogs.vbcity.com/hotdog/archive/2008/06/04/9085.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.vbcity.com/hotdog/comments/commentRss/9085.aspx</wfw:commentRss><trackback:ping>http://blogs.vbcity.com/hotdog/services/trackbacks/9085.aspx</trackback:ping><description>&lt;P&gt;First thing's first: the function :D&lt;BR&gt;&lt;!-- --Start of code block
--&gt;
&lt;DIV 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'"&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;!-- 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: #ffffff"&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;create&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;function&lt;/FONT&gt; Split &lt;FONT color=#808080&gt;(&lt;/FONT&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;@StringToSplit &lt;FONT color=#0000ff&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;2048&lt;FONT color=#808080&gt;),&lt;/FONT&gt;&lt;BR&gt;@Separator &lt;FONT color=#0000ff&gt;varchar&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;128&lt;FONT color=#808080&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;returns&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;table&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;return&lt;BR&gt;with&lt;/FONT&gt; indices &lt;FONT color=#0000ff&gt;as&lt;/FONT&gt;&lt;FONT color=#808080&gt;&lt;BR&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;select&lt;/FONT&gt; 0 S&lt;FONT color=#808080&gt;,&lt;/FONT&gt; 1 E&lt;FONT color=#0000ff&gt;&lt;BR&gt;union all&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;select&lt;/FONT&gt; E&lt;FONT color=#808080&gt;,&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;charindex&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;@Separator&lt;FONT color=#808080&gt;,&lt;/FONT&gt; @StringToSplit&lt;FONT color=#808080&gt;,&lt;/FONT&gt; E&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#808080&gt;+&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;len&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;@Separator&lt;FONT color=#808080&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;from&lt;/FONT&gt; indices&lt;FONT color=#0000ff&gt;&lt;BR&gt;where&lt;/FONT&gt; E &lt;FONT color=#808080&gt;&amp;gt;&lt;/FONT&gt; S &lt;FONT color=#808080&gt;&lt;/DIV&gt;&lt;/DIV&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;select&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;substring&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;@StringToSplit&lt;FONT color=#808080&gt;,&lt;/FONT&gt;S&lt;FONT color=#808080&gt;,&lt;/FONT&gt;&lt;FONT color=#0000ff&gt; 
&lt;DIV style="MARGIN-LEFT: 40pt"&gt;case&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;when&lt;/FONT&gt; E &lt;FONT color=#808080&gt;&amp;gt;&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;len&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;@Separator&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;then&lt;/FONT&gt; e&lt;FONT color=#808080&gt;-&lt;/FONT&gt;s&lt;FONT color=#808080&gt;-&lt;/FONT&gt;&lt;FONT color=#ff00ff&gt;len&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;@Separator&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;else&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;len&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;@StringToSplit&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#808080&gt;-&lt;/FONT&gt; s &lt;FONT color=#808080&gt;+&lt;/FONT&gt; 1 &lt;FONT color=#0000ff&gt;end&lt;/FONT&gt;&lt;FONT color=#808080&gt;)&lt;/FONT&gt; String&lt;FONT color=#808080&gt;&lt;BR&gt;,&lt;/FONT&gt;S StartIndex&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;from&lt;/FONT&gt; indices &lt;FONT color=#0000ff&gt;where&lt;/FONT&gt; S &lt;FONT color=#808080&gt;&amp;gt;&lt;/FONT&gt;0&lt;FONT color=#0000ff&gt;&lt;/DIV&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Yeah, yeah, I know, such a function is an old topic and there are probably numerous solutions available, but I had the impression all were a bit outdated and created before the introduction of the CTE (Common Table Expression) in sql server 2005. Most examples either use a temporary table or return multiple result sets. &lt;BR&gt;Ideal is the use of a function, but using a temporary table in it would prevent certain&amp;nbsp;query optimizations that sql server would normally do for you (besides the small hit of creating a temptable).&amp;nbsp;Granted, these days fast computers don't require that level of optimizing, but still, in heavy workloads every detail might matter ;)&amp;nbsp; In comes the 'newly' introduced CTE functionality. That might have been around for a couple of years, but I've never really used it until recenlty :$ Whatever the case, it makes a function such as split suddenly a lot shorter.&lt;BR&gt;The function returns both the values (column name 'String' ) and the StartIndex. The Index might not be needed most of the time, but when joining, searching or selecting on the String, the column name is needed anyway, so the StartIndex won't be in the way, and it is there when it is needed. (As a small sidenote, in the case&amp;nbsp;E &lt;FONT color=#808080&gt;&amp;gt;&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;len&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;@Separator is used instead of E &amp;gt; S because the same optimizations that give the speed benefit, crashed the code on the substring()&amp;nbsp;when using criteria on the string)&lt;/P&gt;
&lt;P&gt;Some examples:&lt;/P&gt;&lt;!-- --Start of code block
--&gt;
&lt;DIV 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'"&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;!-- 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: #ffffff"&gt;&lt;FONT color=#008000&gt;--simple split comma delimited string example&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;select&lt;/FONT&gt; &lt;FONT color=#808080&gt;*&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;from&lt;/FONT&gt; Split&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;'aaa,b,cccc,dd,e,ffff,g'&lt;/FONT&gt; &lt;FONT color=#808080&gt;,&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;','&lt;/FONT&gt;&lt;FONT color=#808080&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;--when the separator is not found, no problems either&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;select&lt;/FONT&gt; &lt;FONT color=#808080&gt;*&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;from&lt;/FONT&gt; Split&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;'abcdefgh'&lt;/FONT&gt; &lt;FONT color=#808080&gt;,&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;','&lt;/FONT&gt;&lt;FONT color=#808080&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;--empty values are returned too, the list would not be complete without them (for example when handling input file lines)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;select&lt;/FONT&gt; &lt;FONT color=#808080&gt;*&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;from&lt;/FONT&gt; Split&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;',,a,,b,c,,,d'&lt;/FONT&gt; &lt;FONT color=#808080&gt;,&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;','&lt;/FONT&gt;&lt;FONT color=#808080&gt;)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;--skipping the empty values would simply be using a criterium&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;select&lt;/FONT&gt; &lt;FONT color=#808080&gt;*&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;from&lt;/FONT&gt; Split&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;',,a,,b,c,,,d'&lt;/FONT&gt; &lt;FONT color=#808080&gt;,&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;','&lt;/FONT&gt;&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;where&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;len&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;String&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#808080&gt;&amp;gt;&lt;/FONT&gt; 0&lt;BR&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;--of course, splitting with other (and longer) strings than a comma is supported too&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;select&lt;/FONT&gt; &lt;FONT color=#808080&gt;*&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;from&lt;/FONT&gt; Split&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;'aaa-&amp;gt;bb-&amp;gt;cccc-&amp;gt;d'&lt;/FONT&gt; &lt;FONT color=#808080&gt;,&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;'-&amp;gt;'&lt;/FONT&gt;&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;where&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;len&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;String&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#808080&gt;&amp;gt;&lt;/FONT&gt; 0&lt;BR&gt;&lt;FONT color=#008000&gt;&lt;BR&gt;--just a final example with some query options combined&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;select&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;rtrim&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff&gt;ltrim&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;String&lt;FONT color=#808080&gt;))&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;from&lt;/FONT&gt; Split&lt;FONT color=#808080&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;'from abc from abb from cdd from addd'&lt;/FONT&gt; &lt;FONT color=#808080&gt;,&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;'from'&lt;/FONT&gt;&lt;FONT color=#808080&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;
&lt;DIV style="MARGIN-LEFT: 20pt"&gt;where&lt;/FONT&gt; &lt;FONT color=#ff00ff&gt;ltrim&lt;/FONT&gt;&lt;FONT color=#808080&gt;(&lt;/FONT&gt;String&lt;FONT color=#808080&gt;)&lt;/FONT&gt; &lt;FONT color=#808080&gt;like&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;'a%'&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;!-- 
End of code block----&gt;&lt;img src ="http://blogs.vbcity.com/hotdog/aggbug/9085.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>0</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>2</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; &l