<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>.Net samplettes</title><link>http://blogs.vbcity.com/hotdog/category/38.aspx</link><description>Little code samples in .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>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; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt;&lt;br&gt;{&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DrawItemEventArgs&lt;/FONT&gt; DrawItemEventArgs;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; IsSelected;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Item;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Index;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; Bounds;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt; CollectionStartTime;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackListBox&lt;/FONT&gt; Owner;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; FeedbackItemInfo(&lt;FONT Color=#2b91af&gt;Feedback&lt;/FONT&gt; Item, &lt;FONT Color=#2b91af&gt;DrawItemEventArgs&lt;/FONT&gt; e, &lt;FONT Color=#2b91af&gt;DateTime&lt;/FONT&gt; CollectionStartTime, &lt;FONT Color=#2b91af&gt;FeedbackListBox&lt;/FONT&gt; Owner)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Item = Item;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.DrawItemEventArgs = e;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.IsSelected = (e.State &amp;amp &lt;FONT Color=#2b91af&gt;DrawItemState&lt;/FONT&gt;.Selected) &amp;gt 0;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Index = e.Index;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Owner = Owner;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Bounds = e.Bounds;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.CollectionStartTime = CollectionStartTime;&lt;/div&gt;}&lt;/div&gt;&lt;div style="margin-left:20pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;class&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemPainter&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; r;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FontFamily&lt;/FONT&gt; FontFamily;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; MessageArea;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt; Info;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Graphics&lt;/FONT&gt; Graphics;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; FeedbackItemPainter(&lt;FONT Color=#2b91af&gt;FeedbackItemInfo&lt;/FONT&gt; info)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;this&lt;/FONT&gt;.Info = info;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.r = info.Bounds;&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.FontFamily = info.DrawItemEventArgs.Font.FontFamily;&lt;br&gt;MessageArea = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt;(MessageOffset, r.Y, r.Width - MessageOffset, r.Height);&lt;FONT Color=#0000ff&gt;&lt;br&gt;this&lt;/FONT&gt;.Graphics = info.DrawItemEventArgs.Graphics;&lt;/div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;const&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;ExtraInfoOffset = 75,&lt;br&gt;ExtraInfoWidth = 10,&lt;br&gt;ProgressWidth = 40,&lt;br&gt;MessageOffset = 90,&lt;br&gt;TimeOffset = 32;&lt;/div&gt;&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;readonly&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; ExtraInfoButtonArea = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt;(ExtraInfoOffset, 0, ExtraInfoWidth, &lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt;.MaxValue);&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawDateTime()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DrawDateTime(Info.Index &amp;gt 0,&lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.Black);&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawDateTime(&lt;FONT Color=#0000ff&gt;bool&lt;/FONT&gt; Relative,&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;FONT Color=#008000&gt;&lt;div style="margin-left:20pt"&gt;//clear background&lt;/FONT&gt;&lt;br&gt;ClearDateTimeBackGround(&lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.White);&lt;FONT Color=#008000&gt;&lt;br&gt;//draw text&lt;/FONT&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Relative)&lt;div style="margin-left:20pt"&gt;DrawRelativeTime(Info.Item.LastUpdate.Subtract(Info.CollectionStartTime),b);&lt;FONT Color=#0000ff&gt;&lt;/div&gt;else&lt;/FONT&gt;&lt;div style="margin-left:20pt"&gt;DrawAbsoluteTime(b);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; DrawAbsoluteTime(&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.DrawString(&lt;div style="margin-left:20pt"&gt;Info.Item.DateTime.ToShortDateString() + &lt;FONT Color=#a31515&gt;&amp;quot &amp;quot&lt;/FONT&gt; + Info.Item.DateTime.ToString(&lt;FONT Color=#a31515&gt;&amp;quothh:mm.ss&amp;quot&lt;/FONT&gt;),&lt;br&gt;GetFont(6.5f), b, r.Left, r.Top + 1);&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;void&lt;/FONT&gt; DrawRelativeTime(&lt;FONT Color=#2b91af&gt;TimeSpan&lt;/FONT&gt; diff,&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.DrawString(&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;string&lt;/FONT&gt;.Format(&lt;FONT Color=#a31515&gt;&amp;quot+{0:00}:{1:00}.{2:00}.{3:000}&amp;quot&lt;/FONT&gt;,&lt;div style="margin-left:20pt"&gt;diff.Hours, diff.Minutes, diff.Seconds, diff.Milliseconds),&lt;br&gt;GetFont(7.2f)&lt;br&gt;, b, r.Left, r.Top);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Font&lt;/FONT&gt; GetFont(&lt;FONT Color=#0000ff&gt;float&lt;/FONT&gt; size)&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Font&lt;/FONT&gt;(FontFamily, size);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ClearDateTimeBackGround(&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.FillRectangle(b, DateTimeArea);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; DateTimeArea&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;get&lt;/FONT&gt;&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt;(r.Left, r.Top, r.Left + ExtraInfoOffset, r.Height);&lt;/div&gt;}&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt; GetBackgroundColor()&lt;br&gt;{&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;if&lt;/FONT&gt;(Info.IsSelected)&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:20pt"&gt;return&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt;.Blue;&lt;FONT Color=#0000ff&gt;&lt;/div&gt;return&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt;.White;&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawSelectionRectangle()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DrawSelectionRectangle(GetBackgroundColor());&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawSelectionRectangle(&lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt; c)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.DrawRectangle(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Pen&lt;/FONT&gt;(c), r);&lt;br&gt;ClearMessageBackGround(c);&lt;/div&gt;}&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; ClearMessageBackGround(&lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt; c)&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;Graphics.FillRectangle(&lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;SolidBrush&lt;/FONT&gt;(c), MessageArea);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawExtraInfoButton()&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Rectangle&lt;/FONT&gt; rectEI = ExtraInfoButtonArea;&lt;br&gt;rectEI.Y = r.Y;&lt;br&gt;rectEI.Height = r.Height;&lt;br&gt;DrawExtraInfoButton(rectEI);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawExtraInfoButton(&lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; r)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;ControlPaint&lt;/FONT&gt;.DrawButton(Graphics, r, &lt;FONT Color=#2b91af&gt;ButtonState&lt;/FONT&gt;.Normal);&lt;br&gt;r.X += 2;&lt;br&gt;Graphics.DrawString(&lt;FONT Color=#a31515&gt;&amp;quoti&amp;quot&lt;/FONT&gt;, GetFont(7), &lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.Blue, r);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawMessage()&lt;br&gt;{&lt;div style="margin-left:20pt"&gt;DrawMessage(offset);&lt;/div&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawMessage(&lt;FONT Color=#0000ff&gt;int&lt;/FONT&gt; Offset)&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Color&lt;/FONT&gt; c = Info.IsSelected ? &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt;.WhiteSmoke : &lt;FONT Color=#2b91af&gt;Color&lt;/FONT&gt;.Black;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#2b91af&gt;&lt;br&gt;Rectangle&lt;/FONT&gt; r = MessageArea;&lt;br&gt;r.X += Offset;&lt;br&gt;r.Width -= Offset;&lt;br&gt;DrawMessage(r, &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;SolidBrush&lt;/FONT&gt;(c));&lt;/div&gt;}&lt;FONT Color=#0000ff&gt;&lt;br&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; DrawMessage(&lt;FONT Color=#2b91af&gt;Rectangle&lt;/FONT&gt; r,&lt;FONT Color=#2b91af&gt;Brush&lt;/FONT&gt; b)&lt;br&gt;{&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;Font&lt;/FONT&gt; f = GetFont(7);&lt;FONT Color=#0000ff&gt;&lt;br&gt;if&lt;/FONT&gt; (Info.Item.Level &amp;gt 0)&lt;div style="margin-left:20pt"&gt;f = &lt;FONT Color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT Color=#2b91af&gt;Font&lt;/FONT&gt;(f, &lt;FONT Color=#2b91af&gt;FontStyle&lt;/FONT&gt;.Bold);&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-left:60pt"&gt;Graphics.DrawString(Info.Item.Message, f, b, r);&lt;/div&gt;&lt;div style="margin-left:40pt"&gt;}&lt;/div&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;int&lt;/FONT&gt; offset;&lt;/div&gt;&lt;br&gt;&lt;FONT Color=#0000ff&gt;&lt;div style="margin-left:40pt"&gt;public&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;virtual&lt;/FONT&gt; &lt;FONT Color=#0000ff&gt;void&lt;/FONT&gt; PaintProgress()&lt;br&gt;{&lt;FONT Color=#2b91af&gt;&lt;div style="margin-left:20pt"&gt;RectangleF&lt;/FONT&gt; rectProg = GetProgressRectangle();&lt;br&gt;rectProg.X++;&lt;br&gt;rectProg.Inflate(0, -1);&lt;br&gt;Graphics.FillRectangle(&lt;FONT Color=#2b91af&gt;Brushes&lt;/FONT&gt;.W