<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1847278434515420457</id><updated>2012-01-23T00:39:52.872-08:00</updated><category term='DataGridView'/><category term='Multimedia'/><category term='java'/><category term='Button'/><category term='php'/><category term='Menu Strip'/><category term='Adobe After Effects'/><category term='Turbo Pascal for Windows'/><category term='Article'/><category term='SQL Server'/><category term='screen capture'/><category term='XML'/><category term='Windows'/><category term='Blogger'/><category term='programing world'/><category term='Form'/><category term='Adobe Photoshop'/><category term='string'/><category term='C++'/><category term='Turbo Pascal'/><category term='Slider'/><category term='Custom Control'/><category term='VB.net'/><category term='Visual Studio 2010 Tools'/><category term='Graphics'/><category term='visual basic world'/><category term='Panel'/><category term='Adobe Premiere'/><category term='TreeView'/><category term='Database'/><category term='ComboBox'/><category term='TabControl'/><category term='Console'/><category term='internet world'/><category term='HTML'/><category term='software world'/><category term='Process'/><category term='CSharp'/><category term='TextBox'/><title type='text'>Modern Programming</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-4083182943499259895</id><published>2011-10-25T07:49:00.000-07:00</published><updated>2011-10-25T07:49:13.365-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>DOM XPath Syntax</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;h3&gt;This The Content of XML File&lt;/h3&gt;&lt;textarea style="height: 250px; width: 100%;"&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;&amp;lt;bookstore&amp;gt;&amp;lt;book&amp;gt;  &amp;lt;title lang="eng"&amp;gt;Harry Potter&amp;lt;/title&amp;gt;  &amp;lt;price&amp;gt;29.99&amp;lt;/price&amp;gt;&amp;lt;/book&amp;gt;&amp;lt;book&amp;gt;  &amp;lt;title lang="eng"&amp;gt;Learning XML&amp;lt;/title&amp;gt;  &amp;lt;price&amp;gt;39.95&amp;lt;/price&amp;gt;&amp;lt;/book&amp;gt;&amp;lt;/bookstore&amp;gt;&amp;nbsp;&lt;/textarea&gt;&lt;br /&gt;&lt;h2&gt;Selecting Nodes&lt;/h2&gt;XPath uses path expressions to select nodes in an XML document. The node is selected by following a path or steps. The most useful path expressions are listed below:&lt;br /&gt;&lt;table class="reference"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;th align="left" valign="top" width="25%"&gt;Expression&lt;/th&gt;    &lt;th align="left" valign="top"&gt;Description&lt;/th&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;&lt;i&gt;nodename&lt;/i&gt;&lt;/td&gt;    &lt;td valign="top"&gt;Selects all child nodes of the named node&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/&lt;/td&gt;    &lt;td valign="top"&gt;Selects from the root node&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//&lt;/td&gt;    &lt;td valign="top"&gt;Selects nodes in the document from the current node that  match the selection no matter where they are &lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;.&lt;/td&gt;    &lt;td valign="top"&gt;Selects the current node&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;..&lt;/td&gt;    &lt;td valign="top"&gt;Selects the parent of the current node&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;@&lt;/td&gt;    &lt;td valign="top"&gt;Selects attributes&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;In the table below we have listed some path expressions and the result of the expressions:&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;table class="reference"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;th align="left" valign="top" width="25%"&gt;Path Expression&lt;/th&gt;    &lt;th align="left" valign="top"&gt;Result&lt;/th&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;bookstore&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the child nodes of the bookstore element&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore&lt;/td&gt;    &lt;td valign="top"&gt;Selects the root element bookstore&lt;b&gt;Note:&lt;/b&gt; If the path starts with a slash ( / ) it  always represents an absolute path to an element!&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;bookstore/book&lt;/td&gt;    &lt;td valign="top"&gt;Selects all book elements that are children of bookstore&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//book&lt;/td&gt;    &lt;td valign="top"&gt;Selects all book elements no matter where they are in the  document&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;bookstore//book&lt;/td&gt;    &lt;td valign="top"&gt;Selects all book elements that are descendant of the  bookstore element, no matter where they are under the bookstore element&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//@lang&lt;/td&gt;    &lt;td valign="top"&gt;Selects all attributes that are named lang&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;hr /&gt;&lt;h2&gt;Predicates&lt;/h2&gt;Predicates are used to find a specific node or a node that contains a specific value.&lt;br /&gt;Predicates are always embedded in square brackets.&lt;br /&gt;In the table below we have listed some path expressions with predicates and the result of the expressions:&lt;br /&gt;&lt;table class="reference"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;th align="left" valign="top" width="40%"&gt;Path Expression&lt;/th&gt;    &lt;th align="left" valign="top"&gt;Result&lt;/th&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore/book[1] &lt;/td&gt;    &lt;td valign="top"&gt;Selects the first book element that is the child of the  bookstore element.&lt;b&gt;Note:&lt;/b&gt; IE5 and later has implemented that [0] should be the first node, but according to the W3C standard it should have been [1]!!&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore/book[last()]&lt;/td&gt;    &lt;td valign="top"&gt;Selects the last book element that is the child of the  bookstore element&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore/book[last()-1]&lt;/td&gt;    &lt;td valign="top"&gt;Selects the last but one book element that is the child of the  bookstore element&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore/book[position()&amp;lt;3]&lt;/td&gt;    &lt;td valign="top"&gt;Selects the first two book elements that are children of the  bookstore element&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//title[@lang]&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the title elements that have an attribute named  lang&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//title[@lang='eng']&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the title elements that have an attribute named lang  with a value of 'eng'&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore/book[price&amp;gt;35.00]&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the book elements of the bookstore element that  have a price element with a value greater than 35.00&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore/book[price&amp;gt;35.00]/title&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the title elements of the book elements of the  bookstore element that have a price element with a value greater than 35.00&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;hr /&gt;&lt;h2&gt;Selecting Unknown Nodes&lt;/h2&gt;XPath wildcards can be used to select unknown XML elements.&lt;br /&gt;&lt;table class="reference"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;th align="left" valign="top" width="25%"&gt;Wildcard&lt;/th&gt;    &lt;th align="left" valign="top"&gt;Description&lt;/th&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;*&lt;/td&gt;    &lt;td valign="top"&gt;Matches any element node&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;@*&lt;/td&gt;    &lt;td valign="top"&gt;Matches any attribute node&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;node()&lt;/td&gt;    &lt;td valign="top"&gt;Matches any node of any kind&lt;/td&gt;    &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;In the table below we have listed some path expressions and the result of the expressions:&lt;br /&gt;&lt;table class="reference"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;th align="left" valign="top" width="25%"&gt;Path Expression&lt;/th&gt;    &lt;th align="left" valign="top"&gt;Result&lt;/th&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore/*&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the child nodes of the bookstore element&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//*&lt;/td&gt;    &lt;td valign="top"&gt;Selects all elements in the document&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//title[@*]&lt;/td&gt;    &lt;td valign="top"&gt;Selects all title elements which have any attribute&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;hr /&gt;&lt;h2&gt;Selecting Several Paths&lt;/h2&gt;By using the | operator in an XPath expression you can select several paths.&lt;br /&gt;In the table below we have listed some path expressions and the result of the expressions:&lt;br /&gt;&lt;table class="reference"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;th align="left" valign="top" width="40%"&gt;Path Expression&lt;/th&gt;    &lt;th align="left" valign="top"&gt;Result&lt;/th&gt;  &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//book/title | //book/price&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the title AND price elements of all book  elements&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;//title | //price&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the title AND price elements in the document&lt;/td&gt;    &lt;/tr&gt;&lt;tr&gt;    &lt;td valign="top"&gt;/bookstore/book/title | //price&lt;/td&gt;    &lt;td valign="top"&gt;Selects all the title elements of the book element of the  bookstore element AND all the price elements in the document&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-4083182943499259895?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/4083182943499259895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/10/dom-xpath-syntax.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/4083182943499259895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/4083182943499259895'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/10/dom-xpath-syntax.html' title='DOM XPath Syntax'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-5782860968632393825</id><published>2011-09-23T22:16:00.000-07:00</published><updated>2011-09-23T22:16:59.317-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Easy Way Convert HTML to XML in PHP DOMdocument</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="font-family: inherit;"&gt;You know that this tag &lt;span style="background-color: white; color: #20124d; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;img src="xxx.jpg" /&gt;&lt;/span&gt; is not valid for XML DOM Document. if you will to load content from HTML page and you need to convert it to XML this img tag will be a big trouble. Let me to fix this problem.&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;See this sample code and you will understand how I can do it :-)&lt;/span&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color: #20124d; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #20124d; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;!--?php&lt;/p--&gt;&lt;/div&gt;&lt;div style="color: #20124d; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$ret = '&lt;img src="xxx.jpg" /&gt;';&lt;br /&gt;$x = new DOMDocument;&lt;br /&gt;$x-&amp;gt;loadHTML($ret);&lt;br /&gt;$x-&amp;gt;loadXML($x-&amp;gt;saveXML());&lt;br /&gt;echo $x-&amp;gt;childNodes-&amp;gt;item(1)-&amp;gt;childNodes-&amp;gt;item(0)-&amp;gt;childNodes-&amp;gt;item(0)-&amp;gt;getAttribute('src');&lt;/div&gt;&lt;span style="color: #20124d; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;$ret is the HTML text source&lt;br /&gt;this code is shown how to converting HTML to XML using PHP DOMdocument class.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-5782860968632393825?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/5782860968632393825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/09/easy-way-convert-html-to-xml-in-php.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/5782860968632393825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/5782860968632393825'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/09/easy-way-convert-html-to-xml-in-php.html' title='Easy Way Convert HTML to XML in PHP DOMdocument'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-6502457788536595508</id><published>2011-08-14T07:42:00.000-07:00</published><updated>2011-08-14T07:42:11.136-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>HTML Escape Character Table</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Maybe some developer was know about HTML escape string, but, they can't remember one by one about HTML escape character.. Then, maybe this HTML escape character tables will be your HTML refference:&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;table align="" border="1" cellpadding="5" cellspacing="0"&gt;&lt;thead&gt;&lt;tr&gt; &lt;th colspan="4"&gt;HTML Escape Characters&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr class="top"&gt; &lt;td&gt;&lt;i&gt;Decimal Value (&amp;amp;#DV;)&lt;/i&gt;&lt;/td&gt; &lt;td&gt;&lt;i&gt;Escape Character&lt;/i&gt;&lt;/td&gt; &lt;td&gt;&lt;i&gt;Output&lt;/i&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;0 - 031&lt;/td&gt; &lt;td&gt;None&lt;/td&gt; &lt;td&gt;Nothing&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;032&lt;/td&gt; &lt;td&gt;&amp;amp;sp; or &amp;amp;blank;&lt;/td&gt; &lt;td&gt;Blank&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;033&lt;/td&gt; &lt;td&gt;&amp;amp;excl;&lt;/td&gt; &lt;td&gt;!&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;034&lt;/td&gt; &lt;td&gt;&amp;amp;quot;&lt;/td&gt; &lt;td&gt;"&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;035&lt;/td&gt; &lt;td&gt;&amp;amp;num;&lt;/td&gt; &lt;td&gt;#&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;036&lt;/td&gt; &lt;td&gt;&amp;amp;dollar;&lt;/td&gt; &lt;td&gt;$&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;037&lt;/td&gt; &lt;td&gt;&amp;amp;percnt;&lt;/td&gt; &lt;td&gt;%&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;038&lt;/td&gt; &lt;td&gt;&amp;amp;amp;&lt;/td&gt; &lt;td&gt;&amp;amp;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;039&lt;/td&gt;  &lt;td&gt;&amp;amp;apos;&lt;/td&gt; &lt;td&gt;'&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;040&lt;/td&gt; &lt;td&gt;&amp;amp;lpar;&lt;/td&gt; &lt;td&gt;(&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;041&lt;/td&gt; &lt;td&gt;&amp;amp;rpar;&lt;/td&gt;  &lt;td&gt;)&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;042&lt;/td&gt; &lt;td&gt;&amp;amp;ast;&lt;/td&gt; &lt;td&gt;*&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;043&lt;/td&gt; &lt;td&gt;&amp;amp;plus;&lt;/td&gt; &lt;td&gt;+&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;044&lt;/td&gt; &lt;td&gt;&amp;amp;comma;&lt;/td&gt; &lt;td&gt;,&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;045&lt;/td&gt; &lt;td&gt;&amp;amp;hyphen; or − or &amp;amp;dash;&lt;/td&gt; &lt;td&gt;-&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;046&lt;/td&gt; &lt;td&gt;&amp;amp;period;&lt;/td&gt; &lt;td&gt;.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;047&lt;/td&gt; &lt;td&gt;&amp;amp;sol;&lt;/td&gt; &lt;td&gt;/&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td colspan="3"&gt;048-057 = digits 0-9&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;058&lt;/td&gt; &lt;td&gt;&amp;amp;colon;&lt;/td&gt; &lt;td&gt;:&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;059&lt;/td&gt; &lt;td&gt;&amp;amp;semi;&lt;/td&gt;  &lt;td&gt;;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;060&lt;/td&gt; &lt;td&gt;&amp;lt;&lt;/td&gt; &lt;td&gt;&amp;lt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;061&lt;/td&gt; &lt;td&gt;&amp;amp;equals;&lt;/td&gt; &lt;td&gt;=&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;062&lt;/td&gt; &lt;td&gt;&amp;gt;&lt;/td&gt; &lt;td&gt;&amp;gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;063&lt;/td&gt; &lt;td&gt;&amp;amp;quest;&lt;/td&gt; &lt;td&gt;?&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;064&lt;/td&gt;  &lt;td&gt;&amp;amp;commat;&lt;/td&gt; &lt;td&gt;@&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td colspan="3"&gt;065 - 090 = letters A - Z&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;091&lt;/td&gt; &lt;td&gt;&amp;amp;lsqb;&lt;/td&gt; &lt;td&gt;[&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;092&lt;/td&gt; &lt;td&gt;&amp;amp;bsol;&lt;/td&gt; &lt;td&gt;\&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;093&lt;/td&gt; &lt;td&gt;&amp;amp;rsqb;&lt;/td&gt; &lt;td&gt;]&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;094&lt;/td&gt; &lt;td&gt;ˆ or &amp;amp;caret;&lt;/td&gt; &lt;td&gt;^&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;095&lt;/td&gt; &lt;td&gt;&amp;amp;lowbar;&lt;/td&gt; &lt;td&gt;_&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;096&lt;/td&gt; &lt;td&gt;None (grave accent/back apostrophe)&lt;/td&gt; &lt;td&gt;`&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td colspan="3"&gt;097 - 122 = letters a - z&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;123&lt;/td&gt; &lt;td&gt;&amp;amp;lcub;&lt;/td&gt; &lt;td&gt;{&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;124&lt;/td&gt; &lt;td&gt;&amp;amp;verbar;&lt;/td&gt; &lt;td&gt;|&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;125&lt;/td&gt; &lt;td&gt;&amp;amp;rcub;&lt;/td&gt; &lt;td&gt;}&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;126&lt;/td&gt; &lt;td&gt;&amp;amp;tilde; or &amp;amp;sim;&lt;/td&gt; &lt;td&gt;~&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;127&lt;/td&gt; &lt;td&gt;None (delete)&lt;/td&gt; &lt;td&gt;None&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td colspan="3"&gt;128 - 159 = unused (MS specific)&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;160&lt;/td&gt; &lt;td&gt;&amp;amp;nbsp;&lt;/td&gt; &lt;td&gt;non-breaking space&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;161&lt;/td&gt; &lt;td&gt;&amp;amp;iexcl;&lt;/td&gt;  &lt;td&gt;¡&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;162&lt;/td&gt; &lt;td&gt;&amp;amp;cent;&lt;/td&gt; &lt;td&gt;¢&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;163&lt;/td&gt; &lt;td&gt;&amp;amp;pound;&lt;/td&gt; &lt;td&gt;£&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;164&lt;/td&gt; &lt;td&gt;&amp;amp;curren;&lt;/td&gt; &lt;td&gt;¤&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;165&lt;/td&gt; &lt;td&gt;&amp;amp;yen;&lt;/td&gt; &lt;td&gt;¥&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;166&lt;/td&gt; &lt;td&gt;&amp;amp;brvbar; or &amp;amp;brkbar;&lt;/td&gt; &lt;td&gt;¦&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;167&lt;/td&gt; &lt;td&gt;&amp;amp;sect;&lt;/td&gt; &lt;td&gt;§&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;168&lt;/td&gt; &lt;td&gt;&amp;amp;uml; or &amp;amp;die;&lt;/td&gt; &lt;td&gt;¨&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;169&lt;/td&gt; &lt;td&gt;&amp;amp;copy;&lt;/td&gt; &lt;td&gt;©&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;170&lt;/td&gt; &lt;td&gt;&amp;amp;ordf;&lt;/td&gt; &lt;td&gt;ª&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;171&lt;/td&gt; &lt;td&gt;&amp;amp;laquo;&lt;/td&gt; &lt;td&gt;«&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;172&lt;/td&gt; &lt;td&gt;&amp;amp;not;&lt;/td&gt; &lt;td&gt;¬&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;173&lt;/td&gt; &lt;td&gt;&amp;amp;shy; (soft hyphen)&lt;/td&gt; &lt;td&gt;None&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;174&lt;/td&gt;  &lt;td&gt;&amp;amp;reg;&lt;/td&gt; &lt;td&gt;®&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;175&lt;/td&gt; &lt;td&gt;&amp;amp;macr; or &amp;amp;hibar;&lt;/td&gt; &lt;td&gt;¯&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;176&lt;/td&gt;  &lt;td&gt;&amp;amp;deg;&lt;/td&gt; &lt;td&gt;°&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;177&lt;/td&gt; &lt;td&gt;&amp;amp;plusmn;&lt;/td&gt; &lt;td&gt;±&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;178&lt;/td&gt; &lt;td&gt;&amp;amp;sup2;&lt;/td&gt;  &lt;td&gt;²&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;179&lt;/td&gt; &lt;td&gt;&amp;amp;sup3;&lt;/td&gt; &lt;td&gt;³&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;180&lt;/td&gt; &lt;td&gt;&amp;amp;acute;&lt;/td&gt; &lt;td&gt;´&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;181&lt;/td&gt; &lt;td&gt;&amp;amp;micro;&lt;/td&gt; &lt;td&gt;µ&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;182&lt;/td&gt; &lt;td&gt;&amp;amp;para;&lt;/td&gt; &lt;td&gt;¶&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;183&lt;/td&gt; &lt;td&gt;&amp;amp;middot;&lt;/td&gt; &lt;td&gt;·&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;184&lt;/td&gt; &lt;td&gt;&amp;amp;cedil;&lt;/td&gt; &lt;td&gt;¸&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;  &lt;td&gt;185&lt;/td&gt; &lt;td&gt;&amp;amp;sup1;&lt;/td&gt; &lt;td&gt;¹&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;186&lt;/td&gt; &lt;td&gt;&amp;amp;ordm;&lt;/td&gt; &lt;td&gt;º&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;187&lt;/td&gt;  &lt;td&gt;&amp;amp;raquo;&lt;/td&gt; &lt;td&gt;»&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;188&lt;/td&gt; &lt;td&gt;&amp;amp;frac14;&lt;/td&gt; &lt;td&gt;¼&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;189&lt;/td&gt; &lt;td&gt;&amp;amp;frac12; or &amp;amp;half;&lt;/td&gt;  &lt;td&gt;½&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;190&lt;/td&gt; &lt;td&gt;&amp;amp;frac34;&lt;/td&gt; &lt;td&gt;¾&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;191&lt;/td&gt; &lt;td&gt;&amp;amp;iquest;&lt;/td&gt; &lt;td&gt;¿&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-6502457788536595508?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/6502457788536595508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/08/maybe-some-developer-was-know-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/6502457788536595508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/6502457788536595508'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/08/maybe-some-developer-was-know-about.html' title='HTML Escape Character Table'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-1201982508636672838</id><published>2011-08-09T15:30:00.000-07:00</published><updated>2011-08-09T15:30:04.390-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Share Url HTML Code for Blogger (Social Bookmarking)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;b style="font-size: large;"&gt;Bibsonomy&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.bibsonomy.org/ShowBookmarkEntry?c=b&amp;amp;jump=yes&amp;amp;url=[URL]&amp;amp;description=[EXCERPT]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Blogmarks&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://blogmarks.net/my/new.php? title=[TEXT TITLE]&amp;amp;url=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Blinklist&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;amp;Url=[URL]&amp;amp;Title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Delicious&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://delicious.com/post?url=[URL]&amp;amp;title=[TEXT TITLE]¬es=[EXCERPT]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Design Bump&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.designbump.com/submit?url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;&lt;/b&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b style="font-size: large;"&gt;Design Float&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.designfloat.com/submit.php?url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Design Moo&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.designmoo.com/submit?url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Digg&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://digg.com/submit?phase=2&amp;amp;url=[URL]&amp;amp;title=[TEXT TITLE]&amp;amp;bodytext=[EXCERPT]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Diigo&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.diigo.com/post?url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Dzone&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.dzone.com/links/add.html?url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Facebook&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.facebook.com/share.php?u=[URL]&amp;amp;t=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Fark&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://cgi.fark.com/cgi/fark/farkit.pl?h=[TEXT TITLE]&amp;amp;u=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Friendfeed&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.friendfeed.com/share?title=[TEXT TITLE]&amp;amp;link=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Folkd&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.folkd.com/submit/[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Google Bookmarks&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.google.com/bookmarks/mark?op=edit&amp;amp;bkmk=[URL]&amp;amp;title=[TEXT TITLE]&amp;amp;annotation=[EXCERPT]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Hacker News&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://news.ycombinator.com/submitlink?u=[URL]&amp;amp;t=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;HaoHao&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.haohaoreport.com/submit.php?url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Identi.ca&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://identi.ca/notice/new?status_textarea=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;IndianPad&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.indianpad.com/submit.php?url=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Linked In&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.linkedin.com/shareArticle?mini=true&amp;amp;url=[URL]&amp;amp;title=[TEXT TITLE]&amp;amp;summary=[EXCERPT]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Live Favorites&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Mister Wong&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.mister-wong.com/addurl/?bm_url=[URL]&amp;amp;bm_description=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Mixx&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.mixx.com/submit?page_url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;MySpace&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.myspace.com/Modules/PostTo/Pages/?u=[URL]&amp;amp;t=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Netvibes&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.netvibes.com/share?title=[TEXT TITLE]&amp;amp;url=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Newsvine&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.newsvine.com/_tools/seed&amp;amp;save?u=[URL]&amp;amp;h=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Ping.fm&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://ping.fm/ref/?link=[URL]&amp;amp;title=[TEXT TITLE]&amp;amp;body=[EXCERPT]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Posterous&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://posterous.com/share?linkto=[URL]&amp;amp;title=[TEXT TITLE]&amp;amp;selection=[EXCERPT]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Propeller&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.propeller.com/submit/?url=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Reddit&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://reddit.com/submit?url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Scoopeo&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.scoopeo.com/scoop/new?newurl=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Simpy&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://simpy.com/simpy/LinkAdd.do? title=[TEXT TITLE]&amp;amp;href=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Slashdot&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://slashdot.org/bookmark.pl?title=[TEXT TITLE]&amp;amp;url=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;SocialNews&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.socialnews.biz/submit?url=[URL]&amp;amp;title=[TEXT TITLE] ?&amp;gt;&lt;/div&gt;&lt;b style="font-size: large;"&gt;Sphere&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.sphere.com/search?q=sphereit:[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Sphinn&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://sphinn.com/index.php?c=post&amp;amp;m=submit&amp;amp;link=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Spurl&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.spurl.net/spurl.php? url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Squidoo&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.squidoo.com/lensmaster/bookmark?[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;StumbleUpon&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.stumbleupon.com/submit?url=[URL]&amp;amp;title=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Technorati&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://technorati.com/faves?add=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Tipd&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://tipd.com/submit.php?url=[URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Tumblr&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.tumblr.com/share?v=3&amp;amp;u=[URL]&amp;amp;t=[TEXT TITLE]&amp;amp;s=[EXCERPT]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Twitter&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://twitter.com/home?status=[TEXT TITLE] - [URL]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Wink&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://www.wink.com/_/tag? url=[URL]&amp;amp;doctitle=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Yahoo Bookmarks&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://bookmarks.yahoo.com/toolbar/savebm?u=[URL]&amp;amp;t=[TEXT TITLE]&lt;/div&gt;&lt;b style="font-size: large;"&gt;Yahoo Buzz&lt;/b&gt;&lt;br /&gt;&lt;div style="color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://buzz.yahoo.com/buzz?targetUrl=[URL]&amp;amp;headline=[TEXT TITLE]&amp;amp;summary==[EXCERPT]&lt;/div&gt;&lt;h4&gt;Are You Know About Social Bookmarking?&lt;/h4&gt;Social bookmarking is a method for Internet users to organize, store, manage and search for bookmarks of resources online. Unlike file sharing, the resources themselves aren't shared, merely bookmarks that reference them.&lt;br /&gt;&lt;br /&gt;Descriptions may be added to these bookmarks in the form of metadata, so users may understand the content of the resource without first needing to download it for themselves. Such descriptions may be free text comments, votes in favour of or against its quality, or tags that collectively or collaboratively become a folksonomy. Folksonomy is also called social tagging, "the process by which many users add metadata in the form of keywords to shared content".&lt;br /&gt;&lt;br /&gt;In a social bookmarking system, users save links to web pages that they want to remember and/or share. These bookmarks are usually public, and can be saved privately, shared only with specified people or groups, shared only inside certain networks, or another combination of public and private domains. The allowed people can usually view these bookmarks chronologically, by category or tags, or via a search engine.&lt;br /&gt;&lt;br /&gt;Most social bookmark services encourage users to organize their bookmarks with informal tags instead of the traditional browser-based system of folders, although some services feature categories/folders or a combination of folders and tags. They also enable viewing bookmarks associated with a chosen tag, and include information about the number of users who have bookmarked them. Some social bookmarking services also draw inferences from the relationship of tags to create clusters of tags or bookmarks.&lt;br /&gt;&lt;br /&gt;Many social bookmarking services provide web feeds for their lists of bookmarks, including lists organized by tags. This allows subscribers to become aware of new bookmarks as they are saved, shared, and tagged by other users.&lt;br /&gt;&lt;br /&gt;As these services have matured and grown more popular, they have added extra features such as ratings and comments on bookmarks, the ability to import and export bookmarks from browsers, emailing of bookmarks, web annotation, and groups or other social network features[&lt;a href="http://en.wikipedia.org/wiki/Social_bookmarking"&gt;wikipedia.org&lt;/a&gt;]&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-1201982508636672838?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/1201982508636672838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/08/share-url-html-code-for-blogger-social.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1201982508636672838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1201982508636672838'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/08/share-url-html-code-for-blogger-social.html' title='Share Url HTML Code for Blogger (Social Bookmarking)'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-2264563421751522168</id><published>2011-08-02T02:14:00.000-07:00</published><updated>2011-08-02T02:14:17.157-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Form'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><title type='text'>Custom Form Appearance With Standard Behaviour</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-sGkKZoVZfbI/Tje_sKtFY7I/AAAAAAAAARw/e498eAoEBYk/s1600/Custom+Form+Appearance+With+Standard+Behaviour.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="340" src="http://4.bp.blogspot.com/-sGkKZoVZfbI/Tje_sKtFY7I/AAAAAAAAARw/e498eAoEBYk/s400/Custom+Form+Appearance+With+Standard+Behaviour.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;There are several ways to Custom Paint a form, but each has their flaw.&lt;br /&gt;This method starts with a standard Form that has its BorderStyle set to None.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We also create a WindowMenu class which pops up in place of the standard WindowMenu. We do this because restoring the standard WindowMenu causes the standard Window Size options to be lost and these cannot be restored without adding the sizable border which we do not want to see.&lt;br /&gt;&lt;br /&gt;To get the standard Size and Move options we simply create GraphicsPaths that react to the mouse in the same way as the standard Non-Client form parts do. To achieve this we simply intercept and manipulate a few standard Windows messages. For this article I have not used any Interop calls, but you may get more flexible results by using SendMessage() and SetMenuItemBitmaps() rather than sending WndProc() calls and OwnerDrawing the custom WindowMenu.&lt;br /&gt;&lt;br /&gt;The example here simply paints the defined paths in order that you can physically see how this method works, it is not meant to be pretty. You are not restricted to where the paths are placed or what shape they are, you dont even have to stick to them exactly when painting, the paths are simply there for mouse interaction.&lt;br /&gt;The only real problem with this method is that if you set AutoScroll to true then Scrollbars will appear on top of the fake NonClientArea. A simple fix for this is to dock a Panel to the form (set the forms margins as appropiate) and use this as the Form Client. &lt;br /&gt;&lt;br /&gt;You'll need to add images to your projects resources for the buttons. You can download the images that I used &lt;a href="http://dotnetrix.co.uk/download/Resources.zip"&gt;here...&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Imports System.Drawing.Drawing2D&lt;br /&gt;Imports System.Security.Permissions&lt;br /&gt;Public Class Form1&lt;br /&gt;  Inherits System.Windows.Forms.Form&lt;br /&gt;  'Form overrides dispose to clean up the component list.&lt;br /&gt;  &amp;lt;System.Diagnostics.DebuggerNonUserCode()&amp;gt; _&lt;br /&gt;  Protected Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;    Try&lt;br /&gt;    If disposing AndAlso components IsNot Nothing Then&lt;br /&gt;      components.Dispose()&lt;br /&gt;    End If&lt;br /&gt;    Finally&lt;br /&gt;    MyBase.Dispose(disposing)&lt;br /&gt;    End Try&lt;br /&gt;  End Sub&lt;br /&gt;  'Required by the Windows Form Designer&lt;br /&gt;  Private components As System.ComponentModel.IContainer&lt;br /&gt;  'NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;  'It can be modified using the Windows Form Designer.  &lt;br /&gt;  'Do not modify it using the code editor.&lt;br /&gt;  &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; _&lt;br /&gt;  Private Sub InitializeComponent()&lt;br /&gt;    Me.Panel1 = New System.Windows.Forms.Panel&lt;br /&gt;    Me.SuspendLayout()&lt;br /&gt;    '&lt;br /&gt;    'Panel1&lt;br /&gt;    '&lt;br /&gt;    Me.Panel1.AutoScroll = True&lt;br /&gt;    Me.Panel1.AutoScrollMinSize = New System.Drawing.Size(340, 300)&lt;br /&gt;    Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill&lt;br /&gt;    Me.Panel1.Location = New System.Drawing.Point(7, 6)&lt;br /&gt;    Me.Panel1.Margin = New System.Windows.Forms.Padding(4)&lt;br /&gt;    Me.Panel1.Name = "Panel1"&lt;br /&gt;    Me.Panel1.Size = New System.Drawing.Size(375, 319)&lt;br /&gt;    Me.Panel1.TabIndex = 0&lt;br /&gt;    '&lt;br /&gt;    'Form1&lt;br /&gt;    '&lt;br /&gt;    Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!)&lt;br /&gt;    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font&lt;br /&gt;    Me.BackColor = System.Drawing.Color.LemonChiffon&lt;br /&gt;    Me.ClientSize = New System.Drawing.Size(389, 331)&lt;br /&gt;    Me.Controls.Add(Me.Panel1)&lt;br /&gt;    Me.DoubleBuffered = True&lt;br /&gt;    Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None&lt;br /&gt;    Me.MinimumSize = New System.Drawing.Size(133, 62)&lt;br /&gt;    Me.Name = "Form1"&lt;br /&gt;    Me.Padding = New System.Windows.Forms.Padding(7, 6, 7, 6)&lt;br /&gt;    Me.Text = "CustomForm"&lt;br /&gt;    Me.ResumeLayout(False)&lt;br /&gt;  End Sub&lt;br /&gt;  Friend WithEvents Panel1 As System.Windows.Forms.Panel&lt;br /&gt;  Private leftEdge, topEdge, bottomEdge, rightEdge, _&lt;br /&gt;  topLeftEdge, topRightEdge, bottomLeftEdge, bottomRightEdge, _&lt;br /&gt;  titleBar, closeButton, maxButton, minButton, iconButton As GraphicsPath&lt;br /&gt;  Private formActive As Boolean = True&lt;br /&gt;  Private ButtonTip As ToolTip&lt;br /&gt;  Private SystemMenu As WindowMenu&lt;br /&gt;  Public Sub New()&lt;br /&gt;    ' This call is required by the Windows Form Designer.&lt;br /&gt;    InitializeComponent()&lt;br /&gt;    ' Add any initialization after the InitializeComponent() call.&lt;br /&gt;    Me.leftEdge = New GraphicsPath()&lt;br /&gt;    Me.topEdge = New GraphicsPath()&lt;br /&gt;    Me.rightEdge = New GraphicsPath()&lt;br /&gt;    Me.bottomEdge = New GraphicsPath()&lt;br /&gt;    Me.topLeftEdge = New GraphicsPath()&lt;br /&gt;    Me.topRightEdge = New GraphicsPath()&lt;br /&gt;    Me.bottomLeftEdge = New GraphicsPath()&lt;br /&gt;    Me.bottomRightEdge = New GraphicsPath()&lt;br /&gt;    Me.titleBar = New GraphicsPath()&lt;br /&gt;    Me.closeButton = New GraphicsPath()&lt;br /&gt;    Me.maxButton = New GraphicsPath()&lt;br /&gt;    Me.minButton = New GraphicsPath()&lt;br /&gt;    Me.iconButton = New GraphicsPath()&lt;br /&gt;    BuildPaths()&lt;br /&gt;    Me.MaximizedBounds = Screen.GetWorkingArea(Me)&lt;br /&gt;    Me.Padding = New Padding(5, titleBar.GetBounds().Height + 7, 5, 5)&lt;br /&gt;    Me.SystemMenu = New WindowMenu(Me)&lt;br /&gt;    AddHandler Me.SystemMenu.SystemEvent, AddressOf SystemMenu_SystemEvent&lt;br /&gt;    ButtonTip = New ToolTip()&lt;br /&gt;  End Sub&lt;br /&gt;  Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams&lt;br /&gt;    Get&lt;br /&gt;    Const WS_MINIMIZEBOX As Int32 = &amp;amp;H20000&lt;br /&gt;    Dim cParams As System.Windows.Forms.CreateParams = MyBase.CreateParams&lt;br /&gt;    cParams.Style = cParams.Style Or WS_MINIMIZEBOX&lt;br /&gt;    Return cParams&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize&lt;br /&gt;    If (Me.Created) Then&lt;br /&gt;    BuildPaths()&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;    Me.ButtonTip.SetToolTip(Me, "")&lt;br /&gt;    End If&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint&lt;br /&gt;    e.Graphics.FillPath(Brushes.Orange, leftEdge)&lt;br /&gt;    e.Graphics.FillPath(Brushes.Orange, topEdge)&lt;br /&gt;    e.Graphics.FillPath(Brushes.Orange, rightEdge)&lt;br /&gt;    e.Graphics.FillPath(Brushes.Orange, bottomEdge)&lt;br /&gt;    e.Graphics.FillPath(Brushes.Coral, topLeftEdge)&lt;br /&gt;    e.Graphics.FillPath(Brushes.Coral, topRightEdge)&lt;br /&gt;    e.Graphics.FillPath(Brushes.Coral, bottomLeftEdge)&lt;br /&gt;    e.Graphics.FillPath(Brushes.Coral, bottomRightEdge)&lt;br /&gt;    If (Not Me.formActive) Then&lt;br /&gt;    e.Graphics.FillRectangle(Brushes.Silver, Rectangle.Round(titleBar.GetBounds()))&lt;br /&gt;    End If&lt;br /&gt;    Dim rc As Rectangle = Rectangle.Round(iconButton.GetBounds())&lt;br /&gt;    Using bm As Bitmap = IIf(Me.TopMost, My.Resources.Pin, My.Resources.UnPin)&lt;br /&gt;    bm.MakeTransparent(Color.Magenta)&lt;br /&gt;    e.Graphics.DrawImage(bm, rc)&lt;br /&gt;    End Using&lt;br /&gt;    rc = Rectangle.Round(minButton.GetBounds())&lt;br /&gt;    Using bm As Bitmap = My.Resources.Min&lt;br /&gt;    bm.MakeTransparent(Color.Magenta)&lt;br /&gt;    e.Graphics.DrawImage(bm, rc)&lt;br /&gt;    End Using&lt;br /&gt;    rc = Rectangle.Round(maxButton.GetBounds())&lt;br /&gt;    Using bm As Bitmap = IIf(Me.WindowState = FormWindowState.Normal, My.Resources.Max, My.Resources.Restore)&lt;br /&gt;    bm.MakeTransparent(Color.Magenta)&lt;br /&gt;    e.Graphics.DrawImage(bm, rc)&lt;br /&gt;    End Using&lt;br /&gt;    rc = Rectangle.Round(closeButton.GetBounds())&lt;br /&gt;    Using bm As Bitmap = My.Resources.Close&lt;br /&gt;    bm.MakeTransparent(Color.Magenta)&lt;br /&gt;    e.Graphics.DrawImage(bm, rc)&lt;br /&gt;    End Using&lt;br /&gt;    Using myPen As Pen = New Pen(Color.Orange, 2)&lt;br /&gt;    rc = Me.DisplayRectangle&lt;br /&gt;    e.Graphics.DrawLine(myPen, rc.Left, rc.Top - 2, rc.Right, rc.Top - 2)&lt;br /&gt;    End Using&lt;br /&gt;    Dim textRect As RectangleF = titleBar.GetBounds()&lt;br /&gt;    textRect.X += iconButton.GetBounds().Width + 3&lt;br /&gt;    textRect.Width = minButton.GetBounds().Left - textRect.Left&lt;br /&gt;    TextRenderer.DrawText(e.Graphics, Me.Text, SystemFonts.CaptionFont, Rectangle.Round(textRect), Color.DarkGoldenrod, TextFormatFlags.EndEllipsis Or TextFormatFlags.VerticalCenter)&lt;br /&gt;  End Sub&lt;br /&gt;  Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)&lt;br /&gt;    MyBase.OnTextChanged(e)&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub BuildPaths()&lt;br /&gt;    Dim edgeSize As Int32 = SystemInformation.CaptionHeight + 2&lt;br /&gt;    Dim buttonSize As Int32 = SystemFonts.CaptionFont.Height&lt;br /&gt;    Dim buttonPadding As Int32 = 2&lt;br /&gt;    'Left Sizing Edge&lt;br /&gt;    leftEdge.Reset()&lt;br /&gt;    leftEdge.AddRectangle(New Rectangle(0, edgeSize, 5, Me.Height - (edgeSize * 2)))&lt;br /&gt;    'Top Sizing Edge&lt;br /&gt;    topEdge.Reset()&lt;br /&gt;    topEdge.AddRectangle(New Rectangle(edgeSize, 0, Me.Width - (edgeSize * 2), 5))&lt;br /&gt;    'Right Sizing Edge&lt;br /&gt;    rightEdge.Reset()&lt;br /&gt;    rightEdge.AddRectangle(New Rectangle(Me.Width - 5, edgeSize, 5, Me.Height - (edgeSize * 2)))&lt;br /&gt;    'Bottom Sizing Edge&lt;br /&gt;    bottomEdge.Reset()&lt;br /&gt;    bottomEdge.AddRectangle(New Rectangle(edgeSize, Me.Height - 5, Me.Width - (edgeSize * 2), 5))&lt;br /&gt;    'Top-Left Sizing Edge&lt;br /&gt;    topLeftEdge.Reset()&lt;br /&gt;    topLeftEdge.AddRectangle(New Rectangle(0, 0, edgeSize, edgeSize))&lt;br /&gt;    topLeftEdge.AddRectangle(New Rectangle(5, 5, edgeSize - 5, edgeSize - 5))&lt;br /&gt;    'Top-Right Sizing Edge&lt;br /&gt;    topRightEdge.Reset()&lt;br /&gt;    topRightEdge.AddRectangle(New Rectangle(Me.Width - edgeSize, 0, edgeSize, edgeSize))&lt;br /&gt;    topRightEdge.AddRectangle(New Rectangle(Me.Width - edgeSize, 5, edgeSize - 5, edgeSize - 5))&lt;br /&gt;    'Bottom-Left Sizing Edge&lt;br /&gt;    bottomLeftEdge.Reset()&lt;br /&gt;    bottomLeftEdge.AddRectangle(New Rectangle(0, Me.Height - edgeSize, edgeSize, edgeSize))&lt;br /&gt;    bottomLeftEdge.AddRectangle(New Rectangle(5, Me.Height - edgeSize, edgeSize - 5, edgeSize - 5))&lt;br /&gt;    'Bottom-Right Sizing Edge&lt;br /&gt;    bottomRightEdge.Reset()&lt;br /&gt;    bottomRightEdge.AddRectangle(New Rectangle(Me.Width - edgeSize, Me.Height - edgeSize, edgeSize, edgeSize))&lt;br /&gt;    bottomRightEdge.AddRectangle(New Rectangle(Me.Width - edgeSize, Me.Height - edgeSize, edgeSize - 5, edgeSize - 5))&lt;br /&gt;    'Close Button&lt;br /&gt;    closeButton.Reset()&lt;br /&gt;    closeButton.AddRectangle(New Rectangle(Me.Width - 5 - (buttonSize + buttonPadding), 8, buttonSize, buttonSize))&lt;br /&gt;    'Maximize Button&lt;br /&gt;    maxButton.Reset()&lt;br /&gt;    maxButton.AddRectangle(New Rectangle(Me.Width - 5 - ((buttonSize + buttonPadding) * 2), 8, buttonSize, buttonSize))&lt;br /&gt;    'Minimize Button&lt;br /&gt;    minButton.Reset()&lt;br /&gt;    minButton.AddRectangle(New Rectangle(Me.Width - 5 - ((buttonSize + buttonPadding) * 3), 8, buttonSize, buttonSize))&lt;br /&gt;    'Window Menu Button (Icon)&lt;br /&gt;    iconButton.Reset()&lt;br /&gt;    iconButton.AddRectangle(New Rectangle(8, 8, buttonSize, buttonSize))&lt;br /&gt;    'TitleBar&lt;br /&gt;    titleBar.Reset()&lt;br /&gt;    titleBar.AddRectangle(New Rectangle(5, 5, Me.Width - 10, edgeSize - 5))&lt;br /&gt;    'Remove Titlebar Buttons from TitleBar Path&lt;br /&gt;    titleBar.AddPath(closeButton, False)&lt;br /&gt;    titleBar.AddPath(maxButton, False)&lt;br /&gt;    titleBar.AddPath(minButton, False)&lt;br /&gt;    titleBar.AddPath(iconButton, False)&lt;br /&gt;  End Sub&lt;br /&gt;  &amp;lt;PermissionSet(SecurityAction.Demand, Name:="FullTrust")&amp;gt; _&lt;br /&gt;  Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;br /&gt;    If (Me.WindowState = FormWindowState.Maximized) Then&lt;br /&gt;    If (m.Msg = User32.WM_SYSCOMMAND AndAlso _&lt;br /&gt;        m.WParam.ToInt32() = User32.SysCommand.SC_MOVE OrElse _&lt;br /&gt;        m.Msg = User32.NCMouseMessage.WM_NCLBUTTONDOWN AndAlso _&lt;br /&gt;        m.WParam.ToInt32() = User32.NCHitTestResult.HTCAPTION) Then&lt;br /&gt;      m.Msg = User32.WM_NULL&lt;br /&gt;    End If&lt;br /&gt;    End If&lt;br /&gt;    MyBase.WndProc(m)&lt;br /&gt;    Select Case (m.Msg)&lt;br /&gt;    Case User32.WM_GETSYSMENU&lt;br /&gt;      Me.SystemMenu.Show(Me, Me.PointToClient(New Point(m.LParam.ToInt32())))&lt;br /&gt;    Case User32.WM_NCACTIVATE&lt;br /&gt;      Me.formActive = m.WParam.ToInt32() &amp;lt;&amp;gt; 0&lt;br /&gt;      Me.Invalidate()&lt;br /&gt;    Case User32.WM_NCHITTEST&lt;br /&gt;      m.Result = OnNonClientHitTest(m.LParam)&lt;br /&gt;    Case User32.NCMouseMessage.WM_NCLBUTTONUP&lt;br /&gt;      OnNonClientLButtonUp(m.LParam)&lt;br /&gt;    Case User32.NCMouseMessage.WM_NCRBUTTONUP&lt;br /&gt;      OnNonClientRButtonUp(m.LParam)&lt;br /&gt;    Case User32.NCMouseMessage.WM_NCMOUSEMOVE&lt;br /&gt;      OnNonClientMouseMove(m.LParam)&lt;br /&gt;    End Select&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub OnNonClientLButtonUp(ByVal lParam As IntPtr)&lt;br /&gt;    Dim code As User32.SysCommand = User32.SysCommand.SC_DEFAULT&lt;br /&gt;    Dim point As Point = Me.PointToClient(New Point(lParam.ToInt32()))&lt;br /&gt;    If (Me.iconButton.IsVisible(point)) Then&lt;br /&gt;    Me.TopMost = Not Me.TopMost&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;    Else&lt;br /&gt;    If (Me.closeButton.IsVisible(point)) Then&lt;br /&gt;      code = User32.SysCommand.SC_CLOSE&lt;br /&gt;    ElseIf (Me.maxButton.IsVisible(point)) Then&lt;br /&gt;      code = IIf(Me.WindowState = FormWindowState.Normal, User32.SysCommand.SC_MAXIMIZE, User32.SysCommand.SC_RESTORE)&lt;br /&gt;    ElseIf (Me.minButton.IsVisible(point)) Then&lt;br /&gt;      code = User32.SysCommand.SC_MINIMIZE&lt;br /&gt;    End If&lt;br /&gt;    SendNCWinMessage(User32.WM_SYSCOMMAND, New IntPtr(code), IntPtr.Zero)&lt;br /&gt;    End If&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub OnNonClientRButtonUp(ByVal lParam As IntPtr)&lt;br /&gt;    If (Me.titleBar.IsVisible(Me.PointToClient(New Point(lParam.ToInt32())))) Then&lt;br /&gt;    SendNCWinMessage(User32.WM_GETSYSMENU, IntPtr.Zero, lParam)&lt;br /&gt;    End If&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub OnNonClientMouseMove(ByVal lParam As IntPtr)&lt;br /&gt;    Dim point As Point = Me.PointToClient(New Point(lParam.ToInt32()))&lt;br /&gt;    Dim tooltip As String&lt;br /&gt;    If (Me.closeButton.IsVisible(point)) Then&lt;br /&gt;    tooltip = "Close"&lt;br /&gt;    ElseIf (Me.maxButton.IsVisible(point)) Then&lt;br /&gt;    tooltip = IIf(Me.WindowState = FormWindowState.Normal, "Maximize", "Restore")&lt;br /&gt;    ElseIf (Me.minButton.IsVisible(point)) Then&lt;br /&gt;    tooltip = "Minimize"&lt;br /&gt;    ElseIf (Me.iconButton.IsVisible(point)) Then&lt;br /&gt;    tooltip = IIf(Me.TopMost, "Un-Pin", "Pin")&lt;br /&gt;    Else&lt;br /&gt;    tooltip = String.Empty&lt;br /&gt;    End If&lt;br /&gt;    If (ButtonTip.GetToolTip(Me) &amp;lt;&amp;gt; tooltip) Then&lt;br /&gt;    ButtonTip.SetToolTip(Me, tooltip)&lt;br /&gt;    End If&lt;br /&gt;  End Sub&lt;br /&gt;  Private Function OnNonClientHitTest(ByVal lParam As IntPtr) As IntPtr&lt;br /&gt;    Dim result As User32.NCHitTestResult = User32.NCHitTestResult.HTCLIENT&lt;br /&gt;    Dim point As Point = Me.PointToClient(New Point(lParam.ToInt32()))&lt;br /&gt;    If (Me.titleBar.IsVisible(point)) Then&lt;br /&gt;    result = User32.NCHitTestResult.HTCAPTION&lt;br /&gt;    End If&lt;br /&gt;    If (Me.WindowState = FormWindowState.Normal) Then&lt;br /&gt;    If (Me.topLeftEdge.IsVisible(point)) Then&lt;br /&gt;      result = User32.NCHitTestResult.HTTOPLEFT&lt;br /&gt;    ElseIf (Me.topEdge.IsVisible(point)) Then&lt;br /&gt;      result = User32.NCHitTestResult.HTTOP&lt;br /&gt;    ElseIf (Me.topRightEdge.IsVisible(point)) Then&lt;br /&gt;      result = User32.NCHitTestResult.HTTOPRIGHT&lt;br /&gt;    ElseIf (Me.leftEdge.IsVisible(point)) Then&lt;br /&gt;      result = User32.NCHitTestResult.HTLEFT&lt;br /&gt;    ElseIf (Me.rightEdge.IsVisible(point)) Then&lt;br /&gt;      result = User32.NCHitTestResult.HTRIGHT&lt;br /&gt;    ElseIf (Me.bottomLeftEdge.IsVisible(point)) Then&lt;br /&gt;      result = User32.NCHitTestResult.HTBOTTOMLEFT&lt;br /&gt;    ElseIf (Me.bottomEdge.IsVisible(point)) Then&lt;br /&gt;      result = User32.NCHitTestResult.HTBOTTOM&lt;br /&gt;    ElseIf (Me.bottomRightEdge.IsVisible(point)) Then&lt;br /&gt;      result = User32.NCHitTestResult.HTBOTTOMRIGHT&lt;br /&gt;    End If&lt;br /&gt;    End If&lt;br /&gt;    If (Me.closeButton.IsVisible(point)) Then&lt;br /&gt;    result = User32.NCHitTestResult.HTBORDER&lt;br /&gt;    ElseIf (Me.maxButton.IsVisible(point)) Then&lt;br /&gt;    result = User32.NCHitTestResult.HTBORDER&lt;br /&gt;    ElseIf (Me.minButton.IsVisible(point)) Then&lt;br /&gt;    result = User32.NCHitTestResult.HTBORDER&lt;br /&gt;    ElseIf (Me.iconButton.IsVisible(point)) Then&lt;br /&gt;    result = User32.NCHitTestResult.HTBORDER&lt;br /&gt;    End If&lt;br /&gt;    Return New IntPtr(result)&lt;br /&gt;  End Function&lt;br /&gt;  Private Sub SendNCWinMessage(ByVal msg As Int32, ByVal wParam As IntPtr, ByVal lParam As IntPtr)&lt;br /&gt;    Dim message As Message = message.Create(Me.Handle, msg, wParam, lParam)&lt;br /&gt;    Me.WndProc(message)&lt;br /&gt;  End Sub&lt;br /&gt;  Protected Sub SystemMenu_SystemEvent(ByVal sender As Object, ByVal ev As WindowMenuEventArgs)&lt;br /&gt;    SendNCWinMessage(User32.WM_SYSCOMMAND, New IntPtr(ev.SystemCommand), IntPtr.Zero)&lt;br /&gt;  End Sub&lt;br /&gt;End Class&lt;br /&gt;Friend NotInheritable Class User32&lt;br /&gt;  Private Sub New()&lt;br /&gt;    MyBase.New()&lt;br /&gt;    'Non-Instantiable class&lt;br /&gt;  End Sub&lt;br /&gt;  Public Enum SysCommand&lt;br /&gt;    SC_SIZE = &amp;amp;HF000&lt;br /&gt;    SC_MOVE = &amp;amp;HF010&lt;br /&gt;    SC_MINIMIZE = &amp;amp;HF020&lt;br /&gt;    SC_MAXIMIZE = &amp;amp;HF030&lt;br /&gt;    SC_NEXTWINDOW = &amp;amp;HF040&lt;br /&gt;    SC_PREVWINDOW = &amp;amp;HF050&lt;br /&gt;    SC_CLOSE = &amp;amp;HF060&lt;br /&gt;    SC_VSCROLL = &amp;amp;HF070&lt;br /&gt;    SC_HSCROLL = &amp;amp;HF080&lt;br /&gt;    SC_MOUSEMENU = &amp;amp;HF090&lt;br /&gt;    SC_KEYMENU = &amp;amp;HF100&lt;br /&gt;    SC_ARRANGE = &amp;amp;HF110&lt;br /&gt;    SC_RESTORE = &amp;amp;HF120&lt;br /&gt;    SC_TASKLIST = &amp;amp;HF130&lt;br /&gt;    SC_SCREENSAVE = &amp;amp;HF140&lt;br /&gt;    SC_HOTKEY = &amp;amp;HF150&lt;br /&gt;    SC_DEFAULT = &amp;amp;HF160&lt;br /&gt;    SC_MONITORPOWER = &amp;amp;HF170&lt;br /&gt;    SC_CONTEXTHELP = &amp;amp;HF180&lt;br /&gt;    SC_SEPARATOR = &amp;amp;HF00F&lt;br /&gt;  End Enum&lt;br /&gt;  Public Enum NCHitTestResult&lt;br /&gt;    HTERROR = (-2)&lt;br /&gt;    HTTRANSPARENT&lt;br /&gt;    HTNOWHERE&lt;br /&gt;    HTCLIENT&lt;br /&gt;    HTCAPTION&lt;br /&gt;    HTSYSMENU&lt;br /&gt;    HTGROWBOX&lt;br /&gt;    HTMENU&lt;br /&gt;    HTHSCROLL&lt;br /&gt;    HTVSCROLL&lt;br /&gt;    HTMINBUTTON&lt;br /&gt;    HTMAXBUTTON&lt;br /&gt;    HTLEFT&lt;br /&gt;    HTRIGHT&lt;br /&gt;    HTTOP&lt;br /&gt;    HTTOPLEFT&lt;br /&gt;    HTTOPRIGHT&lt;br /&gt;    HTBOTTOM&lt;br /&gt;    HTBOTTOMLEFT&lt;br /&gt;    HTBOTTOMRIGHT&lt;br /&gt;    HTBORDER&lt;br /&gt;    HTOBJECT&lt;br /&gt;    HTCLOSE&lt;br /&gt;    HTHELP&lt;br /&gt;  End Enum&lt;br /&gt;  Public Enum NCMouseMessage&lt;br /&gt;    WM_NCMOUSEMOVE = &amp;amp;HA0&lt;br /&gt;    WM_NCLBUTTONDOWN = &amp;amp;HA1&lt;br /&gt;    WM_NCLBUTTONUP = &amp;amp;HA2&lt;br /&gt;    WM_NCLBUTTONDBLCLK = &amp;amp;HA3&lt;br /&gt;    WM_NCRBUTTONDOWN = &amp;amp;HA4&lt;br /&gt;    WM_NCRBUTTONUP = &amp;amp;HA5&lt;br /&gt;    WM_NCRBUTTONDBLCLK = &amp;amp;HA6&lt;br /&gt;    WM_NCMBUTTONDOWN = &amp;amp;HA7&lt;br /&gt;    WM_NCMBUTTONUP = &amp;amp;HA8&lt;br /&gt;    WM_NCMBUTTONDBLCLK = &amp;amp;HA9&lt;br /&gt;    WM_NCXBUTTONDOWN = &amp;amp;HAB&lt;br /&gt;    WM_NCXBUTTONUP = &amp;amp;HAC&lt;br /&gt;    WM_NCXBUTTONDBLCLK = &amp;amp;HAD&lt;br /&gt;  End Enum&lt;br /&gt;  Public Const WM_NULL As Int32 = &amp;amp;H0&lt;br /&gt;  Public Const WM_NCHITTEST As Int32 = &amp;amp;H84&lt;br /&gt;  Public Const WM_NCACTIVATE As Int32 = &amp;amp;H86&lt;br /&gt;  Public Const WM_SYSCOMMAND As Int32 = &amp;amp;H112&lt;br /&gt;  Public Const WM_ENTERMENULOOP As Int32 = &amp;amp;H211&lt;br /&gt;  Public Const WM_EXITMENULOOP As Int32 = &amp;amp;H212&lt;br /&gt;  '********** Undocumented message **********&lt;br /&gt;  Public Const WM_GETSYSMENU As Int32 = &amp;amp;H313&lt;br /&gt;  '*****************************************&lt;br /&gt;  Public Shared Function MakeLParam(ByVal LoWord As Int32, ByVal HiWord As Int32) As IntPtr&lt;br /&gt;    Return New IntPtr((HiWord &amp;lt;&amp;lt; 16) Or (LoWord And &amp;amp;HFFFF))&lt;br /&gt;  End Function&lt;br /&gt;End Class&lt;br /&gt;Friend NotInheritable Class WindowMenu&lt;br /&gt;  Inherits ContextMenu&lt;br /&gt;  Private Owner As Form&lt;br /&gt;  Private menuRestore, menuMove, menuSize, menuMin, menuMax, menuSep, menuClose As MenuItem&lt;br /&gt;  Public Event SystemEvent As WindowMenuEventHandler&lt;br /&gt;  Public Sub New(ByVal owner As Form)&lt;br /&gt;    MyBase.New()&lt;br /&gt;    Me.Owner = owner&lt;br /&gt;    menuRestore = CreateMenuItem("Restore")&lt;br /&gt;    menuMove = CreateMenuItem("Move")&lt;br /&gt;    menuSize = CreateMenuItem("Size")&lt;br /&gt;    menuMin = CreateMenuItem("Minimize")&lt;br /&gt;    menuMax = CreateMenuItem("Maximize")&lt;br /&gt;    menuSep = CreateMenuItem("-")&lt;br /&gt;    menuClose = CreateMenuItem("Close", Shortcut.AltF4)&lt;br /&gt;    Me.MenuItems.AddRange(New MenuItem() {menuRestore, menuMove, menuSize, menuMin, menuMax, menuSep, menuClose})&lt;br /&gt;    menuClose.DefaultItem = True&lt;br /&gt;  End Sub&lt;br /&gt;  Protected Overrides Sub OnPopup(ByVal e As EventArgs)&lt;br /&gt;    Select Case Owner.WindowState&lt;br /&gt;    Case FormWindowState.Normal&lt;br /&gt;      menuRestore.Enabled = False&lt;br /&gt;      menuMax.Enabled = True&lt;br /&gt;      menuMin.Enabled = True&lt;br /&gt;      menuMove.Enabled = True&lt;br /&gt;      menuSize.Enabled = True&lt;br /&gt;    Case FormWindowState.Minimized&lt;br /&gt;      menuRestore.Enabled = True&lt;br /&gt;      menuMax.Enabled = True&lt;br /&gt;      menuMin.Enabled = False&lt;br /&gt;      menuMove.Enabled = False&lt;br /&gt;      menuSize.Enabled = False&lt;br /&gt;    Case FormWindowState.Maximized&lt;br /&gt;      menuRestore.Enabled = True&lt;br /&gt;      menuMax.Enabled = False&lt;br /&gt;      menuMin.Enabled = True&lt;br /&gt;      menuMove.Enabled = False&lt;br /&gt;      menuSize.Enabled = False&lt;br /&gt;    End Select&lt;br /&gt;    MyBase.OnPopup(e)&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub OnWindowMenuClick(ByVal sender As Object, ByVal e As EventArgs)&lt;br /&gt;    Select Case Me.MenuItems.IndexOf(DirectCast(sender, MenuItem))&lt;br /&gt;    Case 0&lt;br /&gt;      SendSysCommand(User32.SysCommand.SC_RESTORE)&lt;br /&gt;    Case 1&lt;br /&gt;      SendSysCommand(User32.SysCommand.SC_MOVE)&lt;br /&gt;    Case 2&lt;br /&gt;      SendSysCommand(User32.SysCommand.SC_SIZE)&lt;br /&gt;    Case 3&lt;br /&gt;      SendSysCommand(User32.SysCommand.SC_MINIMIZE)&lt;br /&gt;    Case 4&lt;br /&gt;      SendSysCommand(User32.SysCommand.SC_MAXIMIZE)&lt;br /&gt;    Case 6&lt;br /&gt;      SendSysCommand(User32.SysCommand.SC_CLOSE)&lt;br /&gt;    End Select&lt;br /&gt;  End Sub&lt;br /&gt;  Private Function CreateMenuItem(ByVal text As String) As MenuItem&lt;br /&gt;    Return CreateMenuItem(text, Shortcut.None)&lt;br /&gt;  End Function&lt;br /&gt;  Private Function CreateMenuItem(ByVal text As String, ByVal shortcut As Shortcut) As MenuItem&lt;br /&gt;    Dim item As MenuItem = New MenuItem(text, AddressOf OnWindowMenuClick, shortcut)&lt;br /&gt;    item.OwnerDraw = True&lt;br /&gt;    AddHandler item.MeasureItem, AddressOf item_MeasureItem&lt;br /&gt;    AddHandler item.DrawItem, AddressOf item_DrawItem&lt;br /&gt;    Return item&lt;br /&gt;  End Function&lt;br /&gt;  Private Sub item_MeasureItem(ByVal sender As Object, ByVal e As MeasureItemEventArgs)&lt;br /&gt;    Dim item As MenuItem = Me.MenuItems(e.Index)&lt;br /&gt;    Dim itemText As String = item.Text&lt;br /&gt;    itemText += "/tAlt+F4"&lt;br /&gt;    Dim itemSize As Size = TextRenderer.MeasureText(itemText, SystemFonts.MenuFont)&lt;br /&gt;    e.ItemHeight = IIf(e.Index = 5, 8, itemSize.Height + 7)&lt;br /&gt;    e.ItemWidth = itemSize.Width + itemSize.Height + 23&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub item_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs)&lt;br /&gt;    Dim item As MenuItem = Me.MenuItems(e.Index)&lt;br /&gt;    If item.Enabled Then&lt;br /&gt;    e.DrawBackground()&lt;br /&gt;    Else&lt;br /&gt;    e.Graphics.FillRectangle(SystemBrushes.Menu, e.Bounds)&lt;br /&gt;    End If&lt;br /&gt;    If e.Index = 5 Then&lt;br /&gt;    e.Graphics.DrawLine(SystemPens.GrayText, e.Bounds.Left + 2, e.Bounds.Top + 3, e.Bounds.Right - 2, e.Bounds.Top + 3)&lt;br /&gt;    Else&lt;br /&gt;    Dim format As TextFormatFlags = TextFormatFlags.HorizontalCenter Or TextFormatFlags.VerticalCenter Or TextFormatFlags.NoPadding&lt;br /&gt;    Dim textColor As Color = IIf(item.Enabled, SystemColors.MenuText, SystemColors.GrayText)&lt;br /&gt;    Using marlettFont As New Font("Marlett", 10)&lt;br /&gt;      Dim GlyphRect As Rectangle = e.Bounds&lt;br /&gt;      GlyphRect.Width = GlyphRect.Height&lt;br /&gt;      If item Is menuRestore Then&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, "2", marlettFont, GlyphRect, textColor, format)&lt;br /&gt;      ElseIf item Is menuMin Then&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, "0", marlettFont, GlyphRect, textColor, format)&lt;br /&gt;      ElseIf item Is menuMax Then&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, "1", marlettFont, GlyphRect, textColor, format)&lt;br /&gt;      ElseIf item Is menuClose Then&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, "r", marlettFont, GlyphRect, textColor, format)&lt;br /&gt;      End If&lt;br /&gt;    End Using&lt;br /&gt;    format = format And (TextFormatFlags.Left Or Not TextFormatFlags.HorizontalCenter)&lt;br /&gt;    Dim textRect As Rectangle = New Rectangle(e.Bounds.Left + e.Bounds.Height + 3, e.Bounds.Top, e.Bounds.Width - e.Bounds.Height - 3, e.Bounds.Height)&lt;br /&gt;    TextRenderer.DrawText(e.Graphics, item.Text, SystemFonts.MenuFont, textRect, textColor, format)&lt;br /&gt;    If (item Is menuClose) Then&lt;br /&gt;      Dim shortcut As String = "Alt+F4"&lt;br /&gt;      Dim shortcutSize As Size = TextRenderer.MeasureText(shortcut, SystemFonts.MenuFont)&lt;br /&gt;      textRect.X = textRect.Right - shortcutSize.Width - 13&lt;br /&gt;      TextRenderer.DrawText(e.Graphics, shortcut, SystemFonts.MenuFont, textRect, textColor, format)&lt;br /&gt;    End If&lt;br /&gt;    End If&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub SendSysCommand(ByVal command As User32.SysCommand)&lt;br /&gt;    Dim ev As WindowMenuEventArgs = New WindowMenuEventArgs(DirectCast(command, Int32))&lt;br /&gt;    RaiseEvent SystemEvent(Me, ev)&lt;br /&gt;  End Sub&lt;br /&gt;End Class&lt;br /&gt;Public Class WindowMenuEventArgs&lt;br /&gt;  Inherits EventArgs&lt;br /&gt;  Private sysCommand As Int32&lt;br /&gt;  Public ReadOnly Property SystemCommand() As Int32&lt;br /&gt;    Get&lt;br /&gt;    Return Me.sysCommand&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Public Sub New(ByVal command As Int32)&lt;br /&gt;    MyBase.new()&lt;br /&gt;    Me.sysCommand = command&lt;br /&gt;  End Sub&lt;br /&gt;End Class&lt;br /&gt;Public Delegate Sub WindowMenuEventHandler(ByVal sender As Object, ByVal ev As WindowMenuEventArgs)&lt;br /&gt;        &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Drawing.Drawing2D;&lt;br /&gt;using CustomForm.Properties;&lt;br /&gt;using System.Security.Permissions;&lt;br /&gt;namespace CustomForm&lt;br /&gt;{&lt;br /&gt;  public class Form1 : Form&lt;br /&gt;  {&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Required designer variable.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private System.ComponentModel.IContainer components = null;&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Clean up any resources being used.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    /// &amp;lt;param name="disposing"&amp;gt;true if managed resources should be disposed; otherwise, false.&amp;lt;/param&amp;gt;&lt;br /&gt;    protected override void Dispose(bool disposing)&lt;br /&gt;    {&lt;br /&gt;    if (disposing &amp;amp;&amp;amp; (components != null))&lt;br /&gt;    {&lt;br /&gt;      components.Dispose();&lt;br /&gt;    }&lt;br /&gt;    base.Dispose(disposing);&lt;br /&gt;    }&lt;br /&gt;    #region Windows Form Designer generated code&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Required method for Designer support - do not modify&lt;br /&gt;    /// the contents of this method with the code editor.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private void InitializeComponent()&lt;br /&gt;    {&lt;br /&gt;    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));&lt;br /&gt;    this.panel1 = new System.Windows.Forms.Panel();&lt;br /&gt;    this.SuspendLayout();&lt;br /&gt;    // &lt;br /&gt;    // panel1&lt;br /&gt;    // &lt;br /&gt;    this.panel1.AutoScroll = true;&lt;br /&gt;    this.panel1.AutoScrollMinSize = new System.Drawing.Size(340, 300);&lt;br /&gt;    this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;&lt;br /&gt;    this.panel1.Location = new System.Drawing.Point(7, 6);&lt;br /&gt;    this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);&lt;br /&gt;    this.panel1.Name = "panel1";&lt;br /&gt;    this.panel1.Size = new System.Drawing.Size(375, 319);&lt;br /&gt;    this.panel1.TabIndex = 0;&lt;br /&gt;    // &lt;br /&gt;    // Form1&lt;br /&gt;    // &lt;br /&gt;    this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);&lt;br /&gt;    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;&lt;br /&gt;    this.BackColor = System.Drawing.Color.LemonChiffon;&lt;br /&gt;    this.ClientSize = new System.Drawing.Size(389, 331);&lt;br /&gt;    this.Controls.Add(this.panel1);&lt;br /&gt;    this.DoubleBuffered = true;&lt;br /&gt;    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;&lt;br /&gt;    this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));&lt;br /&gt;    this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);&lt;br /&gt;    this.MinimumSize = new System.Drawing.Size(133, 62);&lt;br /&gt;    this.Name = "Form1";&lt;br /&gt;    this.Padding = new System.Windows.Forms.Padding(7, 6, 7, 6);&lt;br /&gt;    this.Text = "CustomForm";&lt;br /&gt;    this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);&lt;br /&gt;    this.Resize += new System.EventHandler(this.Form1_Resize);&lt;br /&gt;    this.ResumeLayout(false);&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;    private System.Windows.Forms.Panel panel1;&lt;br /&gt;    private GraphicsPath leftEdge, topEdge ,bottomEdge, rightEdge,&lt;br /&gt;    topLeftEdge, topRightEdge, bottomLeftEdge, bottomRightEdge, &lt;br /&gt;    titleBar, closeButton, maxButton, minButton, iconButton;&lt;br /&gt;    private bool formActive = true;&lt;br /&gt;    private ToolTip ButtonTip;&lt;br /&gt;    private WindowMenu SystemMenu;&lt;br /&gt;    &lt;br /&gt;    public Form1()&lt;br /&gt;    {&lt;br /&gt;    InitializeComponent();&lt;br /&gt;    this.leftEdge = new GraphicsPath();&lt;br /&gt;    this.topEdge = new GraphicsPath();&lt;br /&gt;    this.rightEdge = new GraphicsPath();&lt;br /&gt;    this.bottomEdge = new GraphicsPath();&lt;br /&gt;    this.topLeftEdge = new GraphicsPath();&lt;br /&gt;    this.topRightEdge = new GraphicsPath();&lt;br /&gt;    this.bottomLeftEdge = new GraphicsPath();&lt;br /&gt;    this.bottomRightEdge = new GraphicsPath();&lt;br /&gt;    this.titleBar = new GraphicsPath();&lt;br /&gt;    this.closeButton = new GraphicsPath();&lt;br /&gt;    this.maxButton = new GraphicsPath();&lt;br /&gt;    this.minButton = new GraphicsPath();&lt;br /&gt;    this.iconButton = new GraphicsPath();&lt;br /&gt;    BuildPaths();&lt;br /&gt;    this.MaximizedBounds = Screen.GetWorkingArea(this);&lt;br /&gt;    this.Padding = new Padding(5,(int)titleBar.GetBounds().Height+7, 5, 5);&lt;br /&gt;    this.SystemMenu = new WindowMenu(this);&lt;br /&gt;    this.SystemMenu.SystemEvent += new WindowMenuEventHandler(SystemMenu_SystemEvent);&lt;br /&gt;    ButtonTip = new ToolTip();&lt;br /&gt;    }&lt;br /&gt;    protected override CreateParams CreateParams&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      const int WS_MINIMIZEBOX = 0x20000;&lt;br /&gt;      System.Windows.Forms.CreateParams cParams = base.CreateParams;&lt;br /&gt;      cParams.Style |= WS_MINIMIZEBOX;&lt;br /&gt;      return cParams;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private void Form1_Resize(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    if (this.Created)&lt;br /&gt;    {&lt;br /&gt;      BuildPaths();&lt;br /&gt;      this.Invalidate();&lt;br /&gt;      this.ButtonTip.SetToolTip(this, "");&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private void Form1_Paint(object sender, PaintEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    e.Graphics.FillPath(Brushes.Orange, leftEdge);&lt;br /&gt;    e.Graphics.FillPath(Brushes.Orange, topEdge);&lt;br /&gt;    e.Graphics.FillPath(Brushes.Orange, rightEdge);&lt;br /&gt;    e.Graphics.FillPath(Brushes.Orange, bottomEdge);&lt;br /&gt;    e.Graphics.FillPath(Brushes.Coral, topLeftEdge);&lt;br /&gt;    e.Graphics.FillPath(Brushes.Coral, topRightEdge);&lt;br /&gt;    e.Graphics.FillPath(Brushes.Coral, bottomLeftEdge);&lt;br /&gt;    e.Graphics.FillPath(Brushes.Coral, bottomRightEdge);&lt;br /&gt;    if (!this.formActive)&lt;br /&gt;    {&lt;br /&gt;      e.Graphics.FillRectangle(Brushes.Silver, Rectangle.Round(titleBar.GetBounds()));&lt;br /&gt;    }&lt;br /&gt;    Rectangle rc = Rectangle.Round(iconButton.GetBounds());&lt;br /&gt;    using (Bitmap bm = this.TopMost ? Resources.Pin : Resources.UnPin)&lt;br /&gt;    {&lt;br /&gt;      bm.MakeTransparent(Color.Magenta);&lt;br /&gt;      e.Graphics.DrawImage(bm, rc);&lt;br /&gt;    }&lt;br /&gt;    rc = Rectangle.Round(minButton.GetBounds());&lt;br /&gt;    using (Bitmap bm = Resources.Min)&lt;br /&gt;    {&lt;br /&gt;      bm.MakeTransparent(Color.Magenta);&lt;br /&gt;      e.Graphics.DrawImage(bm, rc);&lt;br /&gt;    }&lt;br /&gt;    rc = Rectangle.Round(maxButton.GetBounds());&lt;br /&gt;    using (Bitmap bm = this.WindowState == FormWindowState.Normal ? Resources.Max : Resources.Restore)&lt;br /&gt;    {&lt;br /&gt;      bm.MakeTransparent(Color.Magenta);&lt;br /&gt;      e.Graphics.DrawImage(bm, rc);&lt;br /&gt;    }&lt;br /&gt;    rc = Rectangle.Round(closeButton.GetBounds());&lt;br /&gt;    using (Bitmap bm = Resources.Close)&lt;br /&gt;    {&lt;br /&gt;      bm.MakeTransparent(Color.Magenta);&lt;br /&gt;      e.Graphics.DrawImage(bm, rc);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    using (Pen myPen = new Pen(Color.Orange, 2))&lt;br /&gt;    {&lt;br /&gt;      rc = this.DisplayRectangle;&lt;br /&gt;      e.Graphics.DrawLine(myPen, rc.Left, rc.Top - 2, rc.Right, rc.Top - 2);&lt;br /&gt;    }&lt;br /&gt;    RectangleF textRect = titleBar.GetBounds();&lt;br /&gt;    textRect.X += iconButton.GetBounds().Width + 3;&lt;br /&gt;    textRect.Width = minButton.GetBounds().Left - textRect.Left;&lt;br /&gt;    TextRenderer.DrawText(e.Graphics, this.Text, SystemFonts.CaptionFont, Rectangle.Round(textRect), Color.DarkGoldenrod, TextFormatFlags.EndEllipsis | TextFormatFlags.VerticalCenter);&lt;br /&gt;    }&lt;br /&gt;    protected override void OnTextChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnTextChanged(e);&lt;br /&gt;    this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;    private void BuildPaths()&lt;br /&gt;    {&lt;br /&gt;    int edgeSize = SystemInformation.CaptionHeight + 2;&lt;br /&gt;    int buttonSize = SystemFonts.CaptionFont.Height;&lt;br /&gt;    int buttonPadding = 2;&lt;br /&gt;    //Left Sizing Edge&lt;br /&gt;    leftEdge.Reset();&lt;br /&gt;    leftEdge.AddRectangle(new Rectangle(0, edgeSize, 5, this.Height - (edgeSize*2)));&lt;br /&gt;    //Top Sizing Edge&lt;br /&gt;    topEdge.Reset();&lt;br /&gt;    topEdge.AddRectangle(new Rectangle(edgeSize, 0, this.Width - (edgeSize * 2), 5));&lt;br /&gt;    //Right Sizing Edge&lt;br /&gt;    rightEdge.Reset();&lt;br /&gt;    rightEdge.AddRectangle(new Rectangle(this.Width - 5, edgeSize, 5, this.Height - (edgeSize * 2)));&lt;br /&gt;    //Bottom Sizing Edge&lt;br /&gt;    bottomEdge.Reset();&lt;br /&gt;    bottomEdge.AddRectangle(new Rectangle(edgeSize, this.Height - 5, this.Width - (edgeSize * 2), 5));&lt;br /&gt;    //Top-Left Sizing Edge&lt;br /&gt;    topLeftEdge.Reset();&lt;br /&gt;    topLeftEdge.AddRectangle(new Rectangle(0, 0, edgeSize, edgeSize));&lt;br /&gt;    topLeftEdge.AddRectangle(new Rectangle(5, 5, edgeSize - 5, edgeSize - 5));&lt;br /&gt;    //Top-Right Sizing Edge&lt;br /&gt;    topRightEdge.Reset();&lt;br /&gt;    topRightEdge.AddRectangle(new Rectangle(this.Width - edgeSize, 0, edgeSize, edgeSize));&lt;br /&gt;    topRightEdge.AddRectangle(new Rectangle(this.Width - edgeSize, 5, edgeSize - 5, edgeSize - 5));&lt;br /&gt;    //Bottom-Left Sizing Edge&lt;br /&gt;    bottomLeftEdge.Reset();&lt;br /&gt;    bottomLeftEdge.AddRectangle(new Rectangle(0, this.Height - edgeSize, edgeSize, edgeSize));&lt;br /&gt;    bottomLeftEdge.AddRectangle(new Rectangle(5, this.Height - edgeSize, edgeSize - 5, edgeSize - 5));&lt;br /&gt;    //Bottom-Right Sizing Edge&lt;br /&gt;    bottomRightEdge.Reset();&lt;br /&gt;    bottomRightEdge.AddRectangle(new Rectangle(this.Width - edgeSize, this.Height - edgeSize, edgeSize, edgeSize));&lt;br /&gt;    bottomRightEdge.AddRectangle(new Rectangle(this.Width - edgeSize, this.Height - edgeSize, edgeSize - 5, edgeSize - 5));&lt;br /&gt;    //Close Button&lt;br /&gt;    closeButton.Reset();&lt;br /&gt;    closeButton.AddRectangle(new Rectangle(this.Width - 5 - (buttonSize + buttonPadding), 8, buttonSize, buttonSize));&lt;br /&gt;    //Maximize Button&lt;br /&gt;    maxButton.Reset();&lt;br /&gt;    maxButton.AddRectangle(new Rectangle(this.Width - 5 -((buttonSize + buttonPadding)*2), 8, buttonSize, buttonSize));&lt;br /&gt;    //Minimize Button&lt;br /&gt;    minButton.Reset();&lt;br /&gt;    minButton.AddRectangle(new Rectangle(this.Width - 5 -((buttonSize + buttonPadding)*3), 8, buttonSize, buttonSize));&lt;br /&gt;    //Window Menu Button (Icon)&lt;br /&gt;    iconButton.Reset();&lt;br /&gt;    iconButton.AddRectangle(new Rectangle(8, 8, buttonSize, buttonSize));&lt;br /&gt;    //TitleBar&lt;br /&gt;    titleBar.Reset();&lt;br /&gt;    titleBar.AddRectangle(new Rectangle(5, 5, this.Width - 10, edgeSize-5));&lt;br /&gt;    //Remove Titlebar Buttons from TitleBar Path&lt;br /&gt;    titleBar.AddPath(closeButton, false);&lt;br /&gt;    titleBar.AddPath(maxButton, false);&lt;br /&gt;    titleBar.AddPath(minButton, false);&lt;br /&gt;    titleBar.AddPath(iconButton, false);&lt;br /&gt;    }&lt;br /&gt;    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]&lt;br /&gt;    protected override void WndProc(ref Message m)&lt;br /&gt;    {&lt;br /&gt;    if (this.WindowState == FormWindowState.Maximized)&lt;br /&gt;    {&lt;br /&gt;      if (m.Msg == USER32.WM_SYSCOMMAND &amp;amp;&amp;amp;&lt;br /&gt;        m.WParam.ToInt32() == (int)USER32.SysCommand.SC_MOVE ||&lt;br /&gt;        m.Msg == (int)USER32.NCMouseMessage.WM_NCLBUTTONDOWN &amp;amp;&amp;amp;&lt;br /&gt;        m.WParam.ToInt32() == (int)USER32.NCHitTestResult.HTCAPTION)&lt;br /&gt;      {&lt;br /&gt;        m.Msg = USER32.WM_NULL;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    base.WndProc(ref m);&lt;br /&gt;    switch (m.Msg)&lt;br /&gt;    {&lt;br /&gt;      case (int)USER32.WM_GETSYSMENU:&lt;br /&gt;        this.SystemMenu.Show(this, this.PointToClient(new Point(m.LParam.ToInt32())));&lt;br /&gt;        break;&lt;br /&gt;      case USER32.WM_NCACTIVATE:&lt;br /&gt;        this.formActive = m.WParam.ToInt32() != 0;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;        break;&lt;br /&gt;      case USER32.WM_NCHITTEST:&lt;br /&gt;        m.Result = OnNonClientHitTest(m.LParam);&lt;br /&gt;        break;&lt;br /&gt;      case (int) USER32.NCMouseMessage.WM_NCLBUTTONUP:&lt;br /&gt;        OnNonClientLButtonUp(m.LParam);&lt;br /&gt;        break;&lt;br /&gt;      case (int)USER32.NCMouseMessage.WM_NCRBUTTONUP:&lt;br /&gt;        OnNonClientRButtonUp(m.LParam);&lt;br /&gt;        break;&lt;br /&gt;      case (int)USER32.NCMouseMessage.WM_NCMOUSEMOVE:&lt;br /&gt;        OnNonClientMouseMove(m.LParam);&lt;br /&gt;        break;&lt;br /&gt;      default:&lt;br /&gt;        break;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private void OnNonClientLButtonUp(IntPtr lParam)&lt;br /&gt;    {&lt;br /&gt;    USER32.SysCommand code = USER32.SysCommand.SC_DEFAULT;&lt;br /&gt;    Point point = this.PointToClient(new Point(lParam.ToInt32()));&lt;br /&gt;    if (this.iconButton.IsVisible(point))&lt;br /&gt;    {&lt;br /&gt;      this.TopMost = !this.TopMost;&lt;br /&gt;      this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;      if (this.closeButton.IsVisible(point))&lt;br /&gt;        code = USER32.SysCommand.SC_CLOSE;&lt;br /&gt;      else if (this.maxButton.IsVisible(point))&lt;br /&gt;        code = this.WindowState == FormWindowState.Normal ? USER32.SysCommand.SC_MAXIMIZE : USER32.SysCommand.SC_RESTORE;&lt;br /&gt;      else if (this.minButton.IsVisible(point))&lt;br /&gt;        code = USER32.SysCommand.SC_MINIMIZE;&lt;br /&gt;      SendNCWinMessage(USER32.WM_SYSCOMMAND, (IntPtr)code, IntPtr.Zero);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private void OnNonClientRButtonUp(IntPtr lParam)&lt;br /&gt;    {&lt;br /&gt;    if (this.titleBar.IsVisible(this.PointToClient(new Point(lParam.ToInt32()))))&lt;br /&gt;      SendNCWinMessage(USER32.WM_GETSYSMENU, IntPtr.Zero, lParam);&lt;br /&gt;    }&lt;br /&gt;    private void OnNonClientMouseMove(IntPtr lParam)&lt;br /&gt;    {&lt;br /&gt;    Point point = this.PointToClient(new Point(lParam.ToInt32()));&lt;br /&gt;    String tooltip;&lt;br /&gt;    if (this.closeButton.IsVisible(point))&lt;br /&gt;      tooltip = "Close";&lt;br /&gt;    else if (this.maxButton.IsVisible(point))&lt;br /&gt;      tooltip = this.WindowState == FormWindowState.Normal ? "Maximize" : "Restore";&lt;br /&gt;    else if (this.minButton.IsVisible(point))&lt;br /&gt;      tooltip = "Minimize";&lt;br /&gt;    else if (this.iconButton.IsVisible(point))&lt;br /&gt;      tooltip = this.TopMost ? "Un-Pin" : "Pin";&lt;br /&gt;    else&lt;br /&gt;      tooltip = string.Empty;&lt;br /&gt;    if (ButtonTip.GetToolTip(this) != tooltip)&lt;br /&gt;      ButtonTip.SetToolTip(this, tooltip);&lt;br /&gt;    }&lt;br /&gt;    private IntPtr OnNonClientHitTest(IntPtr lParam)&lt;br /&gt;    {&lt;br /&gt;    USER32.NCHitTestResult result = USER32.NCHitTestResult.HTCLIENT;&lt;br /&gt;    Point point = this.PointToClient(new Point(lParam.ToInt32()));&lt;br /&gt;    if (this.titleBar.IsVisible(point))&lt;br /&gt;    {&lt;br /&gt;      result = USER32.NCHitTestResult.HTCAPTION;&lt;br /&gt;    }&lt;br /&gt;    if (this.WindowState == FormWindowState.Normal)&lt;br /&gt;    {&lt;br /&gt;      if (this.topLeftEdge.IsVisible(point))&lt;br /&gt;        result = USER32.NCHitTestResult.HTTOPLEFT;&lt;br /&gt;      else if (this.topEdge.IsVisible(point))&lt;br /&gt;        result = USER32.NCHitTestResult.HTTOP;&lt;br /&gt;      else if (this.topRightEdge.IsVisible(point))&lt;br /&gt;        result = USER32.NCHitTestResult.HTTOPRIGHT;&lt;br /&gt;      else if (this.leftEdge.IsVisible(point))&lt;br /&gt;        result = USER32.NCHitTestResult.HTLEFT;&lt;br /&gt;      else if (this.rightEdge.IsVisible(point))&lt;br /&gt;        result = USER32.NCHitTestResult.HTRIGHT;&lt;br /&gt;      else if (this.bottomLeftEdge.IsVisible(point))&lt;br /&gt;        result = USER32.NCHitTestResult.HTBOTTOMLEFT;&lt;br /&gt;      else if (this.bottomEdge.IsVisible(point))&lt;br /&gt;        result = USER32.NCHitTestResult.HTBOTTOM;&lt;br /&gt;      else if (this.bottomRightEdge.IsVisible(point))&lt;br /&gt;        result = USER32.NCHitTestResult.HTBOTTOMRIGHT;&lt;br /&gt;    }&lt;br /&gt;    if (this.closeButton.IsVisible(point))&lt;br /&gt;      result = USER32.NCHitTestResult.HTBORDER;&lt;br /&gt;    else if (this.maxButton.IsVisible(point))&lt;br /&gt;      result = USER32.NCHitTestResult.HTBORDER;&lt;br /&gt;    else if (this.minButton.IsVisible(point))&lt;br /&gt;      result = USER32.NCHitTestResult.HTBORDER;&lt;br /&gt;    else if (this.iconButton.IsVisible(point))&lt;br /&gt;      result = USER32.NCHitTestResult.HTBORDER;&lt;br /&gt;    return (IntPtr)result;&lt;br /&gt;    }&lt;br /&gt;    private void SendNCWinMessage(int msg, IntPtr wParam, IntPtr lParam)&lt;br /&gt;    {&lt;br /&gt;    Message message = Message.Create(this.Handle, msg, wParam, lParam);&lt;br /&gt;    this.WndProc(ref message);&lt;br /&gt;    }&lt;br /&gt;    protected void SystemMenu_SystemEvent(object sender, WindowMenuEventArgs ev)&lt;br /&gt;    {&lt;br /&gt;    SendNCWinMessage(USER32.WM_SYSCOMMAND, (IntPtr)ev.SystemCommand, IntPtr.Zero);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  internal sealed class USER32&lt;br /&gt;  {&lt;br /&gt;    private USER32()&lt;br /&gt;    : base()&lt;br /&gt;    {&lt;br /&gt;    //Non-Instantiable class&lt;br /&gt;    }&lt;br /&gt;    public enum SysCommand&lt;br /&gt;    {&lt;br /&gt;    SC_SIZE = 0xF000,&lt;br /&gt;    SC_MOVE = 0xF010,&lt;br /&gt;    SC_MINIMIZE = 0xF020,&lt;br /&gt;    SC_MAXIMIZE = 0xF030,&lt;br /&gt;    SC_NEXTWINDOW = 0xF040,&lt;br /&gt;    SC_PREVWINDOW = 0xF050,&lt;br /&gt;    SC_CLOSE = 0xF060,&lt;br /&gt;    SC_VSCROLL = 0xF070,&lt;br /&gt;    SC_HSCROLL = 0xF080,&lt;br /&gt;    SC_MOUSEMENU = 0xF090,&lt;br /&gt;    SC_KEYMENU = 0xF100,&lt;br /&gt;    SC_ARRANGE = 0xF110,&lt;br /&gt;    SC_RESTORE = 0xF120,&lt;br /&gt;    SC_TASKLIST = 0xF130,&lt;br /&gt;    SC_SCREENSAVE = 0xF140,&lt;br /&gt;    SC_HOTKEY = 0xF150,&lt;br /&gt;    SC_DEFAULT = 0xF160,&lt;br /&gt;    SC_MONITORPOWER = 0xF170,&lt;br /&gt;    SC_CONTEXTHELP = 0xF180,&lt;br /&gt;    SC_SEPARATOR = 0xF00F&lt;br /&gt;    }&lt;br /&gt;    public enum NCHitTestResult&lt;br /&gt;    {&lt;br /&gt;    HTERROR = (-2),&lt;br /&gt;    HTTRANSPARENT,&lt;br /&gt;    HTNOWHERE,&lt;br /&gt;    HTCLIENT,&lt;br /&gt;    HTCAPTION,&lt;br /&gt;    HTSYSMENU,&lt;br /&gt;    HTGROWBOX,&lt;br /&gt;    HTMENU,&lt;br /&gt;    HTHSCROLL,&lt;br /&gt;    HTVSCROLL,&lt;br /&gt;    HTMINBUTTON,&lt;br /&gt;    HTMAXBUTTON,&lt;br /&gt;    HTLEFT,&lt;br /&gt;    HTRIGHT,&lt;br /&gt;    HTTOP,&lt;br /&gt;    HTTOPLEFT,&lt;br /&gt;    HTTOPRIGHT,&lt;br /&gt;    HTBOTTOM,&lt;br /&gt;    HTBOTTOMLEFT,&lt;br /&gt;    HTBOTTOMRIGHT,&lt;br /&gt;    HTBORDER,&lt;br /&gt;    HTOBJECT,&lt;br /&gt;    HTCLOSE,&lt;br /&gt;    HTHELP&lt;br /&gt;    }&lt;br /&gt;    public enum NCMouseMessage&lt;br /&gt;    {&lt;br /&gt;    WM_NCMOUSEMOVE = 0xA0,&lt;br /&gt;    WM_NCLBUTTONDOWN = 0xA1,&lt;br /&gt;    WM_NCLBUTTONUP = 0xA2,&lt;br /&gt;    WM_NCLBUTTONDBLCLK = 0xA3,&lt;br /&gt;    WM_NCRBUTTONDOWN = 0xA4,&lt;br /&gt;    WM_NCRBUTTONUP = 0xA5,&lt;br /&gt;    WM_NCRBUTTONDBLCLK = 0xA6,&lt;br /&gt;    WM_NCMBUTTONDOWN = 0xA7,&lt;br /&gt;    WM_NCMBUTTONUP = 0xA8,&lt;br /&gt;    WM_NCMBUTTONDBLCLK = 0xA9,&lt;br /&gt;    WM_NCXBUTTONDOWN = 0xAB,&lt;br /&gt;    WM_NCXBUTTONUP = 0xAC,&lt;br /&gt;    WM_NCXBUTTONDBLCLK = 0xAD&lt;br /&gt;    }&lt;br /&gt;    public const int WM_NULL = 0x0;&lt;br /&gt;    public const int WM_NCHITTEST = 0x84;&lt;br /&gt;    public const int WM_NCACTIVATE = 0x86;&lt;br /&gt;    public const int WM_SYSCOMMAND = 0x112;&lt;br /&gt;    public const int WM_ENTERMENULOOP = 0x211;&lt;br /&gt;    public const int WM_EXITMENULOOP = 0x212;&lt;br /&gt;    //********** Undocumented message **********&lt;br /&gt;    public const int WM_GETSYSMENU = 0x313;&lt;br /&gt;    //*****************************************&lt;br /&gt;    public static IntPtr MakeLParam(int LoWord, int HiWord)&lt;br /&gt;    {&lt;br /&gt;    return (IntPtr)(((HiWord &amp;lt;&amp;lt; 16) | (LoWord &amp;amp; 0xFFFF)));&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  internal sealed class WindowMenu : ContextMenu&lt;br /&gt;  {&lt;br /&gt;    private Form Owner;&lt;br /&gt;    private MenuItem menuRestore, menuMove, menuSize, menuMin, menuMax, menuSep, menuClose;&lt;br /&gt;    public event WindowMenuEventHandler SystemEvent;&lt;br /&gt;    public WindowMenu(Form owner)&lt;br /&gt;    : base()&lt;br /&gt;    {&lt;br /&gt;    Owner = owner;&lt;br /&gt;    menuRestore = CreateMenuItem("Restore");&lt;br /&gt;    menuMove = CreateMenuItem("Move");&lt;br /&gt;    menuSize = CreateMenuItem("Size");&lt;br /&gt;    menuMin = CreateMenuItem("Minimize");&lt;br /&gt;    menuMax = CreateMenuItem("Maximize");&lt;br /&gt;    menuSep = CreateMenuItem("-");&lt;br /&gt;    menuClose = CreateMenuItem("Close", Shortcut.AltF4);&lt;br /&gt;    this.MenuItems.AddRange(new MenuItem[] { menuRestore, menuMove, menuSize, menuMin, menuMax, menuSep, menuClose });&lt;br /&gt;    menuClose.DefaultItem = true;&lt;br /&gt;    }&lt;br /&gt;    protected override void OnPopup(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    switch (Owner.WindowState)&lt;br /&gt;    {&lt;br /&gt;      case FormWindowState.Normal:&lt;br /&gt;        menuRestore.Enabled = false;&lt;br /&gt;        menuMax.Enabled = true;&lt;br /&gt;        menuMin.Enabled = true;&lt;br /&gt;        menuMove.Enabled = true;&lt;br /&gt;        menuSize.Enabled = true;&lt;br /&gt;        break;&lt;br /&gt;      case FormWindowState.Minimized:&lt;br /&gt;        menuRestore.Enabled = true;&lt;br /&gt;        menuMax.Enabled = true;&lt;br /&gt;        menuMin.Enabled = false;&lt;br /&gt;        menuMove.Enabled = false;&lt;br /&gt;        menuSize.Enabled = false;&lt;br /&gt;        break;&lt;br /&gt;      case FormWindowState.Maximized:&lt;br /&gt;        menuRestore.Enabled = true;&lt;br /&gt;        menuMax.Enabled = false;&lt;br /&gt;        menuMin.Enabled = true;&lt;br /&gt;        menuMove.Enabled = false;&lt;br /&gt;        menuSize.Enabled = false;&lt;br /&gt;        break;&lt;br /&gt;    }&lt;br /&gt;    base.OnPopup(e);&lt;br /&gt;    }&lt;br /&gt;    private void OnWindowMenuClick(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    switch (this.MenuItems.IndexOf((MenuItem)sender))&lt;br /&gt;    {&lt;br /&gt;      case 0:&lt;br /&gt;        SendSysCommand(USER32.SysCommand.SC_RESTORE);&lt;br /&gt;        break;&lt;br /&gt;      case 1:&lt;br /&gt;        SendSysCommand(USER32.SysCommand.SC_MOVE);&lt;br /&gt;        break;&lt;br /&gt;      case 2:&lt;br /&gt;        SendSysCommand(USER32.SysCommand.SC_SIZE);&lt;br /&gt;        break;&lt;br /&gt;      case 3:&lt;br /&gt;        SendSysCommand(USER32.SysCommand.SC_MINIMIZE);&lt;br /&gt;        break;&lt;br /&gt;      case 4:&lt;br /&gt;        SendSysCommand(USER32.SysCommand.SC_MAXIMIZE);&lt;br /&gt;        break;&lt;br /&gt;      case 6:&lt;br /&gt;        SendSysCommand(USER32.SysCommand.SC_CLOSE);&lt;br /&gt;        break;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private MenuItem CreateMenuItem(string text)&lt;br /&gt;    {&lt;br /&gt;    return CreateMenuItem(text, Shortcut.None);&lt;br /&gt;    }&lt;br /&gt;    private MenuItem CreateMenuItem(string text, Shortcut shortcut)&lt;br /&gt;    {&lt;br /&gt;    MenuItem item = new MenuItem(text, OnWindowMenuClick, shortcut);&lt;br /&gt;    item.OwnerDraw = true;&lt;br /&gt;    item.MeasureItem += new MeasureItemEventHandler(item_MeasureItem);&lt;br /&gt;    item.DrawItem += new DrawItemEventHandler(item_DrawItem);&lt;br /&gt;    return item;&lt;br /&gt;    }&lt;br /&gt;    void item_MeasureItem(object sender, MeasureItemEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    MenuItem item = this.MenuItems[e.Index];&lt;br /&gt;    String itemText = item.Text;&lt;br /&gt;    itemText += "/tAlt+F4";&lt;br /&gt;    Size itemSize = TextRenderer.MeasureText(itemText, SystemFonts.MenuFont);&lt;br /&gt;    e.ItemHeight = e.Index == 5 ? 8 : itemSize.Height + 7;&lt;br /&gt;    e.ItemWidth = itemSize.Width + itemSize.Height + 23;&lt;br /&gt;    }&lt;br /&gt;    void item_DrawItem(object sender, DrawItemEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    MenuItem item = this.MenuItems[e.Index];&lt;br /&gt;    if (item.Enabled)&lt;br /&gt;      e.DrawBackground();&lt;br /&gt;    else&lt;br /&gt;      e.Graphics.FillRectangle(SystemBrushes.Menu, e.Bounds);&lt;br /&gt;    if (e.Index == 5)&lt;br /&gt;      e.Graphics.DrawLine(SystemPens.GrayText, e.Bounds.Left + 2, e.Bounds.Top + 3, e.Bounds.Right - 2, e.Bounds.Top + 3);&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;      TextFormatFlags format = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.NoPadding;&lt;br /&gt;      Color textColor = item.Enabled ? SystemColors.MenuText : SystemColors.GrayText;&lt;br /&gt;      using (Font marlettFont = new Font("Marlett", 10))&lt;br /&gt;      {&lt;br /&gt;        Rectangle GlyphRect = e.Bounds;&lt;br /&gt;        GlyphRect.Width = GlyphRect.Height;&lt;br /&gt;        if (item == menuRestore)&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, "2", marlettFont, GlyphRect, textColor, format);&lt;br /&gt;        else if (item == menuMin)&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, "0", marlettFont, GlyphRect, textColor, format);&lt;br /&gt;        else if (item == menuMax)&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, "1", marlettFont, GlyphRect, textColor, format);&lt;br /&gt;        else if (item == menuClose)&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, "r", marlettFont, GlyphRect, textColor, format);&lt;br /&gt;      }&lt;br /&gt;      format &amp;amp;= TextFormatFlags.Left | ~TextFormatFlags.HorizontalCenter;&lt;br /&gt;      Rectangle textRect = new Rectangle(e.Bounds.Left + e.Bounds.Height + 3, e.Bounds.Top, e.Bounds.Width - e.Bounds.Height - 3, e.Bounds.Height);&lt;br /&gt;      TextRenderer.DrawText(e.Graphics, item.Text, SystemFonts.MenuFont, textRect, textColor, format);&lt;br /&gt;      if (item == menuClose)&lt;br /&gt;      {&lt;br /&gt;        String shortcut = "Alt+F4";&lt;br /&gt;        Size shortcutSize = TextRenderer.MeasureText(shortcut, SystemFonts.MenuFont);&lt;br /&gt;        textRect.X = textRect.Right - shortcutSize.Width - 13;&lt;br /&gt;        TextRenderer.DrawText(e.Graphics, shortcut, SystemFonts.MenuFont, textRect, textColor, format);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private void SendSysCommand(USER32.SysCommand command)&lt;br /&gt;    {&lt;br /&gt;    if (this.SystemEvent != null)&lt;br /&gt;    {&lt;br /&gt;      WindowMenuEventArgs ev = new WindowMenuEventArgs((int)command);&lt;br /&gt;      this.SystemEvent(this, ev);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  public class WindowMenuEventArgs : EventArgs&lt;br /&gt;  {&lt;br /&gt;    private int systemCommand;&lt;br /&gt;    public int SystemCommand&lt;br /&gt;    {&lt;br /&gt;    get { return (int)this.systemCommand; }&lt;br /&gt;    }&lt;br /&gt;    public WindowMenuEventArgs(int command)&lt;br /&gt;    : base()&lt;br /&gt;    {&lt;br /&gt;    this.systemCommand = command;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  public delegate void WindowMenuEventHandler(object sender, WindowMenuEventArgs ev);&lt;br /&gt;}&lt;br /&gt;        &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;by: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Dohertys'&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-2264563421751522168?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/2264563421751522168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/08/custom-form-appearance-with-standard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/2264563421751522168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/2264563421751522168'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/08/custom-form-appearance-with-standard.html' title='Custom Form Appearance With Standard Behaviour'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-sGkKZoVZfbI/Tje_sKtFY7I/AAAAAAAAARw/e498eAoEBYk/s72-c/Custom+Form+Appearance+With+Standard+Behaviour.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-7074608882490659850</id><published>2011-07-31T10:05:00.000-07:00</published><updated>2011-07-31T10:05:18.522-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Form'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><title type='text'>Shaped Form Resizable and Moveable</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dJ8RpEV0NMY/TjWKsOJSgRI/AAAAAAAAARk/SJKZgsl4Ihc/s1600/Shaped+Form+Resizable+and+Moveable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Shaped Form Resizable and Moveable" border="0" src="http://4.bp.blogspot.com/-dJ8RpEV0NMY/TjWKsOJSgRI/AAAAAAAAARk/SJKZgsl4Ihc/s1600/Shaped+Form+Resizable+and+Moveable.png" title="Shaped Form Resizable and Moveable" /&gt;&lt;/a&gt;&lt;/div&gt;This is by no means a complete solution, just an idea for creating custom shaped forms with custom Titlebars.&lt;br /&gt;The form can be dragged by its fake titlebar, and if right clicked the fake Titlebar will popup the WindowMenu.&lt;br /&gt;The CreateParams property has been modified to add a System Menu (with Min,Move and Close items) to a borderless form.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;The Titlebar button are not controls, they are simply drawn in the fake title bar and they react to hittesting.&lt;br /&gt;The MainMenu is actually labels that popup Contextmenus.&lt;br /&gt;The form can be resized only by its resizegrip, but you could define regions for each of the sides and corners and allow sizing by dragging the edge. The example requires a little work to be useable, but it should give you an idea of how to achieve this solution.&lt;br /&gt;With a little InterOp you can draw a standard TitleBar onto which you can place custom buttons, and this solution is much simpler than that of OwnerDrawing the NonClient Area to achieve the same effect. &lt;br /&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Imports System.Drawing.Drawing2D&lt;br /&gt;Public Class MainForm&lt;br /&gt;  Inherits System.Windows.Forms.Form&lt;br /&gt;#Region " Windows Form Designer generated code "&lt;br /&gt;  &amp;lt;System.STAThread()&amp;gt; _&lt;br /&gt;  Public Shared Sub Main()&lt;br /&gt;    Application.EnableVisualStyles()&lt;br /&gt;    Application.DoEvents()&lt;br /&gt;    Application.Run(New MainForm)&lt;br /&gt;  End Sub&lt;br /&gt;  Public Sub New()&lt;br /&gt;    MyBase.New()&lt;br /&gt;    'This call is required by the Windows Form Designer.&lt;br /&gt;    InitializeComponent()&lt;br /&gt;    'Add any initialization after the InitializeComponent() call&lt;br /&gt;    setstyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True)&lt;br /&gt;  End Sub&lt;br /&gt;  'Form overrides dispose to clean up the component list.&lt;br /&gt;  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;    If disposing Then&lt;br /&gt;    If Not (components Is Nothing) Then&lt;br /&gt;      components.Dispose()&lt;br /&gt;    End If&lt;br /&gt;    End If&lt;br /&gt;    MyBase.Dispose(disposing)&lt;br /&gt;  End Sub&lt;br /&gt;  'Required by the Windows Form Designer&lt;br /&gt;  Private components As System.ComponentModel.IContainer&lt;br /&gt;  'NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;  'It can be modified using the Windows Form Designer.  &lt;br /&gt;  'Do not modify it using the code editor.&lt;br /&gt;  Friend WithEvents ContextMenu1 As System.Windows.Forms.ContextMenu&lt;br /&gt;  Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem&lt;br /&gt;  Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem&lt;br /&gt;  Friend WithEvents ContextMenu2 As System.Windows.Forms.ContextMenu&lt;br /&gt;  Friend WithEvents MenuExit As System.Windows.Forms.MenuItem&lt;br /&gt;  Friend WithEvents MenuAbout As System.Windows.Forms.MenuItem&lt;br /&gt;  Friend WithEvents ToolTip1 As System.Windows.Forms.ToolTip&lt;br /&gt;  Friend WithEvents LabelFile As System.Windows.Forms.Label&lt;br /&gt;  Friend WithEvents LabelResize As System.Windows.Forms.Label&lt;br /&gt;  Friend WithEvents LabelHelp As System.Windows.Forms.Label&lt;br /&gt;  &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; Private Sub InitializeComponent()&lt;br /&gt;    Me.components = New System.ComponentModel.Container&lt;br /&gt;    Me.ContextMenu1 = New System.Windows.Forms.ContextMenu&lt;br /&gt;    Me.MenuItem1 = New System.Windows.Forms.MenuItem&lt;br /&gt;    Me.MenuItem2 = New System.Windows.Forms.MenuItem&lt;br /&gt;    Me.MenuExit = New System.Windows.Forms.MenuItem&lt;br /&gt;    Me.ContextMenu2 = New System.Windows.Forms.ContextMenu&lt;br /&gt;    Me.MenuAbout = New System.Windows.Forms.MenuItem&lt;br /&gt;    Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components)&lt;br /&gt;    Me.LabelFile = New System.Windows.Forms.Label&lt;br /&gt;    Me.LabelHelp = New System.Windows.Forms.Label&lt;br /&gt;    Me.LabelResize = New System.Windows.Forms.Label&lt;br /&gt;    Me.SuspendLayout()&lt;br /&gt;    '&lt;br /&gt;    'ContextMenu1&lt;br /&gt;    '&lt;br /&gt;    Me.ContextMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem1, Me.MenuItem2, Me.MenuExit})&lt;br /&gt;    '&lt;br /&gt;    'MenuItem1&lt;br /&gt;    '&lt;br /&gt;    Me.MenuItem1.Index = 0&lt;br /&gt;    Me.MenuItem1.Text = "MenuItem1"&lt;br /&gt;    '&lt;br /&gt;    'MenuItem2&lt;br /&gt;    '&lt;br /&gt;    Me.MenuItem2.Index = 1&lt;br /&gt;    Me.MenuItem2.Text = "-"&lt;br /&gt;    '&lt;br /&gt;    'MenuExit&lt;br /&gt;    '&lt;br /&gt;    Me.MenuExit.Index = 2&lt;br /&gt;    Me.MenuExit.Text = "Exit"&lt;br /&gt;    '&lt;br /&gt;    'ContextMenu2&lt;br /&gt;    '&lt;br /&gt;    Me.ContextMenu2.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuAbout})&lt;br /&gt;    '&lt;br /&gt;    'MenuAbout&lt;br /&gt;    '&lt;br /&gt;    Me.MenuAbout.Index = 0&lt;br /&gt;    Me.MenuAbout.Text = "About"&lt;br /&gt;    '&lt;br /&gt;    'ToolTip1&lt;br /&gt;    '&lt;br /&gt;    Me.ToolTip1.ShowAlways = True&lt;br /&gt;    '&lt;br /&gt;    'LabelFile&lt;br /&gt;    '&lt;br /&gt;    Me.LabelFile.BackColor = System.Drawing.Color.Transparent&lt;br /&gt;    Me.LabelFile.ForeColor = System.Drawing.SystemColors.MenuText&lt;br /&gt;    Me.LabelFile.Location = New System.Drawing.Point(8, 24)&lt;br /&gt;    Me.LabelFile.Name = "LabelFile"&lt;br /&gt;    Me.LabelFile.Size = New System.Drawing.Size(32, 19)&lt;br /&gt;    Me.LabelFile.TabIndex = 0&lt;br /&gt;    Me.LabelFile.Text = "File"&lt;br /&gt;    Me.LabelFile.TextAlign = System.Drawing.ContentAlignment.MiddleCenter&lt;br /&gt;    '&lt;br /&gt;    'LabelHelp&lt;br /&gt;    '&lt;br /&gt;    Me.LabelHelp.BackColor = System.Drawing.Color.Transparent&lt;br /&gt;    Me.LabelHelp.ForeColor = System.Drawing.SystemColors.MenuText&lt;br /&gt;    Me.LabelHelp.Location = New System.Drawing.Point(64, 24)&lt;br /&gt;    Me.LabelHelp.Name = "LabelHelp"&lt;br /&gt;    Me.LabelHelp.Size = New System.Drawing.Size(32, 19)&lt;br /&gt;    Me.LabelHelp.TabIndex = 1&lt;br /&gt;    Me.LabelHelp.Text = "Help"&lt;br /&gt;    Me.LabelHelp.TextAlign = System.Drawing.ContentAlignment.MiddleCenter&lt;br /&gt;    '&lt;br /&gt;    'LabelResize&lt;br /&gt;    '&lt;br /&gt;    Me.LabelResize.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)&lt;br /&gt;    Me.LabelResize.AutoSize = True&lt;br /&gt;    Me.LabelResize.BackColor = System.Drawing.Color.Transparent&lt;br /&gt;    Me.LabelResize.Font = New System.Drawing.Font("Marlett", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(2, Byte))&lt;br /&gt;    Me.LabelResize.Location = New System.Drawing.Point(272, 138)&lt;br /&gt;    Me.LabelResize.Name = "LabelResize"&lt;br /&gt;    Me.LabelResize.Size = New System.Drawing.Size(16, 14)&lt;br /&gt;    Me.LabelResize.TabIndex = 2&lt;br /&gt;    Me.LabelResize.Text = "o"&lt;br /&gt;    '&lt;br /&gt;    'MainForm&lt;br /&gt;    '&lt;br /&gt;    Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)&lt;br /&gt;    Me.ClientSize = New System.Drawing.Size(288, 152)&lt;br /&gt;    Me.Controls.Add(Me.LabelResize)&lt;br /&gt;    Me.Controls.Add(Me.LabelHelp)&lt;br /&gt;    Me.Controls.Add(Me.LabelFile)&lt;br /&gt;    Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None&lt;br /&gt;    Me.Name = "MainForm"&lt;br /&gt;    Me.Text = "Shaped Form Example"&lt;br /&gt;    Me.ResumeLayout(False)&lt;br /&gt;  End Sub&lt;br /&gt;#End Region&lt;br /&gt;  Private ReadOnly Property TitleBar() As Region&lt;br /&gt;    Get&lt;br /&gt;    Return New Region(New Rectangle(0, 0, Width, 26))&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Private ReadOnly Property CloseButton() As GraphicsPath&lt;br /&gt;    Get&lt;br /&gt;    Dim gp As New GraphicsPath&lt;br /&gt;    gp.AddEllipse(New Rectangle(Width - 26, 3, 18, 18))&lt;br /&gt;    Return gp&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Private ReadOnly Property MinButton() As GraphicsPath&lt;br /&gt;    Get&lt;br /&gt;    Dim gp As New GraphicsPath&lt;br /&gt;    gp.AddEllipse(New Rectangle(Width - 49, 3, 18, 18))&lt;br /&gt;    Return gp&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Private ReadOnly Property FormShape() As GraphicsPath&lt;br /&gt;    Get&lt;br /&gt;    Dim gp As GraphicsPath = New GraphicsPath&lt;br /&gt;    Dim r As Rectangle = ClientRectangle&lt;br /&gt;    Dim radius As Int32 = 12&lt;br /&gt;    gp.AddArc(r.Left, r.Top + 24, radius, radius, 180, 90)&lt;br /&gt;    gp.AddArc(r.Left + 80 - radius, r.Top + 24 - radius, radius, radius, -270, -90)&lt;br /&gt;    gp.AddArc(r.Left + 80, r.Top, radius, radius, 180, 90)&lt;br /&gt;    gp.AddArc(r.Right - radius, r.Top, radius, radius, 270, 90)&lt;br /&gt;    gp.AddArc(r.Right - radius, r.Bottom - radius, radius, radius, 0, 90)&lt;br /&gt;    gp.AddArc(r.Left, r.Bottom - radius, radius, radius, 90, 90)&lt;br /&gt;    gp.CloseFigure()&lt;br /&gt;    Return gp&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Private ClosePress As Boolean = False&lt;br /&gt;  Private MinPress As Boolean = False&lt;br /&gt;  Private FormDrag As Boolean = False&lt;br /&gt;  Private FileActive As Boolean = False&lt;br /&gt;  Private HelpActive As Boolean = False&lt;br /&gt;  Private FileHot As Boolean = False&lt;br /&gt;  Private HelpHot As Boolean = False&lt;br /&gt;  Private Const WM_NCLBUTTONDOWN As Integer = &amp;amp;HA1&lt;br /&gt;  Private Const HT_CAPTION As Integer = &amp;amp;H2&lt;br /&gt;  Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams&lt;br /&gt;    Get&lt;br /&gt;    Dim cp As CreateParams = MyBase.CreateParams&lt;br /&gt;    Const WS_CLIPCHILDREN As Integer = &amp;amp;H2000000&lt;br /&gt;    Const WS_MINIMIZEBOX As Integer = &amp;amp;H20000&lt;br /&gt;    'Const WS_MAXIMIZEBOX As Integer = &amp;amp;H10000&lt;br /&gt;    Const WS_SYSMENU As Integer = &amp;amp;H80000&lt;br /&gt;    Const CS_DBLCLKS As Integer = &amp;amp;H8&lt;br /&gt;    Const CS_DROPSHADOW As Integer = &amp;amp;H20000&lt;br /&gt;    Dim ClassFlags As Integer = CS_DBLCLKS&lt;br /&gt;    Dim OSVER As Integer = Environment.OSVersion.Version.Major * 10&lt;br /&gt;    OSVER += Environment.OSVersion.Version.Minor&lt;br /&gt;    If OSVER &amp;gt;= 51 Then ClassFlags = CS_DBLCLKS Or CS_DROPSHADOW&lt;br /&gt;    cp.Style = WS_CLIPCHILDREN Or WS_MINIMIZEBOX Or WS_SYSMENU 'Or WS_MAXIMIZEBOX&lt;br /&gt;    cp.ClassStyle = ClassFlags&lt;br /&gt;    Return cp&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Private Sub MainForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;br /&gt;    Me.LabelFile.Location = New Point(2, 26)&lt;br /&gt;    Me.LabelHelp.Location = New Point(LabelFile.Right, 26)&lt;br /&gt;    Me.LabelFile.Font = SystemInformation.MenuFont&lt;br /&gt;    Me.LabelHelp.Font = SystemInformation.MenuFont&lt;br /&gt;    Me.Region = New Region(FormShape)&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub MainForm_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint&lt;br /&gt;    e.Graphics.FillRegion(Brushes.Green, TitleBar)&lt;br /&gt;    e.Graphics.FillRectangle(SystemBrushes.Menu, New Rectangle(0, 26, Width, 19))&lt;br /&gt;    If FileHot Then e.Graphics.FillRectangle(SystemBrushes.Highlight, LabelFile.Bounds)&lt;br /&gt;    If HelpHot Then e.Graphics.FillRectangle(SystemBrushes.Highlight, LabelHelp.Bounds)&lt;br /&gt;    Dim BorderPen As New Pen(Color.Green, 2)&lt;br /&gt;    BorderPen.Alignment = PenAlignment.Inset&lt;br /&gt;    e.Graphics.DrawPath(BorderPen, FormShape)&lt;br /&gt;    BorderPen.Dispose()&lt;br /&gt;    e.Graphics.SmoothingMode = SmoothingMode.HighQuality&lt;br /&gt;    Dim sf As New StringFormat(StringFormatFlags.NoWrap)&lt;br /&gt;    sf.Trimming = StringTrimming.EllipsisCharacter&lt;br /&gt;    sf.Alignment = StringAlignment.Center&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center&lt;br /&gt;    e.Graphics.DrawString(Me.Text, Control.DefaultFont, Brushes.White, RectangleF.FromLTRB(84, 0, MinButton.GetBounds.X, 24), sf)&lt;br /&gt;    If ClosePress Then&lt;br /&gt;    e.Graphics.FillPath(Brushes.Blue, CloseButton)&lt;br /&gt;    Else&lt;br /&gt;    e.Graphics.FillPath(Brushes.Red, CloseButton)&lt;br /&gt;    End If&lt;br /&gt;    If MinPress Then&lt;br /&gt;    e.Graphics.FillPath(Brushes.Red, MinButton)&lt;br /&gt;    Else&lt;br /&gt;    e.Graphics.FillPath(Brushes.Yellow, MinButton)&lt;br /&gt;    End If&lt;br /&gt;    Dim GlyphFont As New Font("marlett", Font.SizeInPoints, FontStyle.Bold, GraphicsUnit.Point)&lt;br /&gt;    e.Graphics.DrawString("0", GlyphFont, Brushes.Black, MinButton.GetBounds, sf)&lt;br /&gt;    e.Graphics.DrawString("r", GlyphFont, Brushes.Black, CloseButton.GetBounds, sf)&lt;br /&gt;    GlyphFont.Dispose()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub MainForm_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown&lt;br /&gt;    ClosePress = CloseButton.IsVisible(e.X, e.Y) AndAlso e.Button = MouseButtons.Left&lt;br /&gt;    MinPress = MinButton.IsVisible(e.X, e.Y) AndAlso e.Button = MouseButtons.Left&lt;br /&gt;    FormDrag = TitleBar.IsVisible(e.X, e.Y) AndAlso _&lt;br /&gt;        e.Button = MouseButtons.Left AndAlso _&lt;br /&gt;        ClosePress = False AndAlso MinPress = False&lt;br /&gt;    If FormDrag Then&lt;br /&gt;    Me.Capture = False&lt;br /&gt;    WndProc(Message.Create(Handle, WM_NCLBUTTONDOWN, IntPtr.op_Explicit(HT_CAPTION), IntPtr.Zero))&lt;br /&gt;    End If&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub MainForm_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove&lt;br /&gt;    Dim OverClose, OverMin As Boolean&lt;br /&gt;    OverClose = CloseButton.IsVisible(e.X, e.Y)&lt;br /&gt;    OverMin = MinButton.IsVisible(e.X, e.Y)&lt;br /&gt;    ClosePress = OverClose AndAlso e.Button = MouseButtons.Left&lt;br /&gt;    MinPress = OverMin AndAlso e.Button = MouseButtons.Left&lt;br /&gt;    If OverClose AndAlso ClosePress = False Then&lt;br /&gt;    ToolTip1.SetToolTip(Me, "Close")&lt;br /&gt;    ElseIf OverMin AndAlso MinPress = False Then&lt;br /&gt;    ToolTip1.SetToolTip(Me, "Minimize")&lt;br /&gt;    Else&lt;br /&gt;    ToolTip1.SetToolTip(Me, "")&lt;br /&gt;    End If&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub MainForm_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp&lt;br /&gt;    Dim OverClose, OverMin As Boolean&lt;br /&gt;    OverClose = CloseButton.IsVisible(e.X, e.Y)&lt;br /&gt;    OverMin = MinButton.IsVisible(e.X, e.Y)&lt;br /&gt;    If OverClose AndAlso ClosePress AndAlso e.Button = MouseButtons.Left Then&lt;br /&gt;    Me.Close()&lt;br /&gt;    End If&lt;br /&gt;    If OverMin AndAlso MinPress AndAlso e.Button = MouseButtons.Left Then&lt;br /&gt;    Me.WindowState = FormWindowState.Minimized&lt;br /&gt;    End If&lt;br /&gt;    If e.Button = MouseButtons.Right AndAlso TitleBar.IsVisible(e.X, e.Y) Then&lt;br /&gt;    If OverClose = False AndAlso OverMin = False Then&lt;br /&gt;      Const WM_GETSYSMENU As Integer = &amp;amp;H313&lt;br /&gt;      If e.Button = MouseButtons.Right Then&lt;br /&gt;        Dim pos As Point = Me.PointToScreen(New Point(e.X, e.Y))&lt;br /&gt;        Dim hPos As IntPtr = IntPtr.op_Explicit(CInt((pos.Y * &amp;amp;H10000) Or (pos.X And &amp;amp;HFFFF&amp;amp;)))&lt;br /&gt;        WndProc(Message.Create(Handle, WM_GETSYSMENU, IntPtr.Zero, hPos))&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    End If&lt;br /&gt;    ClosePress = False&lt;br /&gt;    MinPress = False&lt;br /&gt;    FormDrag = False&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub MenuAbout_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuAbout.Click&lt;br /&gt;    MessageBox.Show("Shaped Form Example!" &amp;amp; vbCrLf &amp;amp; "By Mick Doherty (http://dotnetrix.co.uk)", "About...", MessageBoxButtons.OK)&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub MenuExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuExit.Click&lt;br /&gt;    Application.Exit()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub LabelHelp_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles LabelHelp.MouseEnter&lt;br /&gt;    HelpHot = True&lt;br /&gt;    LabelHelp.ForeColor = SystemColors.HighlightText&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub LabelHelp_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LabelHelp.MouseUp&lt;br /&gt;    HelpActive = True&lt;br /&gt;    ContextMenu2.Show(LabelHelp, New Point(0, LabelHelp.Height))&lt;br /&gt;    HelpActive = False&lt;br /&gt;    LabelHelp.ForeColor = SystemColors.MenuText&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub LabelHelp_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles LabelHelp.MouseLeave&lt;br /&gt;    If HelpActive = False Then&lt;br /&gt;    HelpHot = False&lt;br /&gt;    LabelHelp.ForeColor = SystemColors.MenuText&lt;br /&gt;    End If&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub LabelFile_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles LabelFile.MouseEnter&lt;br /&gt;    FileHot = True&lt;br /&gt;    LabelFile.ForeColor = SystemColors.HighlightText&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub LabelFile_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LabelFile.MouseUp&lt;br /&gt;    FileActive = True&lt;br /&gt;    ContextMenu1.Show(LabelFile, New Point(0, LabelFile.Height))&lt;br /&gt;    FileActive = False&lt;br /&gt;    LabelFile.ForeColor = SystemColors.MenuText&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub LabelFile_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles LabelFile.MouseLeave&lt;br /&gt;    If FileActive = False Then&lt;br /&gt;    FileHot = False&lt;br /&gt;    LabelFile.ForeColor = SystemColors.MenuText&lt;br /&gt;    End If&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sizing As Boolean = False&lt;br /&gt;  Private SizeOffset As Point = Point.Empty&lt;br /&gt;  Private Sub LabelResize_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LabelResize.MouseDown&lt;br /&gt;    Sizing = True&lt;br /&gt;    SizeOffset = New Point(Me.Right - Cursor.Position.X, Me.Bottom - Cursor.Position.Y)&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub LabelResize_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LabelResize.MouseMove&lt;br /&gt;    If Sizing = True Then&lt;br /&gt;    'Clip cursor to dissallow sizing of form below 250x100&lt;br /&gt;    Dim ClipRectangle As Rectangle = RectangleToScreen(New Rectangle(250, 100, Width, Height))&lt;br /&gt;    ClipRectangle.Offset(SizeOffset)&lt;br /&gt;    Cursor.Clip = ClipRectangle&lt;br /&gt;    Me.Size = New Size(Cursor.Position.X + SizeOffset.X - Location.X, Cursor.Position.Y + SizeOffset.Y - Location.Y)&lt;br /&gt;    End If&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub LabelResize_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LabelResize.MouseUp&lt;br /&gt;    Sizing = False&lt;br /&gt;    Cursor.Clip = Nothing&lt;br /&gt;  End Sub&lt;br /&gt;  Private Sub MainForm_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize&lt;br /&gt;    Me.Region = New Region(FormShape)&lt;br /&gt;  End Sub&lt;br /&gt;End Class&lt;br /&gt;        &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Drawing.Drawing2D;&lt;br /&gt;namespace ShapedForm&lt;br /&gt;{&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Summary description for Form1.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  public class MainForm : System.Windows.Forms.Form&lt;br /&gt;  {&lt;br /&gt;    private System.ComponentModel.IContainer components;&lt;br /&gt;    public MainForm()&lt;br /&gt;    {&lt;br /&gt;    //&lt;br /&gt;    // Required for Windows Form Designer support&lt;br /&gt;    //&lt;br /&gt;    InitializeComponent();&lt;br /&gt;    //&lt;br /&gt;    // TODO: Add any constructor code after InitializeComponent call&lt;br /&gt;    //&lt;br /&gt;    this.SetStyle(ControlStyles.AllPaintingInWmPaint| ControlStyles.DoubleBuffer|ControlStyles.UserPaint|ControlStyles.ResizeRedraw,true);&lt;br /&gt;    }&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Clean up any resources being used.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    protected override void Dispose( bool disposing )&lt;br /&gt;    {&lt;br /&gt;    if( disposing )&lt;br /&gt;    {&lt;br /&gt;      if (components != null) &lt;br /&gt;      {&lt;br /&gt;        components.Dispose();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    base.Dispose( disposing );&lt;br /&gt;    }&lt;br /&gt;    #region Windows Form Designer generated code&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Required method for Designer support - do not modify&lt;br /&gt;    /// the contents of this method with the code editor.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private void InitializeComponent()&lt;br /&gt;    {&lt;br /&gt;    this.components = new System.ComponentModel.Container();&lt;br /&gt;    this.labelFile = new System.Windows.Forms.Label();&lt;br /&gt;    this.labelHelp = new System.Windows.Forms.Label();&lt;br /&gt;    this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);&lt;br /&gt;    this.contextMenu1 = new System.Windows.Forms.ContextMenu();&lt;br /&gt;    this.menuItem1 = new System.Windows.Forms.MenuItem();&lt;br /&gt;    this.menuItem2 = new System.Windows.Forms.MenuItem();&lt;br /&gt;    this.menuExit = new System.Windows.Forms.MenuItem();&lt;br /&gt;    this.contextMenu2 = new System.Windows.Forms.ContextMenu();&lt;br /&gt;    this.menuAbout = new System.Windows.Forms.MenuItem();&lt;br /&gt;    this.labelResize = new System.Windows.Forms.Label();&lt;br /&gt;    this.SuspendLayout();&lt;br /&gt;    // &lt;br /&gt;    // labelFile&lt;br /&gt;    //&lt;br /&gt;    this.labelFile.BackColor = System.Drawing.Color.Transparent;&lt;br /&gt;    this.labelFile.ForeColor = System.Drawing.SystemColors.MenuText;&lt;br /&gt;    this.labelFile.Location = new System.Drawing.Point(8, 24);&lt;br /&gt;    this.labelFile.Name = "labelFile";&lt;br /&gt;    this.labelFile.Size = new System.Drawing.Size(32, 19);&lt;br /&gt;    this.labelFile.TabIndex = 0;&lt;br /&gt;    this.labelFile.Text = "File";&lt;br /&gt;    this.labelFile.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;&lt;br /&gt;    this.labelFile.MouseEnter += new System.EventHandler(this.labelFile_MouseEnter);&lt;br /&gt;    this.labelFile.MouseUp += new System.Windows.Forms.MouseEventHandler(this.labelFile_MouseUp);&lt;br /&gt;    this.labelFile.MouseLeave += new System.EventHandler(this.labelFile_MouseLeave);&lt;br /&gt;    // &lt;br /&gt;    // labelHelp&lt;br /&gt;    //&lt;br /&gt;    this.labelHelp.BackColor = System.Drawing.Color.Transparent;&lt;br /&gt;    this.labelHelp.ForeColor = System.Drawing.SystemColors.MenuText;&lt;br /&gt;    this.labelHelp.Location = new System.Drawing.Point(64, 24);&lt;br /&gt;    this.labelHelp.Name = "labelHelp";&lt;br /&gt;    this.labelHelp.Size = new System.Drawing.Size(32, 19);&lt;br /&gt;    this.labelHelp.TabIndex = 1;&lt;br /&gt;    this.labelHelp.Text = "Help";&lt;br /&gt;    this.labelHelp.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;&lt;br /&gt;    this.labelHelp.MouseEnter += new System.EventHandler(this.labelHelp_MouseEnter);&lt;br /&gt;    this.labelHelp.MouseUp += new System.Windows.Forms.MouseEventHandler(this.labelHelp_MouseUp);&lt;br /&gt;    this.labelHelp.MouseLeave += new System.EventHandler(this.labelHelp_MouseLeave);&lt;br /&gt;    // &lt;br /&gt;    // contextMenu1&lt;br /&gt;    // &lt;br /&gt;    this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {&lt;br /&gt;                               this.menuItem1,&lt;br /&gt;                               this.menuItem2,&lt;br /&gt;                               this.menuExit});&lt;br /&gt;    // &lt;br /&gt;    // menuItem1&lt;br /&gt;    //&lt;br /&gt;    this.menuItem1.Index = 0;&lt;br /&gt;    this.menuItem1.Text = "menuItem1";&lt;br /&gt;    // &lt;br /&gt;    // menuItem2&lt;br /&gt;    // &lt;br /&gt;    this.menuItem2.Index = 1;&lt;br /&gt;    this.menuItem2.Text = "-";&lt;br /&gt;    // &lt;br /&gt;    // menuExit&lt;br /&gt;    // &lt;br /&gt;    this.menuExit.Index = 2;&lt;br /&gt;    this.menuExit.Text = "Exit";&lt;br /&gt;    this.menuExit.Click += new System.EventHandler(this.menuExit_Click);&lt;br /&gt;    // &lt;br /&gt;    // contextMenu2&lt;br /&gt;    //&lt;br /&gt;    this.contextMenu2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {&lt;br /&gt;                               this.menuAbout});&lt;br /&gt;    // &lt;br /&gt;    // menuAbout&lt;br /&gt;    // &lt;br /&gt;    this.menuAbout.Index = 0;&lt;br /&gt;    this.menuAbout.Text = "About";&lt;br /&gt;    this.menuAbout.Click += new System.EventHandler(this.menuAbout_Click);&lt;br /&gt;    // &lt;br /&gt;    // labelResize&lt;br /&gt;    //&lt;br /&gt;    this.labelResize.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));&lt;br /&gt;    this.labelResize.AutoSize = true;&lt;br /&gt;    this.labelResize.BackColor = System.Drawing.Color.Transparent;&lt;br /&gt;    this.labelResize.Font = new System.Drawing.Font("Marlett", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(2)));&lt;br /&gt;    this.labelResize.Location = new System.Drawing.Point(272, 138);&lt;br /&gt;    this.labelResize.Name = "labelResize";&lt;br /&gt;    this.labelResize.Size = new System.Drawing.Size(16, 14);&lt;br /&gt;    this.labelResize.TabIndex = 2;&lt;br /&gt;    this.labelResize.Text = "o";&lt;br /&gt;    this.labelResize.MouseUp += new System.Windows.Forms.MouseEventHandler(this.labelResize_MouseUp);&lt;br /&gt;    this.labelResize.MouseMove += new System.Windows.Forms.MouseEventHandler(this.labelResize_MouseMove);&lt;br /&gt;    this.labelResize.MouseDown += new System.Windows.Forms.MouseEventHandler(this.labelResize_MouseDown);&lt;br /&gt;     // &lt;br /&gt;    // MainForm&lt;br /&gt;    //&lt;br /&gt;    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);&lt;br /&gt;    this.ClientSize = new System.Drawing.Size(288, 152);&lt;br /&gt;    this.Controls.Add(this.labelResize);&lt;br /&gt;    this.Controls.Add(this.labelHelp);&lt;br /&gt;    this.Controls.Add(this.labelFile);&lt;br /&gt;    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;&lt;br /&gt;    this.Name = "Form1";&lt;br /&gt;    this.Text = "Shaped Form Example";&lt;br /&gt;    this.Resize += new System.EventHandler(this.MainForm_Resize);&lt;br /&gt;    this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);&lt;br /&gt;    this.Load += new System.EventHandler(this.Form1_Load);&lt;br /&gt;    this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp);&lt;br /&gt;    this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);&lt;br /&gt;    this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);&lt;br /&gt;    this.ResumeLayout(false);&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// The main entry point for the application.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    [STAThread]&lt;br /&gt;    static void Main() &lt;br /&gt;    {&lt;br /&gt;    Application.Run(new MainForm());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private Region TitleBar&lt;br /&gt;    {&lt;br /&gt;    get{return new Region(new Rectangle(0, 0, Width, 26));}&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private GraphicsPath CloseButton&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      GraphicsPath gp = new  GraphicsPath();&lt;br /&gt;      gp.AddEllipse(new Rectangle(Width - 26, 3, 18, 18));&lt;br /&gt;      return gp;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private GraphicsPath MinButton&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      GraphicsPath gp = new GraphicsPath();&lt;br /&gt;      gp.AddEllipse(new Rectangle(Width - 49, 3, 18, 18));&lt;br /&gt;      return gp;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private GraphicsPath FormShape&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      GraphicsPath gp = new GraphicsPath();&lt;br /&gt;      Rectangle  r = ClientRectangle;&lt;br /&gt;      int radius = 12;&lt;br /&gt;          &lt;br /&gt;      gp.AddArc(r.Left, r.Top + 24, radius, radius, 180, 90);&lt;br /&gt;      gp.AddArc(r.Left + 80 - radius, r.Top + 24 - radius, radius, radius, -270, -90);&lt;br /&gt;      gp.AddArc(r.Left + 80, r.Top, radius, radius, 180, 90);&lt;br /&gt;      gp.AddArc(r.Right - radius, r.Top, radius, radius, 270, 90);&lt;br /&gt;      gp.AddArc(r.Right - radius, r.Bottom - radius, radius, radius, 0, 90);&lt;br /&gt;      gp.AddArc(r.Left, r.Bottom - radius, radius, radius, 90, 90);&lt;br /&gt;      gp.CloseFigure();&lt;br /&gt;          &lt;br /&gt;      return gp;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private bool ClosePress = false;&lt;br /&gt;    private bool MinPress = false;&lt;br /&gt;    private bool FormDrag = false;&lt;br /&gt;    private bool FileActive = false;&lt;br /&gt;    private bool HelpActive = false;&lt;br /&gt;    private bool FileHot = false;&lt;br /&gt;    private bool HelpHot = false;&lt;br /&gt;    private const int WM_NCLBUTTONDOWN = 0xA1;&lt;br /&gt;    private System.Windows.Forms.Label labelFile;&lt;br /&gt;    private System.Windows.Forms.Label labelHelp;&lt;br /&gt;    private System.Windows.Forms.ToolTip toolTip1;&lt;br /&gt;    private System.Windows.Forms.ContextMenu contextMenu1;&lt;br /&gt;    private System.Windows.Forms.ContextMenu contextMenu2;&lt;br /&gt;    private System.Windows.Forms.MenuItem menuItem1;&lt;br /&gt;    private System.Windows.Forms.MenuItem menuItem2;&lt;br /&gt;    private System.Windows.Forms.MenuItem menuAbout;&lt;br /&gt;    private System.Windows.Forms.MenuItem menuExit;&lt;br /&gt;    private System.Windows.Forms.Label labelResize;&lt;br /&gt;    private const int HT_CAPTION = 0x2;&lt;br /&gt;    protected override  System.Windows.Forms.CreateParams CreateParams&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      CreateParams cp = base.CreateParams;&lt;br /&gt;      const int WS_CLIPCHILDREN = 0x2000000;&lt;br /&gt;      const int WS_MINIMIZEBOX = 0x20000;&lt;br /&gt;      //const int WS_MAXIMIZEBOX = 0x10000;&lt;br /&gt;      const int WS_SYSMENU = 0x80000;&lt;br /&gt;      const int CS_DBLCLKS = 0x8;&lt;br /&gt;      const int CS_DROPSHADOW = 0x20000;&lt;br /&gt;      &lt;br /&gt;      int ClassFlags = CS_DBLCLKS;&lt;br /&gt;      int OSVER = Environment.OSVersion.Version.Major * 10;&lt;br /&gt;      OSVER += Environment.OSVersion.Version.Minor;&lt;br /&gt;      if (OSVER &amp;gt;= 51) ClassFlags = CS_DBLCLKS | CS_DROPSHADOW;&lt;br /&gt;      &lt;br /&gt;      cp.Style = WS_CLIPCHILDREN | WS_MINIMIZEBOX | WS_SYSMENU; //| WS_MAXIMIZEBOX&lt;br /&gt;      cp.ClassStyle = ClassFlags;&lt;br /&gt;      &lt;br /&gt;      return cp;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    this.labelFile.Location = new Point(2, 26);&lt;br /&gt;    this.labelHelp.Location = new Point(labelFile.Right, 26);&lt;br /&gt;    this.labelFile.Font = SystemInformation.MenuFont;&lt;br /&gt;    this.labelHelp.Font = SystemInformation.MenuFont;&lt;br /&gt;    this.Region = new Region(FormShape);  &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    e.Graphics.FillRegion(Brushes.Green, TitleBar);&lt;br /&gt;    e.Graphics.FillRectangle(SystemBrushes.Menu, new Rectangle(0, 26, Width, 19));&lt;br /&gt;    if (FileHot) e.Graphics.FillRectangle(SystemBrushes.Highlight, labelFile.Bounds);&lt;br /&gt;    if (HelpHot) e.Graphics.FillRectangle(SystemBrushes.Highlight, labelHelp.Bounds);&lt;br /&gt;    Pen BorderPen = new Pen(Color.Green, 2);&lt;br /&gt;    BorderPen.Alignment = PenAlignment.Inset;&lt;br /&gt;    e.Graphics.DrawPath(BorderPen, FormShape);&lt;br /&gt;    BorderPen.Dispose();&lt;br /&gt;    &lt;br /&gt;    e.Graphics.SmoothingMode = SmoothingMode.HighQuality;&lt;br /&gt;    &lt;br /&gt;    StringFormat sf= new StringFormat(StringFormatFlags.NoWrap);&lt;br /&gt;    sf.Trimming = StringTrimming.EllipsisCharacter;&lt;br /&gt;    sf.Alignment = StringAlignment.Center;&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center;&lt;br /&gt;    &lt;br /&gt;    e.Graphics.DrawString(this.Text, Control.DefaultFont, Brushes.White, RectangleF.FromLTRB(84, 0, MinButton.GetBounds().X, 24), sf);&lt;br /&gt;    &lt;br /&gt;    if (ClosePress)&lt;br /&gt;      e.Graphics.FillPath(Brushes.Blue, CloseButton);&lt;br /&gt;    else&lt;br /&gt;      e.Graphics.FillPath(Brushes.Red, CloseButton);&lt;br /&gt;    &lt;br /&gt;    if (MinPress)&lt;br /&gt;      e.Graphics.FillPath(Brushes.Red, MinButton);&lt;br /&gt;    else&lt;br /&gt;      e.Graphics.FillPath(Brushes.Yellow, MinButton);&lt;br /&gt;    &lt;br /&gt;    Font GlyphFont = new Font("marlett", Font.SizeInPoints, FontStyle.Bold, GraphicsUnit.Point);&lt;br /&gt;    e.Graphics.DrawString("0", GlyphFont, Brushes.Black, MinButton.GetBounds(), sf);&lt;br /&gt;    e.Graphics.DrawString("r", GlyphFont, Brushes.Black, CloseButton.GetBounds(), sf);&lt;br /&gt;    GlyphFont.Dispose();&lt;br /&gt;    &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    ClosePress = CloseButton.IsVisible(e.X, e.Y) &amp;amp;&amp;amp; e.Button == MouseButtons.Left;&lt;br /&gt;    MinPress = MinButton.IsVisible(e.X, e.Y) &amp;amp;&amp;amp; e.Button == MouseButtons.Left;&lt;br /&gt;    FormDrag = TitleBar.IsVisible(e.X, e.Y) &amp;amp;&amp;amp;&lt;br /&gt;    e.Button == MouseButtons.Left &amp;amp;&amp;amp;&lt;br /&gt;      ClosePress == false &amp;amp;&amp;amp; MinPress == false;&lt;br /&gt;    if (FormDrag)&lt;br /&gt;    {&lt;br /&gt;    this.Capture = false;&lt;br /&gt;    Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HT_CAPTION, IntPtr.Zero);&lt;br /&gt;    WndProc(ref msg);&lt;br /&gt;    }&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    bool OverClose, OverMin;&lt;br /&gt;    OverClose = CloseButton.IsVisible(e.X, e.Y);&lt;br /&gt;    OverMin = MinButton.IsVisible(e.X, e.Y);&lt;br /&gt;    ClosePress = OverClose &amp;amp;&amp;amp; e.Button == MouseButtons.Left;&lt;br /&gt;    MinPress = OverMin &amp;amp;&amp;amp; e.Button == MouseButtons.Left;&lt;br /&gt;    &lt;br /&gt;    if (OverClose &amp;amp;&amp;amp; ClosePress == false)&lt;br /&gt;      toolTip1.SetToolTip(this, "Close");&lt;br /&gt;    else if (OverMin &amp;amp;&amp;amp; MinPress == false)&lt;br /&gt;      toolTip1.SetToolTip(this, "Minimize");&lt;br /&gt;    else&lt;br /&gt;      toolTip1.SetToolTip(this, "");&lt;br /&gt;    &lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    bool OverClose, OverMin;&lt;br /&gt;    OverClose = CloseButton.IsVisible(e.X, e.Y);&lt;br /&gt;    OverMin = MinButton.IsVisible(e.X, e.Y);&lt;br /&gt;    &lt;br /&gt;    if (OverClose &amp;amp;&amp;amp; ClosePress &amp;amp;&amp;amp; e.Button == MouseButtons.Left)&lt;br /&gt;      this.Close();&lt;br /&gt;    if (OverMin &amp;amp;&amp;amp; MinPress &amp;amp;&amp;amp; e.Button == MouseButtons.Left)&lt;br /&gt;      this.WindowState = FormWindowState.Minimized;&lt;br /&gt;    &lt;br /&gt;    if (e.Button == MouseButtons.Right &amp;amp;&amp;amp; TitleBar.IsVisible(e.X, e.Y))&lt;br /&gt;    {&lt;br /&gt;      if (OverClose == false &amp;amp;&amp;amp; OverMin == false)&lt;br /&gt;      {&lt;br /&gt;      const int WM_GETSYSMENU = 0x313;&lt;br /&gt;        if (e.Button == MouseButtons.Right)&lt;br /&gt;        {&lt;br /&gt;        Point pos = this.PointToScreen(new Point(e.X, e.Y));&lt;br /&gt;        IntPtr hPos = (IntPtr)((int)((pos.Y * 0x10000) | (pos.X &amp;amp; 0xFFFF)));&lt;br /&gt;        Message msg = Message.Create(this.Handle, WM_GETSYSMENU, IntPtr.Zero, hPos);&lt;br /&gt;        WndProc(ref msg);&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    ClosePress = false;&lt;br /&gt;    MinPress = false;&lt;br /&gt;    FormDrag = false;&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private void menuAbout_Click(object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    MessageBox.Show("Shaped Form Example!\nBy Mick Doherty (http://dotnetrix.co.uk)", "About...", MessageBoxButtons.OK);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void menuExit_Click(object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    Application.Exit();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void labelHelp_MouseEnter(object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    HelpHot = true;&lt;br /&gt;    labelHelp.ForeColor = SystemColors.HighlightText;&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void labelHelp_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    HelpActive = true;&lt;br /&gt;    contextMenu2.Show(labelHelp, new Point(0, labelHelp.Height));&lt;br /&gt;    HelpActive = false;&lt;br /&gt;    labelHelp.ForeColor = SystemColors.MenuText;&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void labelHelp_MouseLeave(object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    if (HelpActive == false)&lt;br /&gt;    {&lt;br /&gt;      HelpHot = false;&lt;br /&gt;      labelHelp.ForeColor = SystemColors.MenuText;&lt;br /&gt;    }&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void labelFile_MouseEnter(object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    FileHot = true;&lt;br /&gt;    labelFile.ForeColor = SystemColors.HighlightText;&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void labelFile_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    FileActive = true;&lt;br /&gt;    contextMenu1.Show(labelFile, new Point(0, labelFile.Height));&lt;br /&gt;    FileActive = false;&lt;br /&gt;    labelFile.ForeColor = SystemColors.MenuText;&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void labelFile_MouseLeave(object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    if (FileActive == false)&lt;br /&gt;    {&lt;br /&gt;      FileHot = false;&lt;br /&gt;      labelFile.ForeColor = SystemColors.MenuText;&lt;br /&gt;    }&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private bool Sizing = false;&lt;br /&gt;    private Point SizeOffset = Point.Empty;&lt;br /&gt;    private void labelResize_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    Sizing = true;&lt;br /&gt;    SizeOffset = new Point(this.Right - Cursor.Position.X, this.Bottom - Cursor.Position.Y);    &lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private void labelResize_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    if (Sizing)&lt;br /&gt;    {&lt;br /&gt;      //Clip cursor to dissallow sizing of form below 250x100&lt;br /&gt;      Rectangle ClipRectangle = RectangleToScreen(new Rectangle(250, 100, Width, Height));&lt;br /&gt;      ClipRectangle.Offset(SizeOffset);&lt;br /&gt;      Cursor.Clip = ClipRectangle;&lt;br /&gt;      this.Size = new Size(Cursor.Position.X + SizeOffset.X - Location.X, Cursor.Position.Y + SizeOffset.Y - Location.Y);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private void labelResize_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    Sizing = false;&lt;br /&gt;    Cursor.Clip = Rectangle.Empty;    &lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    private void MainForm_Resize(object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    this.Region=new Region(FormShape);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;        &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;by: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Dohertys'&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-7074608882490659850?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/7074608882490659850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/shaped-form-resizable-and-moveable.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/7074608882490659850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/7074608882490659850'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/shaped-form-resizable-and-moveable.html' title='Shaped Form Resizable and Moveable'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-dJ8RpEV0NMY/TjWKsOJSgRI/AAAAAAAAARk/SJKZgsl4Ihc/s72-c/Shaped+Form+Resizable+and+Moveable.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-1965331004797374472</id><published>2011-07-29T10:24:00.000-07:00</published><updated>2011-07-29T10:24:57.974-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multimedia'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Premiere'/><title type='text'>Repair Encoding Error Adobe Media Encoder CS4</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;"&lt;span style="font-size: x-small;"&gt;&lt;b&gt;Could not read from the source"&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;When you will encode your premiere project squence with Adobe Media Encoder but you have failed?? and get some message like this:&lt;br /&gt;&lt;div style="border: solid 1px white; padding: 3px;"&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;-----------------------------------------------------------------------------&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;Could not read from the source. Please check if it has moved or been deleted.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-----------------------------------------------------------------------------&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;Yes, I hate it..&lt;br /&gt;You know what's wrong? what is the reason? this is the reason:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"You removed an earlier version of Adobe Premiere Pro or Adobe Creative Suite on the same computer."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IT CAN BE FIXED, AND YOU CAN RENDER YOU ADOBE PREMIERE PROJECT WITH YOUR ADOBE MEDIA ENCODER.&lt;/b&gt;&lt;br /&gt;I Found 2 solution from the adobe.com site. read it (Its Works):&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;[x] Solution 1: Create a shortcut to the Premiere Pro executable file, rename the shortcut to Premiere, and move the shortcut to C:\Program Files\Common Files\Adobe\dynamiclink.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Close all Adobe applications.&lt;/li&gt;&lt;li&gt;In Windows Explorer, navigate to C:\Program Files\Adobe\Adobe Premiere Pro CS4. (If you installed Premiere Pro CS4 in a location other than the default of C:\Program Files\Adobe, then navigate to your custom installation location.)&lt;/li&gt;&lt;li&gt;Right-click on Adobe Premiere Pro.exe (which might appear without the .exe extension) and choose Create Shortcut.&lt;/li&gt;&lt;li&gt;Rename the newly created shortcut to just Premiere.&lt;/li&gt;&lt;/ul&gt;&lt;b style="color: red;"&gt;[!]&lt;/b&gt; &lt;i&gt;Important: The name of the shortcut must be exactly Premiere with no other characters.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Open a second Windows Explorer window, and navigate to C:\Program Files\Common Files\Adobe\dynamiclink.&lt;/i&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Move the Premiere shortcut that you created into the dynamiclink folder.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;[x] Solution 2&lt;/b&gt;: &lt;b&gt;Remove and reinstall all Premiere Pro CS4 components or all Adobe Creative Suite 4 components&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Do one of the following:&lt;/li&gt;&lt;/ul&gt;&lt;ol style="margin-left: 40px; text-align: left;"&gt;&lt;li&gt;Windows XP: Choose Start &amp;gt; Control Panel &amp;gt; Add or Remove Programs.&lt;/li&gt;&lt;li&gt;Windows Vista: Choose Start &amp;gt; Control Panel &amp;gt; Programs and Features.&lt;/li&gt;&lt;/ol&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;In the list of installed programs, select Adobe Premiere Pro CS4, Adobe Creative Suite 4 Production Premium, or Adobe Creative Suite 4 Master Collection.&lt;/li&gt;&lt;li&gt;Click Change/Remove (Windows XP) or Uninstall (Windows Vista).&lt;/li&gt;&lt;li&gt;Follow the on-screen instructions to remove all components of Premiere Pro CS4 (including Adobe Encore CS4 and Adobe OnLocation CS4) or to remove all components of your edition of Adobe Creative Suite 4.&lt;/li&gt;&lt;li&gt;Re-install your Adobe software.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;Based from: &lt;a href="http://kb2.adobe.com/cps/407/kb407106.html"&gt;http://kb2.adobe.com/cps/407/kb407106.html&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-1965331004797374472?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/1965331004797374472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/repair-encoding-error-adobe-media.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1965331004797374472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1965331004797374472'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/repair-encoding-error-adobe-media.html' title='Repair Encoding Error Adobe Media Encoder CS4'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-8333082158849678465</id><published>2011-07-27T12:50:00.000-07:00</published><updated>2011-07-27T12:50:18.138-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Slider'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Control'/><title type='text'>Create Slider Control With Custom Color</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--jkkWhlVe7Y/TjBrSE20HJI/AAAAAAAAARM/Y9ni6oUwVeU/s1600/customt+rackbar+controls+vb+net+csharp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/--jkkWhlVe7Y/TjBrSE20HJI/AAAAAAAAARM/Y9ni6oUwVeU/s1600/customt+rackbar+controls+vb+net+csharp.png" /&gt;&lt;/a&gt;&lt;/div&gt;All too often I see examples of custom controls which unnecessarily add child controls. For instance, a custom trackbar control may have a label or panel added to act as the scrolling thumb tab.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt; In this instance that's not so bad as it only creates one extra window handle, but where several such child controls are added the user will see what is percieved as flicker as each window is individually painted one after the other. No amount of doublebuffering will cure this.&lt;br /&gt;&lt;br /&gt;Since we need to respond to mouse, keyboard or code change events and then calculate the exact bounds of the child control, it really makes no sense to add the extra control. We may as well apply those bounds to a rectangle instead, and then paint within this rectangle (don't have to paint a Rectangle just need to paint inside it).&lt;br /&gt;&lt;br /&gt;The following example shows how to define and use a rectangle for this purpose. I have tried to make it behave just like a standard System.Windows.Forms.Trackbar control, but have made no offort to have it look like one. Hopefully, you'll be able to apply the same principles to other custom controls, perhaps using some of the many control renderers to simulate "lite" controls.&lt;br /&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Imports System.ComponentModel&lt;br /&gt;Namespace Dotnetrix.Samples.VB&lt;br /&gt;  &amp;lt;DefaultEvent(&amp;quot;Scroll&amp;quot;), _&lt;br /&gt;  DefaultProperty(&amp;quot;Value&amp;quot;), _&lt;br /&gt;  ToolboxBitmap(GetType(System.Windows.Forms.TrackBar))&amp;gt; _&lt;br /&gt;  Public Class TrackBar&lt;br /&gt;    Inherits Control&lt;br /&gt;    Public Sub New()&lt;br /&gt;    MyBase.New()&lt;br /&gt;    Me.SetStyle(ControlStyles.SupportsTransparentBackColor Or ControlStyles.OptimizedDoubleBuffer Or _&lt;br /&gt;         ControlStyles.AllPaintingInWmPaint Or ControlStyles.Selectable Or ControlStyles.UserMouse, True)&lt;br /&gt;    Me.Thumb = New Rectangle()&lt;br /&gt;    Me.LayoutTrackBarParts()&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides ReadOnly Property DefaultSize() As System.Drawing.Size&lt;br /&gt;    Get&lt;br /&gt;      Return New Size(100, 60)&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;#Region &amp;quot; Event Delarations &amp;quot;&lt;br /&gt;    Public Event Scroll As EventHandler&lt;br /&gt;    Public Event ValueChanged As EventHandler&lt;br /&gt;#End Region&lt;br /&gt;#Region &amp;quot; Private Instance Variables &amp;quot;&lt;br /&gt;    Private _orientation As Orientation = Orientation.Horizontal&lt;br /&gt;    Private _minimum As Int32&lt;br /&gt;    Private _maximum As Int32 = 10&lt;br /&gt;    Private _smallChange As Int32 = 1&lt;br /&gt;    Private _largeChange As Int32 = 5&lt;br /&gt;    Private _value As Int32&lt;br /&gt;    Private _tickStyle As TickStyle = TickStyle.BottomRight&lt;br /&gt;    Private _tickFrequency As Int32 = 1&lt;br /&gt;    Private _thumbDragging As Boolean&lt;br /&gt;    Private _scrollUp As Boolean&lt;br /&gt;    Private Thumb As Rectangle&lt;br /&gt;    Private _thumbFocused As Boolean&lt;br /&gt;    Private scrollTimer As Timer&lt;br /&gt;#End Region&lt;br /&gt;#Region &amp;quot; Public properties &amp;quot;&lt;br /&gt;    &amp;lt;DefaultValue(GetType(Orientation), &amp;quot;Horizontal&amp;quot;)&amp;gt; _&lt;br /&gt;    Public Property Orientation() As Orientation&lt;br /&gt;    Get&lt;br /&gt;      Return _orientation&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Orientation)&lt;br /&gt;      If (_orientation &amp;lt;&amp;gt; value) Then&lt;br /&gt;        _orientation = value&lt;br /&gt;        Dim w, h As Int32&lt;br /&gt;        w = Me.Height&lt;br /&gt;        h = Me.Width&lt;br /&gt;        Me.Size = New Size(w, h)&lt;br /&gt;        Me.LayoutTrackBarParts()&lt;br /&gt;        Me.Invalidate()&lt;br /&gt;      End If&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    &amp;lt;DefaultValue(0), _&lt;br /&gt;    RefreshProperties(RefreshProperties.All)&amp;gt; _&lt;br /&gt;    Public Property Minimum() As Int32&lt;br /&gt;    Get&lt;br /&gt;      Return _minimum&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Int32)&lt;br /&gt;      If (_minimum &amp;lt;&amp;gt; value) Then&lt;br /&gt;        _minimum = value&lt;br /&gt;        If (_maximum &amp;lt;= value) Then&lt;br /&gt;        _maximum = value&lt;br /&gt;        End If&lt;br /&gt;        Me.LayoutTrackBarParts()&lt;br /&gt;        Me.Invalidate()&lt;br /&gt;      End If&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    &amp;lt;DefaultValue(10)&amp;gt; _&lt;br /&gt;    Public Property Maximum() As Int32&lt;br /&gt;    Get&lt;br /&gt;      Return _maximum&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Int32)&lt;br /&gt;      If (_maximum &amp;lt;&amp;gt; value) Then&lt;br /&gt;        _maximum = value&lt;br /&gt;        If (Minimum &amp;gt;= value) Then&lt;br /&gt;        Minimum = value&lt;br /&gt;        End If&lt;br /&gt;        Me.LayoutTrackBarParts()&lt;br /&gt;        Me.Invalidate()&lt;br /&gt;      End If&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    &amp;lt;DefaultValue(1)&amp;gt; _&lt;br /&gt;    Public Property SmallChange() As Int32&lt;br /&gt;    Get&lt;br /&gt;      Return _smallChange&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Int32)&lt;br /&gt;      _smallChange = value&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    &amp;lt;DefaultValue(5)&amp;gt; _&lt;br /&gt;    Public Property LargeChange() As Int32&lt;br /&gt;    Get&lt;br /&gt;      Return _largeChange&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Int32)&lt;br /&gt;      _largeChange = value&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    Public Property Value() As Int32&lt;br /&gt;    Get&lt;br /&gt;      If (_value &amp;lt; Me.Minimum) Then&lt;br /&gt;        Return Me.Minimum&lt;br /&gt;      End If&lt;br /&gt;      Return _value&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Int32)&lt;br /&gt;      If (value &amp;lt; Me.Minimum) Then&lt;br /&gt;        value = _minimum&lt;br /&gt;      End If&lt;br /&gt;      If (value &amp;gt; _maximum) Then&lt;br /&gt;        value = _maximum&lt;br /&gt;      End If&lt;br /&gt;      If (value &amp;lt;&amp;gt; _value) Then&lt;br /&gt;        _value = value&lt;br /&gt;        Me.LayoutTrackBarParts()&lt;br /&gt;        Me.OnValueChanged(EventArgs.Empty)&lt;br /&gt;      End If&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    Private Function ShouldSerializeValue() As Boolean&lt;br /&gt;    Return Me._value &amp;lt;&amp;gt; Me.Minimum&lt;br /&gt;    End Function&lt;br /&gt;    Private Sub ResetValue()&lt;br /&gt;    Me._value = Me.Minimum&lt;br /&gt;    End Sub&lt;br /&gt;    &amp;lt;DefaultValue(False)&amp;gt; _&lt;br /&gt;    Public Shadows Property TabStop() As Boolean&lt;br /&gt;    Get&lt;br /&gt;      Return MyBase.TabStop&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Boolean)&lt;br /&gt;      MyBase.TabStop = value&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    &amp;lt;DefaultValue(&amp;quot;&amp;quot;), _&lt;br /&gt;    Browsable(False), _&lt;br /&gt;    EditorBrowsable(EditorBrowsableState.Never)&amp;gt; _&lt;br /&gt;    Public Overrides Property Text() As String&lt;br /&gt;    Get&lt;br /&gt;      Return String.Empty&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As String)&lt;br /&gt;      MyBase.Text = String.Empty&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    &amp;lt;DefaultValue(GetType(TickStyle), &amp;quot;BottomRight&amp;quot;)&amp;gt; _&lt;br /&gt;    Public Property TickStyle() As TickStyle&lt;br /&gt;    Get&lt;br /&gt;      Return _tickStyle&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As TickStyle)&lt;br /&gt;      If (_tickStyle &amp;lt;&amp;gt; value) Then&lt;br /&gt;        _tickStyle = value&lt;br /&gt;        Me.Invalidate()&lt;br /&gt;      End If&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;    &amp;lt;DefaultValue(1)&amp;gt; _&lt;br /&gt;    Public Property TickFrequency() As Int32&lt;br /&gt;    Get&lt;br /&gt;      Return _tickFrequency&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Int32)&lt;br /&gt;      If (_tickFrequency &amp;lt;&amp;gt; value) Then&lt;br /&gt;        _tickFrequency = value&lt;br /&gt;        Me.Invalidate()&lt;br /&gt;      End If&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;#End Region&lt;br /&gt;#Region &amp;quot; private Properties &amp;quot;&lt;br /&gt;    Private ReadOnly Property Horizontal() As Boolean&lt;br /&gt;    Get&lt;br /&gt;      Return _orientation = Orientation.Horizontal&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;    Private Property ThumbDragging() As Boolean&lt;br /&gt;    Get&lt;br /&gt;      Return _thumbDragging&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal value As Boolean)&lt;br /&gt;      If (_thumbDragging &amp;lt;&amp;gt; value) Then&lt;br /&gt;        _thumbDragging = value&lt;br /&gt;        Me.Invalidate()&lt;br /&gt;      End If&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;#End Region&lt;br /&gt;#Region &amp;quot; Overridden Methods &amp;quot;&lt;br /&gt;    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)&lt;br /&gt;    'Do default painting&lt;br /&gt;    MyBase.OnPaint(e)&lt;br /&gt;    'Draw Tick Marks&lt;br /&gt;    DrawTicks(e.Graphics)&lt;br /&gt;    'Draw Channel&lt;br /&gt;    Dim channelBounds As Rectangle&lt;br /&gt;    If Me.Horizontal Then&lt;br /&gt;      channelBounds = New Rectangle(6, Me.Height / 2 - 2, Me.Width - 16, 4)&lt;br /&gt;    Else&lt;br /&gt;      channelBounds = New Rectangle(Me.Width / 2 - 2, 6, 4, Me.Height - 16)&lt;br /&gt;    End If&lt;br /&gt;    ControlPaint.DrawBorder3D(e.Graphics, channelBounds, Border3DStyle.Sunken)&lt;br /&gt;    ' Draw the Thumb Object&lt;br /&gt;    Using brush As SolidBrush = New SolidBrush(Color.Blue)&lt;br /&gt;      If (_thumbFocused) Then&lt;br /&gt;        brush.Color = Color.Green&lt;br /&gt;      End If&lt;br /&gt;      If (ThumbDragging) Then&lt;br /&gt;        brush.Color = Color.Red&lt;br /&gt;      End If&lt;br /&gt;      e.Graphics.FillRectangle(brush, Me.Thumb)&lt;br /&gt;    End Using&lt;br /&gt;    'Draw Focus&lt;br /&gt;    If (Me.Focused AndAlso Me.ShowFocusCues) Then&lt;br /&gt;      ControlPaint.DrawFocusRectangle(e.Graphics, Me.ClientRectangle)&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnGotFocus(ByVal e As EventArgs)&lt;br /&gt;    MyBase.OnGotFocus(e)&lt;br /&gt;    _thumbFocused = (Me.Focused AndAlso Me.ShowFocusCues)&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnLostFocus(ByVal e As EventArgs)&lt;br /&gt;    MyBase.OnLostFocus(e)&lt;br /&gt;    _thumbFocused = (Me.Focused AndAlso Me.ShowFocusCues)&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Function IsInputKey(ByVal keyData As Keys) As Boolean&lt;br /&gt;    Select Case (keyData)&lt;br /&gt;      Case Keys.Up, Keys.Down, Keys.Left, Keys.Right&lt;br /&gt;        Return True&lt;br /&gt;      Case Else&lt;br /&gt;        Return MyBase.IsInputKey(keyData)&lt;br /&gt;    End Select&lt;br /&gt;    End Function&lt;br /&gt;    Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)&lt;br /&gt;    MyBase.OnKeyDown(e)&lt;br /&gt;    Select Case (e.KeyCode)&lt;br /&gt;      Case Keys.Up, Keys.Left&lt;br /&gt;        If (Me.Horizontal) Then&lt;br /&gt;        Me.Value -= _smallChange&lt;br /&gt;        Else&lt;br /&gt;        Me.Value += _smallChange&lt;br /&gt;        End If&lt;br /&gt;      Case Keys.Down, Keys.Right&lt;br /&gt;        If (Me.Horizontal) Then&lt;br /&gt;        Me.Value += _smallChange&lt;br /&gt;        Else&lt;br /&gt;        Me.Value -= _smallChange&lt;br /&gt;        End If&lt;br /&gt;      Case Keys.PageDown&lt;br /&gt;        If (Me.Horizontal) Then&lt;br /&gt;        Me.Value += _largeChange&lt;br /&gt;        Else&lt;br /&gt;        Me.Value -= _largeChange&lt;br /&gt;        End If&lt;br /&gt;      Case Keys.PageUp&lt;br /&gt;        If (Me.Horizontal) Then&lt;br /&gt;        Me.Value -= _largeChange&lt;br /&gt;        Else&lt;br /&gt;        Me.Value += _largeChange&lt;br /&gt;        End If&lt;br /&gt;      Case Keys.Home&lt;br /&gt;        If (Me.Horizontal) Then&lt;br /&gt;        Me.Value = _minimum&lt;br /&gt;        Else&lt;br /&gt;        Me.Value = _maximum&lt;br /&gt;        End If&lt;br /&gt;      Case Keys.End&lt;br /&gt;        If (Me.Horizontal) Then&lt;br /&gt;        Me.Value = _maximum&lt;br /&gt;        Else&lt;br /&gt;        Me.Value = _minimum&lt;br /&gt;        End If&lt;br /&gt;    End Select&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)&lt;br /&gt;    MyBase.OnMouseWheel(e)&lt;br /&gt;    Me.Value += (e.Delta / WHEEL_DELTA) * WHEEL_LINES&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)&lt;br /&gt;    MyBase.OnMouseDown(e)&lt;br /&gt;    If (e.Button = MouseButtons.Left) Then&lt;br /&gt;      ThumbDragging = Thumb.Contains(e.Location)&lt;br /&gt;      If (Not ThumbDragging) Then&lt;br /&gt;        If (Me.Horizontal) Then&lt;br /&gt;        _scrollUp = e.X &amp;gt; Thumb.Right&lt;br /&gt;        Else&lt;br /&gt;        _scrollUp = e.Y &amp;lt; Thumb.Top&lt;br /&gt;        End If&lt;br /&gt;        If (scrollTimer Is Nothing) Then&lt;br /&gt;        InitTimer()&lt;br /&gt;        End If&lt;br /&gt;        scrollTimer.Start()&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)&lt;br /&gt;    MyBase.OnMouseUp(e)&lt;br /&gt;    ThumbDragging = False&lt;br /&gt;    If (Me.scrollTimer IsNot Nothing) Then&lt;br /&gt;      Me.scrollTimer.Stop()&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)&lt;br /&gt;    MyBase.OnMouseMove(e)&lt;br /&gt;    If (ThumbDragging) Then&lt;br /&gt;      Me.Value = ValueFromPoint(e.Location)&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnVisibleChanged(ByVal e As EventArgs)&lt;br /&gt;    MyBase.OnVisibleChanged(e)&lt;br /&gt;    If (Me.Visible) Then&lt;br /&gt;      Me.LayoutTrackBarParts()&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs)&lt;br /&gt;    MyBase.OnSizeChanged(e)&lt;br /&gt;    Me.LayoutTrackBarParts()&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;#Region &amp;quot; Protected Methods &amp;quot;&lt;br /&gt;    Protected Overridable Sub OnScroll(ByVal e As EventArgs)&lt;br /&gt;    RaiseEvent Scroll(Me, e)&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overridable Sub OnValueChanged(ByVal eventArgs As EventArgs)&lt;br /&gt;    RaiseEvent ValueChanged(Me, eventArgs)&lt;br /&gt;    Me.LayoutTrackBarParts()&lt;br /&gt;    Me.OnScroll(eventArgs)&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;#Region &amp;quot; Internal Methods &amp;quot;&lt;br /&gt;    Private Sub LayoutTrackBarParts()&lt;br /&gt;    If Me.Horizontal Then&lt;br /&gt;      Thumb.Size = New Size(14, 28)&lt;br /&gt;    Else&lt;br /&gt;      Thumb.Size = New Size(28, 14)&lt;br /&gt;    End If&lt;br /&gt;    Dim channelLength As Single&lt;br /&gt;    If Me.Horizontal Then&lt;br /&gt;      channelLength = Me.Width - 26 ' Channel Left margin + Channel Right margin + Thumb.Width&lt;br /&gt;    Else&lt;br /&gt;      channelLength = Me.Height - 26 ' Channel Top margin + Channel Bottom margin + Thumb.Height&lt;br /&gt;    End If&lt;br /&gt;    Dim stepCount As Single = (Me.Maximum - Me.Minimum)&lt;br /&gt;    Dim stepSize As Single&lt;br /&gt;    If stepCount &amp;gt; 0 Then&lt;br /&gt;      stepSize = channelLength / stepCount&lt;br /&gt;    Else&lt;br /&gt;      stepSize = 0&lt;br /&gt;    End If&lt;br /&gt;    Dim thumbOffset As Single = (stepSize) * (Me.Value - Me.Minimum)&lt;br /&gt;    If Me.Horizontal Then&lt;br /&gt;      Thumb.Location = Point.Round(New PointF(6 + thumbOffset, Me.Height / 2 - 14))&lt;br /&gt;    Else&lt;br /&gt;      Thumb.Location = Point.Round(New PointF(Me.Width / 2 - 14, channelLength - thumbOffset + 6))&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Private Sub InitTimer()&lt;br /&gt;    Me.scrollTimer = New Timer()&lt;br /&gt;    Me.scrollTimer.Interval = 500&lt;br /&gt;    AddHandler scrollTimer.Tick, AddressOf scrollTimer_Tick&lt;br /&gt;    End Sub&lt;br /&gt;    Private Sub scrollTimer_Tick(ByVal sender As Object, ByVal e As EventArgs)&lt;br /&gt;    If (_scrollUp) Then&lt;br /&gt;      Me.Value += Me.LargeChange&lt;br /&gt;    Else&lt;br /&gt;      Me.Value -= Me.LargeChange&lt;br /&gt;    End If&lt;br /&gt;    If (Me._value = Me.Minimum OrElse Me._value = Me.Maximum) Then&lt;br /&gt;      Me.scrollTimer.Stop()&lt;br /&gt;    End If&lt;br /&gt;    Dim val As Int32 = Me.ValueFromPoint(Me.PointToClient(Cursor.Position))&lt;br /&gt;    If (_scrollUp AndAlso Me._value &amp;gt; val) Then&lt;br /&gt;      Me.scrollTimer.Stop()&lt;br /&gt;    End If&lt;br /&gt;    If (Not _scrollUp AndAlso Me._value &amp;lt; val) Then&lt;br /&gt;      Me.scrollTimer.Stop()&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Private Function ValueFromPoint(ByVal point As Point) As Int32&lt;br /&gt;    Dim channelLength As Single&lt;br /&gt;    If (Me.Horizontal) Then&lt;br /&gt;      channelLength = Me.Width - 26 ' Channel Left margin + Channel Right margin + Thumb.Width&lt;br /&gt;    Else&lt;br /&gt;      channelLength = Me.Height - 26 ' Channel Top margin + Channel Bottom margin + Thumb.Height&lt;br /&gt;    End If&lt;br /&gt;    Dim stepCount As Single = (Me.Maximum - Me.Minimum)&lt;br /&gt;    Dim stepSize As Single = 0&lt;br /&gt;    If (stepCount &amp;gt; 0) Then&lt;br /&gt;      stepSize = channelLength / stepCount&lt;br /&gt;    End If&lt;br /&gt;    If (Me.Horizontal) Then&lt;br /&gt;      point.Offset(-7, 0)&lt;br /&gt;      Return (point.X / stepSize) + Me.Minimum&lt;br /&gt;    End If&lt;br /&gt;    point.Offset(0, -7)&lt;br /&gt;    Return Me.Maximum - (point.Y / stepSize) + Me.Minimum&lt;br /&gt;    End Function&lt;br /&gt;    Private Sub DrawTicks(ByVal graphics As Graphics)&lt;br /&gt;    If (TickStyle &amp;lt;&amp;gt; TickStyle.None) Then&lt;br /&gt;      'TODO: Implement Tick Drawing&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;    Private WHEEL_DELTA As Int32 = SystemInformation.MouseWheelScrollDelta&lt;br /&gt;    Private WHEEL_LINES As Int32 = SystemInformation.MouseWheelScrollLines&lt;br /&gt;  End Class&lt;br /&gt;End Namespace&lt;br /&gt;        &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System.Windows.Forms;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System;&lt;br /&gt;namespace Dotnetrix.Samples.CSharp&lt;br /&gt;{&lt;br /&gt;  [DefaultEvent(&amp;quot;Scroll&amp;quot;)]&lt;br /&gt;  [DefaultProperty(&amp;quot;Value&amp;quot;)]&lt;br /&gt;  [ToolboxBitmap(typeof(System.Windows.Forms.TrackBar))]&lt;br /&gt;  public class TrackBar : Control&lt;br /&gt;  {&lt;br /&gt;    public TrackBar()&lt;br /&gt;    : base()&lt;br /&gt;    {&lt;br /&gt;    this.SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.OptimizedDoubleBuffer |&lt;br /&gt;          ControlStyles.AllPaintingInWmPaint | ControlStyles.Selectable | ControlStyles.UserMouse, true);&lt;br /&gt;    this.Thumb = new Rectangle();&lt;br /&gt;    this.LayoutTrackBarParts();&lt;br /&gt;    }&lt;br /&gt;    protected override Size DefaultSize&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      return new Size(100, 60);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    #region Event Delarations&lt;br /&gt;    public event EventHandler Scroll;&lt;br /&gt;    public event EventHandler ValueChanged;&lt;br /&gt;    #endregion&lt;br /&gt;    #region Private Instance Variables&lt;br /&gt;    private Orientation orientation = Orientation.Horizontal;&lt;br /&gt;    private int minimum = 0;&lt;br /&gt;    private int maximum = 10;&lt;br /&gt;    private int smallChange = 1;&lt;br /&gt;    private int largeChange = 5;&lt;br /&gt;    private int _value = 0;&lt;br /&gt;    private TickStyle tickStyle = TickStyle.BottomRight;&lt;br /&gt;    private int tickFrequency = 1;&lt;br /&gt;    private bool thumbDragging = false;&lt;br /&gt;    private bool scrollUp = false;&lt;br /&gt;    private Rectangle Thumb;&lt;br /&gt;    private bool ThumbFocused;&lt;br /&gt;    private Timer scrollTimer;&lt;br /&gt;    #endregion&lt;br /&gt;    #region Public properties&lt;br /&gt;    [DefaultValue(typeof(Orientation), &amp;quot;Horizontal&amp;quot;)]&lt;br /&gt;    public Orientation Orientation&lt;br /&gt;    {&lt;br /&gt;    get { return this.orientation; }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (this.orientation != value)&lt;br /&gt;      {&lt;br /&gt;        this.orientation = value;&lt;br /&gt;        int w, h;&lt;br /&gt;        w = this.Height;&lt;br /&gt;        h = this.Width;&lt;br /&gt;        this.Size = new Size(w, h);&lt;br /&gt;        this.LayoutTrackBarParts();&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    [DefaultValue(0)]&lt;br /&gt;    [RefreshProperties(RefreshProperties.All)]&lt;br /&gt;    public int Minimum&lt;br /&gt;    {&lt;br /&gt;    get { return minimum; }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (minimum != value)&lt;br /&gt;      {&lt;br /&gt;        minimum = value;&lt;br /&gt;        if (maximum &amp;lt;= value)&lt;br /&gt;        Maximum = value;&lt;br /&gt;        this.LayoutTrackBarParts();&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    [DefaultValue(10)]&lt;br /&gt;    public int Maximum&lt;br /&gt;    {&lt;br /&gt;    get { return maximum; }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (maximum != value)&lt;br /&gt;      {&lt;br /&gt;        maximum = value;&lt;br /&gt;        if (minimum &amp;gt;= value)&lt;br /&gt;        Minimum = value;&lt;br /&gt;        this.LayoutTrackBarParts();&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    [DefaultValue(1)]&lt;br /&gt;    public int SmallChange&lt;br /&gt;    {&lt;br /&gt;    get { return smallChange; }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (smallChange != value)        &lt;br /&gt;        smallChange = value;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    [DefaultValue(5)]&lt;br /&gt;    public int LargeChange&lt;br /&gt;    {&lt;br /&gt;    get { return largeChange; }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (largeChange != value)&lt;br /&gt;        largeChange = value;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    public int Value&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      if (_value &amp;lt; this.minimum)&lt;br /&gt;        return this.minimum;&lt;br /&gt;      return _value;&lt;br /&gt;    }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (value &amp;lt; this.minimum)&lt;br /&gt;        value = this.minimum;&lt;br /&gt;      if (value &amp;gt; this.maximum)&lt;br /&gt;        value = this.maximum;&lt;br /&gt;      if (value != _value)&lt;br /&gt;      {&lt;br /&gt;        _value = value;&lt;br /&gt;        this.LayoutTrackBarParts();&lt;br /&gt;        this.OnValueChanged(EventArgs.Empty);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private bool ShouldSerializeValue()&lt;br /&gt;    {&lt;br /&gt;    return this._value != this.minimum;&lt;br /&gt;    }&lt;br /&gt;    private void ResetValue()&lt;br /&gt;    {&lt;br /&gt;    this._value = this.minimum;&lt;br /&gt;    }&lt;br /&gt;    [DefaultValue(false)]&lt;br /&gt;    public new bool TabStop&lt;br /&gt;    {&lt;br /&gt;    get { return base.TabStop; }&lt;br /&gt;    set { base.TabStop = value; }&lt;br /&gt;    }&lt;br /&gt;    [DefaultValue(&amp;quot;&amp;quot;)]&lt;br /&gt;    [Browsable(false)]&lt;br /&gt;    [EditorBrowsable(EditorBrowsableState.Never)]&lt;br /&gt;    public override string Text&lt;br /&gt;    {&lt;br /&gt;    get { return &amp;quot;&amp;quot;; }&lt;br /&gt;    set { base.Text = &amp;quot;&amp;quot;; }&lt;br /&gt;    }&lt;br /&gt;    [DefaultValue(typeof(TickStyle), &amp;quot;BottomRight&amp;quot;)]&lt;br /&gt;    public TickStyle TickStyle&lt;br /&gt;    {&lt;br /&gt;    get { return this.tickStyle; }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (this.tickStyle != value)&lt;br /&gt;      {&lt;br /&gt;        this.tickStyle = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    [DefaultValue(1)]&lt;br /&gt;    public int TickFrequency&lt;br /&gt;    {&lt;br /&gt;    get { return this.tickFrequency; }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (this.tickFrequency != value)&lt;br /&gt;      {&lt;br /&gt;        this.tickFrequency = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;    #region private Properties&lt;br /&gt;    private bool Horizontal&lt;br /&gt;    {&lt;br /&gt;    get { return this.orientation == Orientation.Horizontal; }&lt;br /&gt;    }&lt;br /&gt;    private bool ThumbDragging&lt;br /&gt;    {&lt;br /&gt;    get { return thumbDragging; }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (thumbDragging != value)&lt;br /&gt;      {&lt;br /&gt;        thumbDragging = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;    #region Overridden Methods&lt;br /&gt;    protected override void OnPaint(PaintEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    //Do default painting&lt;br /&gt;    base.OnPaint(e);&lt;br /&gt;    //Draw Tick Marks&lt;br /&gt;    DrawTicks(e.Graphics);&lt;br /&gt;    //Draw Channel&lt;br /&gt;    Rectangle channelBounds = this.Horizontal ?&lt;br /&gt;      new Rectangle(6, this.Height / 2 - 2, this.Width - 16, 4) :&lt;br /&gt;      new Rectangle(this.Width / 2 - 2, 6, 4, this.Height - 16);&lt;br /&gt;    ControlPaint.DrawBorder3D(e.Graphics, channelBounds, Border3DStyle.Sunken);&lt;br /&gt;    // Draw the Thumb Object&lt;br /&gt;    using (SolidBrush brush = new SolidBrush(Color.Blue))&lt;br /&gt;    {&lt;br /&gt;      if (ThumbFocused)&lt;br /&gt;        brush.Color = Color.Green;&lt;br /&gt;      if (ThumbDragging)&lt;br /&gt;        brush.Color = Color.Red;&lt;br /&gt;      e.Graphics.FillRectangle(brush, this.Thumb);&lt;br /&gt;    }&lt;br /&gt;    //Draw Focus&lt;br /&gt;    if (this.Focused &amp;amp;&amp;amp; this.ShowFocusCues)&lt;br /&gt;      ControlPaint.DrawFocusRectangle(e.Graphics, this.ClientRectangle);&lt;br /&gt;    }&lt;br /&gt;    protected override void OnGotFocus(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnGotFocus(e);&lt;br /&gt;    ThumbFocused = (this.Focused &amp;amp;&amp;amp; this.ShowFocusCues);&lt;br /&gt;    this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;    protected override void OnLostFocus(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnLostFocus(e);&lt;br /&gt;    ThumbFocused = (this.Focused &amp;amp;&amp;amp; this.ShowFocusCues);&lt;br /&gt;    this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;    protected override bool IsInputKey(Keys keyData)&lt;br /&gt;    {&lt;br /&gt;    switch (keyData)&lt;br /&gt;    {&lt;br /&gt;      case Keys.Up:&lt;br /&gt;      case Keys.Down:&lt;br /&gt;      case Keys.Left:&lt;br /&gt;      case Keys.Right:&lt;br /&gt;        return true;&lt;br /&gt;      default:&lt;br /&gt;        return base.IsInputKey(keyData);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    protected override void OnKeyDown(KeyEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnKeyDown(e);&lt;br /&gt;    switch (e.KeyCode)&lt;br /&gt;    {&lt;br /&gt;      case Keys.Up:&lt;br /&gt;      case Keys.Left:&lt;br /&gt;        this.Value += this.Horizontal ? -this.smallChange : this.smallChange;&lt;br /&gt;        break;&lt;br /&gt;      case Keys.Down:&lt;br /&gt;      case Keys.Right:&lt;br /&gt;        this.Value += this.Horizontal ? this.smallChange : -this.smallChange;&lt;br /&gt;        break;&lt;br /&gt;      case Keys.PageDown:&lt;br /&gt;        this.Value += this.Horizontal ? this.largeChange : -this.largeChange;&lt;br /&gt;        break;&lt;br /&gt;      case Keys.PageUp:&lt;br /&gt;        this.Value += this.Horizontal ? -this.largeChange : this.largeChange;&lt;br /&gt;        break;&lt;br /&gt;      case Keys.Home:&lt;br /&gt;        this.Value = this.Horizontal ? this.minimum : this.maximum;&lt;br /&gt;        break;&lt;br /&gt;      case Keys.End:&lt;br /&gt;        this.Value = this.Horizontal ? this.maximum : this.minimum;&lt;br /&gt;        break;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    protected override void OnMouseWheel(MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnMouseWheel(e);&lt;br /&gt;    this.Value += (e.Delta / WHEEL_DELTA) * WHEEL_LINES;&lt;br /&gt;    }&lt;br /&gt;    protected override void OnMouseDown(MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnMouseDown(e);&lt;br /&gt;    if (e.Button == MouseButtons.Left)&lt;br /&gt;    {&lt;br /&gt;      ThumbDragging = Thumb.Contains(e.Location);&lt;br /&gt;      if (!ThumbDragging)&lt;br /&gt;      {&lt;br /&gt;        scrollUp = this.Horizontal ? e.X &amp;gt; Thumb.Right : e.Y &amp;lt; Thumb.Top;&lt;br /&gt;        if (scrollTimer == null)&lt;br /&gt;        InitTimer();&lt;br /&gt;        scrollTimer.Start();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    protected override void OnMouseUp(MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnMouseUp(e);&lt;br /&gt;    ThumbDragging = false;&lt;br /&gt;    if (this.scrollTimer != null)&lt;br /&gt;      this.scrollTimer.Stop();&lt;br /&gt;    }&lt;br /&gt;    protected override void OnMouseMove(MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnMouseMove(e);&lt;br /&gt;    if (ThumbDragging)&lt;br /&gt;    {&lt;br /&gt;      this.Value = ValueFromPoint(e.Location);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    protected override void OnVisibleChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnVisibleChanged(e);&lt;br /&gt;    if (this.Visible)&lt;br /&gt;      this.LayoutTrackBarParts();&lt;br /&gt;    }&lt;br /&gt;    protected override void OnSizeChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnSizeChanged(e);&lt;br /&gt;    this.LayoutTrackBarParts();&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;    #region Protected Methods&lt;br /&gt;    protected virtual void OnScroll(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    if (this.Scroll != null)&lt;br /&gt;      this.Scroll(this, e);&lt;br /&gt;    }&lt;br /&gt;    protected virtual void OnValueChanged(EventArgs eventArgs)&lt;br /&gt;    {&lt;br /&gt;    if (this.ValueChanged != null)&lt;br /&gt;      this.ValueChanged(this, eventArgs);&lt;br /&gt;    this.LayoutTrackBarParts();&lt;br /&gt;    this.OnScroll(eventArgs);&lt;br /&gt;    this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;    #region Internal Methods&lt;br /&gt;    private void LayoutTrackBarParts()&lt;br /&gt;    {&lt;br /&gt;    if (Thumb == null)&lt;br /&gt;      return;&lt;br /&gt;    Thumb.Size = this.Horizontal ?&lt;br /&gt;      new Size(14, 28) :&lt;br /&gt;      new Size(28, 14);&lt;br /&gt;    float channelLength = this.Horizontal ?&lt;br /&gt;      this.Width - 26 : // Channel Left margin + Channel Right margin + Thumb.Width&lt;br /&gt;      this.Height - 26; // Channel Top margin + Channel Bottom margin + Thumb.Height&lt;br /&gt;    float stepCount = (this.Maximum - this.Minimum);&lt;br /&gt;    float stepSize = stepCount &amp;gt; 0 ? channelLength / stepCount : 0;&lt;br /&gt;    float thumbOffset = (stepSize) * (this.Value - this.minimum);&lt;br /&gt;    Thumb.Location = this.Horizontal ?&lt;br /&gt;      Point.Round(new PointF(6 + thumbOffset, this.Height / 2 - 14)) :&lt;br /&gt;      Point.Round(new PointF(this.Width / 2 - 14, channelLength - thumbOffset + 6));&lt;br /&gt;    }&lt;br /&gt;    private void InitTimer()&lt;br /&gt;    {&lt;br /&gt;    this.scrollTimer = new Timer();&lt;br /&gt;    this.scrollTimer.Interval = 500;&lt;br /&gt;    this.scrollTimer.Tick += new EventHandler(scrollTimer_Tick);&lt;br /&gt;    }&lt;br /&gt;    private void scrollTimer_Tick(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    this.Value += this.scrollUp ? this.largeChange : -this.largeChange;&lt;br /&gt;    if (this._value == this.minimum || this._value == this.maximum)&lt;br /&gt;      this.scrollTimer.Stop();&lt;br /&gt;    int val = this.ValueFromPoint(this.PointToClient(Cursor.Position));&lt;br /&gt;    if (this.scrollUp &amp;amp;&amp;amp; this._value &amp;gt; val)&lt;br /&gt;      this.scrollTimer.Stop();&lt;br /&gt;    if (!this.scrollUp &amp;amp;&amp;amp; this._value &amp;lt; val)&lt;br /&gt;      this.scrollTimer.Stop();&lt;br /&gt;    }&lt;br /&gt;    private int ValueFromPoint(Point point)&lt;br /&gt;    {&lt;br /&gt;    float channelLength = this.Horizontal ?&lt;br /&gt;      this.Width - 26 : // Channel Left margin + Channel Right margin + Thumb.Width&lt;br /&gt;      this.Height - 26; // Channel Top margin + Channel Bottom margin + Thumb.Height&lt;br /&gt;    float stepCount = (this.maximum - this.minimum);&lt;br /&gt;    float stepSize = stepCount &amp;gt; 0 ? channelLength / stepCount : 0;&lt;br /&gt;    if (this.Horizontal)&lt;br /&gt;    {&lt;br /&gt;      point.Offset(-7, 0);&lt;br /&gt;      return (int)(point.X / stepSize) + this.minimum;&lt;br /&gt;    }&lt;br /&gt;    point.Offset(0, -7);&lt;br /&gt;    return this.maximum - (int)(point.Y / stepSize) + this.minimum;&lt;br /&gt;    }&lt;br /&gt;    private void DrawTicks(Graphics graphics)&lt;br /&gt;    {&lt;br /&gt;    if (tickStyle == TickStyle.None)&lt;br /&gt;      return;&lt;br /&gt;    //TODO: Implement Tick Drawing&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;    private int WHEEL_DELTA = SystemInformation.MouseWheelScrollDelta;&lt;br /&gt;    private int WHEEL_LINES = SystemInformation.MouseWheelScrollLines;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;        &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;by: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Dohertys'&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-8333082158849678465?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/8333082158849678465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/create-slider-control-with-custom-color.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/8333082158849678465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/8333082158849678465'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/create-slider-control-with-custom-color.html' title='Create Slider Control With Custom Color'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/--jkkWhlVe7Y/TjBrSE20HJI/AAAAAAAAARM/Y9ni6oUwVeU/s72-c/customt+rackbar+controls+vb+net+csharp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-4701409112706768203</id><published>2011-07-27T12:44:00.000-07:00</published><updated>2011-07-27T12:51:09.212-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Control'/><category scheme='http://www.blogger.com/atom/ns#' term='Panel'/><title type='text'>Create a Circle Rounded Panel Controls</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-rKX13h0zTc8/TjBp51xJuZI/AAAAAAAAARI/afTdE12NDEs/s1600/rounded+panel+Form+Controls+VB+net+CSharp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="rounded panel Form Controls VB net CSharp" border="0" height="127" src="http://3.bp.blogspot.com/-rKX13h0zTc8/TjBp51xJuZI/AAAAAAAAARI/afTdE12NDEs/s400/rounded+panel+Form+Controls+VB+net+CSharp.png" title="rounded panel Form Controls VB net CSharp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;When we Draw to a Graphics object we can set AntiAlias so as to make the edges of complex shapes look smooth. This is done by altering the color of some of the pixels on and around the edge so that the jagged edges appear smooth.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;When we create a region from a complex shape though, the recoloured pixels outside of the region are lost and as there is no way to trim the edges of the pixels (they are always square) our regions appear jagged. A simple solution to this is to put a pseudo transparent 1 pixel border around the control when shaping it. I doubt very much that you will notice this border, but it will greatly improve the appearance of the edges of your shaped control.&lt;br /&gt;Because the Control in this example has rounded edges, it is not suitable for the AutoScrol property as the ScrollBars will be Clipped. For this reason the Control Inherits from Control and because we want to use it as a Container we have assigned the ParentControlDesigner to the Class.&lt;/div&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Namespace Dotnetrix.Samples.VB&lt;br /&gt;  &amp;lt;System.ComponentModel.Designer(GetType(System.Windows.Forms.Design.ParentControlDesigner))&amp;gt; _&lt;br /&gt;  Public Class RoundedPanel&lt;br /&gt;  Inherits System.Windows.Forms.UserControl&lt;br /&gt;#Region " Windows Form Designer generated code "&lt;br /&gt;  Public Sub New()&lt;br /&gt;  MyBase.New()&lt;br /&gt;  'This call is required by the Windows Form Designer.&lt;br /&gt;  InitializeComponent()&lt;br /&gt;  'Add any initialization after the InitializeComponent() call&lt;br /&gt;  Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.UserPaint, True)&lt;br /&gt;  End Sub&lt;br /&gt;  'UserControl overrides dispose to clean up the component list.&lt;br /&gt;  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;  If disposing Then&lt;br /&gt;  If Not (components Is Nothing) Then&lt;br /&gt;    components.Dispose()&lt;br /&gt;  End If&lt;br /&gt;  End If&lt;br /&gt;  MyBase.Dispose(disposing)&lt;br /&gt;  End Sub&lt;br /&gt;  'Required by the Windows Form Designer&lt;br /&gt;  Private components As System.ComponentModel.IContainer&lt;br /&gt;  'NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;  'It can be modified using the Windows Form Designer.  &lt;br /&gt;  'Do not modify it using the code editor.&lt;br /&gt;  &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; Private Sub InitializeComponent()&lt;br /&gt;  components = New System.ComponentModel.Container&lt;br /&gt;  End Sub&lt;br /&gt;#End Region&lt;br /&gt;  Private m_BorderRadius As Int32 = 32&lt;br /&gt;  Public Property BorderRadius() As Int32&lt;br /&gt;  Get&lt;br /&gt;  Return m_BorderRadius&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As Int32)&lt;br /&gt;  m_BorderRadius = Value&lt;br /&gt;  Me.Invalidate()&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;  Protected Overrides ReadOnly Property DefaultSize() As System.Drawing.Size&lt;br /&gt;  Get&lt;br /&gt;  Return New Size(200, 100)&lt;br /&gt;  End Get&lt;br /&gt;  End Property&lt;br /&gt;  Protected Overrides Sub OnMove(ByVal e As System.EventArgs)&lt;br /&gt;  MyBase.OnMove(e)&lt;br /&gt;  Me.Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Protected Overrides Sub OnResize(ByVal e As System.EventArgs)&lt;br /&gt;  MyBase.OnResize(e)&lt;br /&gt;  Me.Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)&lt;br /&gt;  'Draw the Parent onto our Control to give pseudo transparency.&lt;br /&gt;  'The BeginContainer and EndContainer calls stop incorrect painting of &lt;br /&gt;  'child controls when both container and child have BackColor set to Transparent.&lt;br /&gt;  'This only happens as a result of the TranslateTransform() call.&lt;br /&gt;  Dim g As System.Drawing.Drawing2D.GraphicsContainer = pevent.Graphics.BeginContainer()&lt;br /&gt;  Dim translateRect As Rectangle = Me.Bounds&lt;br /&gt;  pevent.Graphics.TranslateTransform(-Me.Left, -Me.Top)&lt;br /&gt;  Dim pe As PaintEventArgs = New PaintEventArgs(pevent.Graphics, translateRect)&lt;br /&gt;  Me.InvokePaintBackground(Me.Parent, pe)&lt;br /&gt;  Me.InvokePaint(Me.Parent, pe)&lt;br /&gt;  pevent.Graphics.ResetTransform()&lt;br /&gt;  pevent.Graphics.EndContainer(g)&lt;br /&gt;  'Define the custom Border Region, Brush and Pen.&lt;br /&gt;  Dim border As System.Drawing.Drawing2D.GraphicsPath&lt;br /&gt;  Dim paintBrush As New SolidBrush(Me.BackColor)&lt;br /&gt;  Dim borderPen As New Pen(Me.ForeColor)&lt;br /&gt;  Dim r As Rectangle = Me.ClientRectangle&lt;br /&gt;  'Set the Region of the Control&lt;br /&gt;  Me.Region = New Region(RoundRegion(r))&lt;br /&gt;  r.Inflate(-1, -1)&lt;br /&gt;  border = RoundRegion(r)&lt;br /&gt;  'Fill The Region with the Controls BackColor&lt;br /&gt;  pevent.Graphics.FillPath(paintBrush, border)&lt;br /&gt;  'Paint any BackgroundImage that might have been set&lt;br /&gt;  If Not (Me.BackgroundImage Is Nothing) Then&lt;br /&gt;  Dim br As Brush = New TextureBrush(Me.BackgroundImage)&lt;br /&gt;  pevent.Graphics.FillPath(br, border)&lt;br /&gt;  br.Dispose()&lt;br /&gt;  End If&lt;br /&gt;  'Draw the Region&lt;br /&gt;  pevent.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality&lt;br /&gt;  pevent.Graphics.DrawPath(borderPen, border)&lt;br /&gt;  'Clean Up&lt;br /&gt;  borderPen.Dispose()&lt;br /&gt;  paintBrush.Dispose()&lt;br /&gt;  border.Dispose()&lt;br /&gt;  End Sub&lt;br /&gt;  Private Function RoundRegion(ByVal r As Rectangle) As System.Drawing.Drawing2D.GraphicsPath&lt;br /&gt;  'Scale the radius if it's too large to fit.&lt;br /&gt;  Dim radius As Int32 = m_BorderRadius&lt;br /&gt;  If (radius &amp;gt; (r.Width)) Then radius = r.Width&lt;br /&gt;  If (radius &amp;gt; (r.Height)) Then radius = r.Height&lt;br /&gt;  Dim path As New System.Drawing.Drawing2D.GraphicsPath&lt;br /&gt;  If radius &amp;lt;= 0 Then&lt;br /&gt;  path.AddRectangle(r)&lt;br /&gt;  Else&lt;br /&gt;  path.AddArc(r.Left, r.Top, radius, radius, 180, 90)&lt;br /&gt;  path.AddArc(r.Right - radius, r.Top, radius, radius, 270, 90)&lt;br /&gt;  path.AddArc(r.Right - radius, r.Bottom - radius, radius, radius, 0, 90)&lt;br /&gt;  path.AddArc(r.Left, r.Bottom - radius, radius, radius, 90, 90)&lt;br /&gt;  path.CloseFigure()&lt;br /&gt;  End If&lt;br /&gt;  Return path&lt;br /&gt;  End Function&lt;br /&gt;  End Class&lt;br /&gt;End Namespace&lt;br /&gt;    &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;namespace Dotnetrix.Samples.CSharp&lt;br /&gt;{&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Summary description for RoundedPanel.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  [System.ComponentModel.Designer(typeof(System.Windows.Forms.Design.ParentControlDesigner))]&lt;br /&gt;  public class RoundedPanel : System.Windows.Forms.Control&lt;br /&gt;  {&lt;br /&gt;  /// &amp;lt;summary&amp;gt; &lt;br /&gt;  /// Required designer variable.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  private System.ComponentModel.Container components = null;&lt;br /&gt;  public RoundedPanel()&lt;br /&gt;  {&lt;br /&gt;  // This call is required by the Windows.Forms Form Designer.&lt;br /&gt;  InitializeComponent();&lt;br /&gt;  // TODO: Add any initialization after the InitializeComponent call&lt;br /&gt;  this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.UserPaint, true);&lt;br /&gt;  }&lt;br /&gt;  /// &amp;lt;summary&amp;gt; &lt;br /&gt;  /// Clean up any resources being used.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  protected override void Dispose( bool disposing )&lt;br /&gt;  {&lt;br /&gt;  if( disposing )&lt;br /&gt;  {&lt;br /&gt;  if(components != null)&lt;br /&gt;  {&lt;br /&gt;    components.Dispose();&lt;br /&gt;  }&lt;br /&gt;  }&lt;br /&gt;  base.Dispose( disposing );&lt;br /&gt;  }&lt;br /&gt;  #region Component Designer generated code&lt;br /&gt;  /// &amp;lt;summary&amp;gt; &lt;br /&gt;  /// Required method for Designer support - do not modify &lt;br /&gt;  /// the contents of this method with the code editor.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  private void InitializeComponent()&lt;br /&gt;  {&lt;br /&gt;  components = new System.ComponentModel.Container();&lt;br /&gt;  }&lt;br /&gt;  #endregion&lt;br /&gt;  private int borderRadius = 32;&lt;br /&gt;  public int BorderRadius&lt;br /&gt;  {&lt;br /&gt;  get{return borderRadius;}&lt;br /&gt;  set&lt;br /&gt;  {&lt;br /&gt;  borderRadius = value;&lt;br /&gt;  this.Invalidate();&lt;br /&gt;  }&lt;br /&gt;  }&lt;br /&gt;  protected override Size DefaultSize&lt;br /&gt;  {&lt;br /&gt;  get{return new Size(200,100);}&lt;br /&gt;  }&lt;br /&gt;  protected override void OnMove(EventArgs e)&lt;br /&gt;  {&lt;br /&gt;  base.OnMove (e);&lt;br /&gt;  this.Invalidate();&lt;br /&gt;  }&lt;br /&gt;  protected override void OnResize(EventArgs e)&lt;br /&gt;  {&lt;br /&gt;  base.OnResize (e);&lt;br /&gt;  this.Invalidate();&lt;br /&gt;  }&lt;br /&gt;  protected override void OnPaintBackground(PaintEventArgs pevent)&lt;br /&gt;  {&lt;br /&gt;  //Draw the Parent onto our Control to give pseudo transparency.&lt;br /&gt;  //The BeginContainer and EndContainer calls stop incorrect painting of &lt;br /&gt;  //child controls when both container and child have BackColor set to Transparent.&lt;br /&gt;  //This only happens as a result of the TranslateTransform() call.&lt;br /&gt;  System.Drawing.Drawing2D.GraphicsContainer g = pevent.Graphics.BeginContainer();&lt;br /&gt;  Rectangle translateRect = this.Bounds;&lt;br /&gt;  pevent.Graphics.TranslateTransform(-this.Left,-this.Top);&lt;br /&gt;  PaintEventArgs pe = new PaintEventArgs(pevent.Graphics,translateRect);&lt;br /&gt;  this.InvokePaintBackground(this.Parent,pe);&lt;br /&gt;  this.InvokePaint(this.Parent,pe);&lt;br /&gt;  pevent.Graphics.ResetTransform();&lt;br /&gt;  pevent.Graphics.EndContainer(g);&lt;br /&gt;  //Define the custom Border Region, Brush and Pen.&lt;br /&gt;  System.Drawing.Drawing2D.GraphicsPath border;&lt;br /&gt;  Brush paintBrush = new SolidBrush(this.BackColor);&lt;br /&gt;  Pen borderPen = new Pen(this.ForeColor);&lt;br /&gt;  Rectangle r = this.ClientRectangle;&lt;br /&gt;  //Set the Region of the Control&lt;br /&gt;  this.Region = new Region(RoundRegion(r));&lt;br /&gt;  r.Inflate(-1,-1);&lt;br /&gt;  border = RoundRegion(r);&lt;br /&gt;  //Fill The Region with the Controls BackColor&lt;br /&gt;  pevent.Graphics.FillPath(paintBrush,border);&lt;br /&gt;  //Paint any BackgroundImage that might have been set&lt;br /&gt;  if (this.BackgroundImage != null)&lt;br /&gt;  {&lt;br /&gt;  Brush br = new TextureBrush(this.BackgroundImage);&lt;br /&gt;  pevent.Graphics.FillPath(br,border);&lt;br /&gt;  br.Dispose();&lt;br /&gt;  }&lt;br /&gt;  //Draw the Region&lt;br /&gt;  pevent.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;&lt;br /&gt;  pevent.Graphics.DrawPath(borderPen,border);&lt;br /&gt;  //Clean Up&lt;br /&gt;  borderPen.Dispose();&lt;br /&gt;  paintBrush.Dispose();&lt;br /&gt;  border.Dispose();&lt;br /&gt;  }&lt;br /&gt;  private System.Drawing.Drawing2D.GraphicsPath RoundRegion(Rectangle r)&lt;br /&gt;  {&lt;br /&gt;  //Scale the radius if it's too large to fit.&lt;br /&gt;  int radius = borderRadius;&lt;br /&gt;  if (radius &amp;gt; (r.Width))&lt;br /&gt;  radius = r.Width;&lt;br /&gt;  if (radius &amp;gt; (r.Height))&lt;br /&gt;  radius = r.Height;&lt;br /&gt;  System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();&lt;br /&gt;  if (radius &amp;lt;= 0)&lt;br /&gt;  {&lt;br /&gt;  path.AddRectangle(r);&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;  path.AddArc(r.Left,r.Top,radius,radius,180,90);&lt;br /&gt;  path.AddArc(r.Right - radius,r.Top,radius,radius,270,90);&lt;br /&gt;  path.AddArc(r.Right-radius,r.Bottom-radius,radius,radius,0,90);&lt;br /&gt;  path.AddArc(r.Left,r.Bottom-radius,radius,radius,90,90);&lt;br /&gt;  path.CloseFigure();&lt;br /&gt;  }&lt;br /&gt;  return path;&lt;br /&gt;  }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;    &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;by: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Dohertys'&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-4701409112706768203?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/4701409112706768203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/create-circle-rounded-panel-controls.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/4701409112706768203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/4701409112706768203'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/create-circle-rounded-panel-controls.html' title='Create a Circle Rounded Panel Controls'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-rKX13h0zTc8/TjBp51xJuZI/AAAAAAAAARI/afTdE12NDEs/s72-c/rounded+panel+Form+Controls+VB+net+CSharp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-4819717684743228451</id><published>2011-07-25T06:32:00.000-07:00</published><updated>2011-07-25T06:32:45.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='ComboBox'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><title type='text'>Create Combobox With Icon</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NcHXUcOUzXU/Ti1v47uIoTI/AAAAAAAAARA/fG34_jY0AVY/s1600/Create+ComboBox+With+Icon+Enabled+in+VB+net+Csharp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Create Combobox With Icon" border="0" src="http://4.bp.blogspot.com/-NcHXUcOUzXU/Ti1v47uIoTI/AAAAAAAAARA/fG34_jY0AVY/s1600/Create+ComboBox+With+Icon+Enabled+in+VB+net+Csharp.png" /&gt;&lt;/a&gt;&lt;/div&gt;The following class modifies the Item collection to return a collection of Custom items. The Property Browser uses the Collection Editor rather than the StringCollection Editor. The DrawMode property has been hidden, since this property should not be changed.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Imports System.ComponentModel&lt;br /&gt;Imports System.Drawing.Design&lt;br /&gt;Imports System.ComponentModel.Design&lt;br /&gt;&lt;br /&gt;Namespace Dotnetrix_Samples&lt;br /&gt;&lt;br /&gt;  Public Class ImageCombo&lt;br /&gt;  Inherits System.Windows.Forms.ComboBox&lt;br /&gt;&lt;br /&gt;#Region " Windows Form Designer generated code "&lt;br /&gt;&lt;br /&gt;  Public Sub New()&lt;br /&gt;  MyBase.New()&lt;br /&gt;&lt;br /&gt;  'This call is required by the Windows Form Designer.&lt;br /&gt;  InitializeComponent()&lt;br /&gt;&lt;br /&gt;  'Add any initialization after the InitializeComponent() call&lt;br /&gt;  MyBase.DrawMode = DrawMode.OwnerDrawFixed&lt;br /&gt;&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  'UserControl overrides dispose to clean up the component list.&lt;br /&gt;  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;  If disposing Then&lt;br /&gt;  If Not (components Is Nothing) Then&lt;br /&gt;    components.Dispose()&lt;br /&gt;  End If&lt;br /&gt;  If Not (Me.Items Is Nothing) Then&lt;br /&gt;    For Each o As Object In Me.Items&lt;br /&gt;    If TypeOf o Is ImageComboItem Then&lt;br /&gt;    DirectCast(o, ImageComboItem).Dispose()&lt;br /&gt;    End If&lt;br /&gt;    Next&lt;br /&gt;  End If&lt;br /&gt;  End If&lt;br /&gt;  MyBase.Dispose(disposing)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  'Required by the Windows Form Designer&lt;br /&gt;  Private components As System.ComponentModel.IContainer&lt;br /&gt;&lt;br /&gt;  'NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;  'It can be modified using the Windows Form Designer.  &lt;br /&gt;  'Do not modify it using the code editor.&lt;br /&gt;  &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; Private Sub InitializeComponent()&lt;br /&gt;  components = New System.ComponentModel.Container&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;#End Region&lt;br /&gt;&lt;br /&gt;  Private currentIndex As Int32 = -1&lt;br /&gt;&lt;br /&gt;  &amp;lt;Browsable(False), EditorBrowsable(EditorBrowsableState.Never)&amp;gt; _&lt;br /&gt;  Public Shadows ReadOnly Property DrawMode() As DrawMode&lt;br /&gt;  Get&lt;br /&gt;  Return DrawMode.OwnerDrawFixed&lt;br /&gt;  End Get&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  &amp;lt;Editor(GetType(ImageComboItemEditor), GetType(UITypeEditor)), _&lt;br /&gt;  DesignerSerializationVisibility(DesignerSerializationVisibility.Content)&amp;gt; _&lt;br /&gt;  Public Shadows ReadOnly Property Items() As ObjectCollection&lt;br /&gt;  Get&lt;br /&gt;  Return MyBase.Items&lt;br /&gt;  End Get&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  Private Class ImageComboItemEditor&lt;br /&gt;  Inherits CollectionEditor&lt;br /&gt;&lt;br /&gt;  Public Sub New(ByVal type As Type)&lt;br /&gt;  MyBase.New(type)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Function CreateCollectionItemType() As System.Type&lt;br /&gt;  Return GetType(ImageComboItem)&lt;br /&gt;  End Function&lt;br /&gt;&lt;br /&gt;  End Class&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnDrawItem(ByVal e As System.Windows.Forms.DrawItemEventArgs)&lt;br /&gt;&lt;br /&gt;  If e.Index = -1 OrElse e.Index &amp;gt; Me.Items.Count - 1 Then Return&lt;br /&gt;&lt;br /&gt;  e.DrawBackground()&lt;br /&gt;&lt;br /&gt;  Dim imageRect As Rectangle = New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height)&lt;br /&gt;  Dim textRectF As RectangleF = RectangleF.FromLTRB(imageRect.Right + 2, e.Bounds.Top, e.Bounds.Right, e.Bounds.Bottom)&lt;br /&gt;&lt;br /&gt;  If TypeOf Items(e.Index) Is ImageComboItem Then&lt;br /&gt;&lt;br /&gt;  Dim Item As ImageComboItem = DirectCast(Items(e.Index), ImageComboItem)&lt;br /&gt;&lt;br /&gt;  If Not (Item.Image Is Nothing) Then&lt;br /&gt;    e.Graphics.DrawImage(Item.Image, imageRect)&lt;br /&gt;  End If&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Dim TextBrush As New SolidBrush(Me.ForeColor)&lt;br /&gt;  If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then&lt;br /&gt;  TextBrush.Color = SystemColors.HighlightText&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Dim sf As New StringFormat(StringFormatFlags.NoWrap)&lt;br /&gt;  sf.LineAlignment = StringAlignment.Center&lt;br /&gt;  sf.Trimming = StringTrimming.EllipsisCharacter&lt;br /&gt;&lt;br /&gt;  e.Graphics.DrawString(Items(e.Index).ToString, Me.Font, TextBrush, textRectF, sf)&lt;br /&gt;  TextBrush.Dispose()&lt;br /&gt;&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnSelectedIndexChanged(ByVal e As System.EventArgs)&lt;br /&gt;  If Me.SelectedIndex &amp;lt;&amp;gt; currentIndex Then&lt;br /&gt;  currentIndex = Me.SelectedIndex&lt;br /&gt;  MyBase.RefreshItem(Me.SelectedIndex)&lt;br /&gt;  Else&lt;br /&gt;  MyBase.OnSelectedIndexChanged(e)&lt;br /&gt;  End If&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  End Class&lt;br /&gt;&lt;br /&gt;  &amp;lt;DesignTimeVisible(False)&amp;gt; _&lt;br /&gt;  Public Class ImageComboItem&lt;br /&gt;  Inherits Component&lt;br /&gt;&lt;br /&gt;  Private m_object As Object&lt;br /&gt;  Private m_Image As Image&lt;br /&gt;&lt;br /&gt;  &amp;lt;TypeConverter(GetType(StringConverter))&amp;gt; _&lt;br /&gt;  Public Property [Item]() As Object&lt;br /&gt;  Get&lt;br /&gt;  Return m_object&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As Object)&lt;br /&gt;  m_object = Value&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  Public Property [Image]() As Image&lt;br /&gt;  Get&lt;br /&gt;  Return m_Image&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As Image)&lt;br /&gt;  m_Image = Value&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  Public Overrides Function ToString() As String&lt;br /&gt;  If m_object Is Nothing Then&lt;br /&gt;  Return String.Empty&lt;br /&gt;  Else&lt;br /&gt;  Return m_object.ToString&lt;br /&gt;  End If&lt;br /&gt;  End Function&lt;br /&gt;&lt;br /&gt;  End Class&lt;br /&gt;&lt;br /&gt;End Namespace&lt;br /&gt;    &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;&lt;br /&gt;using System.Drawing.Design;&lt;br /&gt;using System.ComponentModel.Design;&lt;br /&gt;&lt;br /&gt;namespace Dotnetrix_Samples&lt;br /&gt;{&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Summary description for ImageCombo.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  public class ImageCombo : System.Windows.Forms.ComboBox&lt;br /&gt;  {&lt;br /&gt;  /// &amp;lt;summary&amp;gt; &lt;br /&gt;  /// Required designer variable.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  private System.ComponentModel.Container components = null;&lt;br /&gt;&lt;br /&gt;  public ImageCombo()&lt;br /&gt;  {&lt;br /&gt;  // This call is required by the Windows.Forms Form Designer.&lt;br /&gt;  InitializeComponent();&lt;br /&gt;&lt;br /&gt;  // TODO: Add any initialization after the InitializeComponent call&lt;br /&gt;  base.DrawMode = DrawMode.OwnerDrawVariable;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /// &amp;lt;summary&amp;gt; &lt;br /&gt;  /// Clean up any resources being used.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  protected override void Dispose( bool disposing )&lt;br /&gt;  {&lt;br /&gt;  if( disposing )&lt;br /&gt;  {&lt;br /&gt;  if(components != null)&lt;br /&gt;  {&lt;br /&gt;    components.Dispose();&lt;br /&gt;  }&lt;br /&gt;  if (this.Items != null)&lt;br /&gt;  {&lt;br /&gt;    foreach (Object o in this.Items)&lt;br /&gt;    {&lt;br /&gt;    if (o is ImageComboItem)&lt;br /&gt;    ((ImageComboItem)o).Dispose();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  }&lt;br /&gt;  base.Dispose( disposing );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  #region Component Designer generated code&lt;br /&gt;  /// &amp;lt;summary&amp;gt; &lt;br /&gt;  /// Required method for Designer support - do not modify &lt;br /&gt;  /// the contents of this method with the code editor.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  private void InitializeComponent()&lt;br /&gt;  {&lt;br /&gt;  components = new System.ComponentModel.Container();&lt;br /&gt;  }&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  private int currentIndex = -1;&lt;br /&gt;&lt;br /&gt;  [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]&lt;br /&gt;  public new DrawMode DrawMode&lt;br /&gt;  {&lt;br /&gt;  get{return DrawMode.OwnerDrawFixed;}&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  [Editor(typeof(ImageComboItemEditor), typeof(UITypeEditor))]&lt;br /&gt;  [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]&lt;br /&gt;  public new ObjectCollection Items&lt;br /&gt;  {&lt;br /&gt;  get{return base.Items;}&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  private class ImageComboItemEditor : CollectionEditor&lt;br /&gt;  {&lt;br /&gt;  public ImageComboItemEditor(Type type):base(type){}&lt;br /&gt;&lt;br /&gt;  protected override Type CreateCollectionItemType()&lt;br /&gt;  {&lt;br /&gt;  return typeof(ImageComboItem);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  protected override void OnDrawItem(DrawItemEventArgs e)&lt;br /&gt;  {&lt;br /&gt;  if (e.Index == -1 || e.Index &amp;gt; this.Items.Count - 1)&lt;br /&gt;  return;&lt;br /&gt;&lt;br /&gt;  e.DrawBackground();&lt;br /&gt;&lt;br /&gt;  Rectangle imageRect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height);&lt;br /&gt;  RectangleF textRectF = RectangleF.FromLTRB(imageRect.Right + 2, e.Bounds.Top, e.Bounds.Right, e.Bounds.Bottom);&lt;br /&gt;  &lt;br /&gt;  if (Items[e.Index] is ImageComboItem )&lt;br /&gt;  {&lt;br /&gt;  ImageComboItem Item = (ImageComboItem)Items[e.Index];&lt;br /&gt;  &lt;br /&gt;  if (Item.Image != null)&lt;br /&gt;    e.Graphics.DrawImage(Item.Image, imageRect);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  SolidBrush TextBrush = new SolidBrush(this.ForeColor);&lt;br /&gt;  if ((e.State &amp;amp; DrawItemState.Selected) == DrawItemState.Selected)&lt;br /&gt;  TextBrush.Color = SystemColors.HighlightText;&lt;br /&gt;&lt;br /&gt;  StringFormat sf = new StringFormat(StringFormatFlags.NoWrap);&lt;br /&gt;  sf.LineAlignment = StringAlignment.Center;&lt;br /&gt;  sf.Trimming = StringTrimming.EllipsisCharacter;&lt;br /&gt;&lt;br /&gt;  e.Graphics.DrawString(Items[e.Index].ToString(), this.Font, TextBrush, textRectF, sf);&lt;br /&gt;  TextBrush.Dispose();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  protected override void OnSelectedIndexChanged(EventArgs e)&lt;br /&gt;  {&lt;br /&gt;  if (this.SelectedIndex != this.currentIndex)&lt;br /&gt;  {&lt;br /&gt;  this.currentIndex = this.SelectedIndex;&lt;br /&gt;  base.RefreshItem(this.SelectedIndex);&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;  base.OnSelectedIndexChanged (e);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  [DesignTimeVisible(false)]&lt;br /&gt;  public class ImageComboItem : Component&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;  private Object m_object;&lt;br /&gt;  private Image m_Image;&lt;br /&gt;&lt;br /&gt;  [TypeConverter(typeof(StringConverter))]&lt;br /&gt;  public Object Item&lt;br /&gt;  {&lt;br /&gt;  get{return m_object;}&lt;br /&gt;  set{m_object = value;}&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public Image Image&lt;br /&gt;  {&lt;br /&gt;  get{return m_Image;}&lt;br /&gt;  set{m_Image = value;}&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public override string ToString()&lt;br /&gt;  {&lt;br /&gt;  if (m_object == null)&lt;br /&gt;  return String.Empty;&lt;br /&gt;  else&lt;br /&gt;  return m_object.ToString();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;    &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;by: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Dohertys'&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-4819717684743228451?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/4819717684743228451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/create-combobox-with-icon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/4819717684743228451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/4819717684743228451'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/create-combobox-with-icon.html' title='Create Combobox With Icon'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NcHXUcOUzXU/Ti1v47uIoTI/AAAAAAAAARA/fG34_jY0AVY/s72-c/Create+ComboBox+With+Icon+Enabled+in+VB+net+Csharp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-1723495820479380511</id><published>2011-07-25T06:23:00.000-07:00</published><updated>2011-07-25T14:44:33.994-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Button'/><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><title type='text'>Create Custom Button in Form</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-VWveMRoCRWM/Ti1titmwvPI/AAAAAAAAAQ8/FHzxYMKlKag/s1600/Create+Custom+Button+in+Form+VB+net+Csharp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Create Custom Button in Form VB net Csharp" border="0" src="http://4.bp.blogspot.com/-VWveMRoCRWM/Ti1titmwvPI/AAAAAAAAAQ8/FHzxYMKlKag/s1600/Create+Custom+Button+in+Form+VB+net+Csharp.png" /&gt;&lt;/a&gt;&lt;/div&gt;No need to Inherit from Button if you want a button with a completely  custom appearance.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt; The following class defines a Custom Button which can be set as a forms  AcceptButton or CancelButton, but which is inherited from Control rather  than Button. It also includes a custom TypeEditor to allow selection of  corners to be rounded.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;:&lt;i&gt; that this example needs a reference to System.Design.dll since it uses a custom TypeEditor &lt;/i&gt;&lt;br /&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Imports System.ComponentModel&lt;br /&gt;  Imports System.Security.Permissions&lt;br /&gt;  Imports System.Drawing.Design&lt;br /&gt;  Imports System.Windows.Forms.Design&lt;br /&gt;&lt;br /&gt;  Namespace Dotnetrix.Samples.VB&lt;br /&gt;&lt;br /&gt;  &amp;lt;Flags()&amp;gt; _&lt;br /&gt;  Public Enum Corners&lt;br /&gt;  None = 0&lt;br /&gt;  TopLeft = 1&lt;br /&gt;  TopRight = 2&lt;br /&gt;  BottomLeft = 4&lt;br /&gt;  BottomRight = 8&lt;br /&gt;  All = TopLeft Or TopRight Or BottomLeft Or BottomRight&lt;br /&gt;  End Enum&lt;br /&gt;&lt;br /&gt;  Public Enum CustomButtonState&lt;br /&gt;  [Normal] = 1&lt;br /&gt;  [Hot]&lt;br /&gt;  [Pressed]&lt;br /&gt;  [Disabled]&lt;br /&gt;  [Focused]&lt;br /&gt;  End Enum&lt;br /&gt;&lt;br /&gt;  Public Class CustomButton&lt;br /&gt;  Inherits Control&lt;br /&gt;  Implements IButtonControl&lt;br /&gt;&lt;br /&gt;  Public Sub New()&lt;br /&gt;  MyBase.New()&lt;br /&gt;  Me.SetStyle(ControlStyles.Selectable Or ControlStyles.StandardClick Or ControlStyles.ResizeRedraw Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.UserPaint Or ControlStyles.SupportsTransparentBackColor, True)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  #Region " Private Instance Variables "&lt;br /&gt;&lt;br /&gt;  Private m_DialogResult As DialogResult&lt;br /&gt;  Private m_IsDefault As Boolean&lt;br /&gt;&lt;br /&gt;  Private m_CornerRadius As Int32 = 8&lt;br /&gt;  Private m_RoundCorners As Corners&lt;br /&gt;  Private m_ButtonState As CustomButtonState = CustomButtonState.Normal&lt;br /&gt;&lt;br /&gt;  Private m_ImageAlign As ContentAlignment = ContentAlignment.MiddleCenter&lt;br /&gt;  Private m_TextAlign As ContentAlignment = ContentAlignment.MiddleCenter&lt;br /&gt;  Private m_ImageList As ImageList&lt;br /&gt;  Private m_ImageIndex As Int32 = -1&lt;br /&gt;&lt;br /&gt;  Private keyPressed As Boolean&lt;br /&gt;  Private contentRect As Rectangle&lt;br /&gt;&lt;br /&gt;  #End Region&lt;br /&gt;&lt;br /&gt;  #Region " IButtonControl Implementation "&lt;br /&gt;&lt;br /&gt;  &amp;lt;Category("Behavior"), DefaultValue(GetType(DialogResult), "None"), _&lt;br /&gt;  Description("The dialog result produced in a modal form by clicking the button.")&amp;gt; _&lt;br /&gt;  Public Property DialogResult() As System.Windows.Forms.DialogResult Implements System.Windows.Forms.IButtonControl.DialogResult&lt;br /&gt;  Get&lt;br /&gt;    Return m_DialogResult&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As System.Windows.Forms.DialogResult)&lt;br /&gt;    If [Enum].IsDefined(GetType(DialogResult), Value) Then&lt;br /&gt;    m_DialogResult = Value&lt;br /&gt;    End If&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  Public Sub NotifyDefault(ByVal value As Boolean) Implements System.Windows.Forms.IButtonControl.NotifyDefault&lt;br /&gt;  If m_IsDefault &amp;lt;&amp;gt; value Then&lt;br /&gt;    m_IsDefault = value&lt;br /&gt;  End If&lt;br /&gt;  Me.Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Public Sub PerformClick() Implements System.Windows.Forms.IButtonControl.PerformClick&lt;br /&gt;  If Me.CanSelect Then&lt;br /&gt;    MyBase.OnClick(EventArgs.Empty)&lt;br /&gt;  End If&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  #End Region&lt;br /&gt;&lt;br /&gt;  #Region " Properties "&lt;br /&gt;&lt;br /&gt;  'ButtonState&lt;br /&gt;  &amp;lt;Browsable(False)&amp;gt; _&lt;br /&gt;  Public ReadOnly Property ButtonState() As CustomButtonState&lt;br /&gt;  Get&lt;br /&gt;    Return m_ButtonState&lt;br /&gt;  End Get&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  'CornerRadius&lt;br /&gt;  &amp;lt;Category("Appearance"), _&lt;br /&gt;  DefaultValue(8), _&lt;br /&gt;  Description("Defines the radius of the controls RoundedCorners.")&amp;gt; _&lt;br /&gt;  Public Property CornerRadius() As Int32&lt;br /&gt;  Get&lt;br /&gt;    Return m_CornerRadius&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As Int32)&lt;br /&gt;    If m_CornerRadius = Value Then Return&lt;br /&gt;    m_CornerRadius = Value&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  'DefaultSize&lt;br /&gt;  Protected Overrides ReadOnly Property DefaultSize() As System.Drawing.Size&lt;br /&gt;  Get&lt;br /&gt;    Return New Size(75, 23)&lt;br /&gt;  End Get&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  'IsDefault&lt;br /&gt;  &amp;lt;Browsable(False)&amp;gt; _&lt;br /&gt;  Public ReadOnly Property IsDefault() As Boolean&lt;br /&gt;  Get&lt;br /&gt;    Return m_IsDefault&lt;br /&gt;  End Get&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  'ImageList&lt;br /&gt;  &amp;lt;Category("Appearance"), DefaultValue(GetType(ImageList), Nothing), _&lt;br /&gt;  Description("The image list to get the image to display in the face of the control.")&amp;gt; _&lt;br /&gt;  Public Property ImageList() As ImageList&lt;br /&gt;  Get&lt;br /&gt;    Return m_ImageList&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As ImageList)&lt;br /&gt;    m_ImageList = Value&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  'ImageIndex&lt;br /&gt;  &amp;lt;Category("Appearance"), DefaultValue(-1), _&lt;br /&gt;  Description("The index of the image in the image list to display in the face of the control."), _&lt;br /&gt;  TypeConverter(GetType(ImageIndexConverter)), _&lt;br /&gt;  Editor("System.Windows.Forms.Design.ImageIndexEditor, System.Design", GetType(System.Drawing.Design.UITypeEditor))&amp;gt; _&lt;br /&gt;  Public Property ImageIndex() As Int32&lt;br /&gt;  Get&lt;br /&gt;    Return m_ImageIndex&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As Int32)&lt;br /&gt;    m_ImageIndex = Value&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  'ImageAlign&lt;br /&gt;  &amp;lt;Category("Appearance"), DefaultValue(GetType(ContentAlignment), "MiddleCenter"), _&lt;br /&gt;  Description("The alignment of the image that will be displayed in the face of the control.")&amp;gt; _&lt;br /&gt;  Public Property ImageAlign() As ContentAlignment&lt;br /&gt;  Get&lt;br /&gt;    Return m_ImageAlign&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As ContentAlignment)&lt;br /&gt;    If Not [Enum].IsDefined(GetType(ContentAlignment), Value) Then&lt;br /&gt;    Throw New InvalidEnumArgumentException("value", CInt(Value), GetType(ContentAlignment))&lt;br /&gt;    End If&lt;br /&gt;    If m_ImageAlign = Value Then Return&lt;br /&gt;    m_ImageAlign = Value&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  'RoundCorners&lt;br /&gt;  &amp;lt;Category("Appearance"), _&lt;br /&gt;  DefaultValue(GetType(Corners), "None"), _&lt;br /&gt;  Description("Gets/sets the corners of the control to round."), _&lt;br /&gt;  Editor(GetType(RoundCornersEditor), GetType(UITypeEditor)), _&lt;br /&gt;  DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)&amp;gt; _&lt;br /&gt;  Public Property RoundCorners() As Corners&lt;br /&gt;  Get&lt;br /&gt;    Return m_RoundCorners&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As Corners)&lt;br /&gt;    If m_RoundCorners = Value Then Return&lt;br /&gt;    m_RoundCorners = Value&lt;br /&gt;    Me.Invalidate()&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  'TextAlign&lt;br /&gt;  &amp;lt;Category("Appearance"), DefaultValue(GetType(ContentAlignment), "MiddleCenter"), _&lt;br /&gt;  Description("The alignment of the text that will be displayed in the face of the control.")&amp;gt; _&lt;br /&gt;  Public Property TextAlign() As ContentAlignment&lt;br /&gt;  Get&lt;br /&gt;    Return m_TextAlign&lt;br /&gt;  End Get&lt;br /&gt;  Set(ByVal Value As ContentAlignment)&lt;br /&gt;    If Not [Enum].IsDefined(GetType(ContentAlignment), Value) Then&lt;br /&gt;    Throw New InvalidEnumArgumentException("value", CInt(Value), GetType(ContentAlignment))&lt;br /&gt;    End If&lt;br /&gt;    If m_TextAlign = Value Then Return&lt;br /&gt;    m_TextAlign = Value&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Set&lt;br /&gt;  End Property&lt;br /&gt;&lt;br /&gt;  #End Region&lt;br /&gt;&lt;br /&gt;  #Region " Overriden Methods "&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnKeyDown(ByVal kevent As System.Windows.Forms.KeyEventArgs)&lt;br /&gt;  MyBase.OnKeyDown(kevent)&lt;br /&gt;  If kevent.KeyValue = Keys.Space Then&lt;br /&gt;    keyPressed = True&lt;br /&gt;    m_ButtonState = CustomButtonState.Pressed&lt;br /&gt;  End If&lt;br /&gt;  OnStateChange(EventArgs.Empty)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnKeyUp(ByVal kevent As System.Windows.Forms.KeyEventArgs)&lt;br /&gt;  MyBase.OnKeyUp(kevent)&lt;br /&gt;  If kevent.KeyValue = Keys.Space Then&lt;br /&gt;    If Me.ButtonState = CustomButtonState.Pressed Then&lt;br /&gt;    Me.PerformClick()&lt;br /&gt;    End If&lt;br /&gt;    keyPressed = False&lt;br /&gt;    m_ButtonState = CustomButtonState.Focused&lt;br /&gt;  End If&lt;br /&gt;  OnStateChange(EventArgs.Empty)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnMouseEnter(ByVal eventargs As System.EventArgs)&lt;br /&gt;  MyBase.OnMouseEnter(eventargs)&lt;br /&gt;  If Not keyPressed Then&lt;br /&gt;    m_ButtonState = CustomButtonState.Hot&lt;br /&gt;  End If&lt;br /&gt;  OnStateChange(eventargs.Empty)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnMouseLeave(ByVal eventargs As System.EventArgs)&lt;br /&gt;  MyBase.OnMouseLeave(eventargs)&lt;br /&gt;  If Not keyPressed Then&lt;br /&gt;    If Me.IsDefault Then&lt;br /&gt;    m_ButtonState = CustomButtonState.Focused&lt;br /&gt;    Else&lt;br /&gt;    m_ButtonState = CustomButtonState.Normal&lt;br /&gt;    End If&lt;br /&gt;  End If&lt;br /&gt;  OnStateChange(eventargs.Empty)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnMouseDown(ByVal mevent As System.Windows.Forms.MouseEventArgs)&lt;br /&gt;  MyBase.OnMouseDown(mevent)&lt;br /&gt;  If mevent.Button = MouseButtons.Left Then&lt;br /&gt;    Me.Focus()&lt;br /&gt;    m_ButtonState = CustomButtonState.Pressed&lt;br /&gt;  End If&lt;br /&gt;  OnStateChange(EventArgs.Empty)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnMouseUp(ByVal mevent As System.Windows.Forms.MouseEventArgs)&lt;br /&gt;  MyBase.OnMouseUp(mevent)&lt;br /&gt;  m_ButtonState = CustomButtonState.Focused&lt;br /&gt;  OnStateChange(EventArgs.Empty)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnMouseMove(ByVal mevent As System.Windows.Forms.MouseEventArgs)&lt;br /&gt;  MyBase.OnMouseMove(mevent)&lt;br /&gt;  If New Rectangle(Point.Empty, Me.Size).Contains(mevent.X, mevent.Y) AndAlso mevent.Button = MouseButtons.Left Then&lt;br /&gt;    m_ButtonState = CustomButtonState.Pressed&lt;br /&gt;  Else&lt;br /&gt;    If keyPressed Then Return&lt;br /&gt;    m_ButtonState = CustomButtonState.Hot&lt;br /&gt;  End If&lt;br /&gt;  OnStateChange(EventArgs.Empty)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)&lt;br /&gt;  MyBase.OnGotFocus(e)&lt;br /&gt;  m_ButtonState = CustomButtonState.Focused&lt;br /&gt;  Me.NotifyDefault(True)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)&lt;br /&gt;  MyBase.OnLostFocus(e)&lt;br /&gt;  If Me.FindForm.Focused Then&lt;br /&gt;    Me.NotifyDefault(False)&lt;br /&gt;  End If&lt;br /&gt;  m_ButtonState = CustomButtonState.Normal&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnEnabledChanged(ByVal e As System.EventArgs)&lt;br /&gt;  MyBase.OnEnabledChanged(e)&lt;br /&gt;  If Me.Enabled Then&lt;br /&gt;    m_ButtonState = CustomButtonState.Normal&lt;br /&gt;  Else&lt;br /&gt;    m_ButtonState = CustomButtonState.Disabled&lt;br /&gt;  End If&lt;br /&gt;  OnStateChange(EventArgs.Empty)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnClick(ByVal e As System.EventArgs)&lt;br /&gt;  'Click gets fired before MouseUp which is handy&lt;br /&gt;  If Me.ButtonState = CustomButtonState.Pressed Then&lt;br /&gt;    Me.Focus()&lt;br /&gt;    Me.PerformClick()&lt;br /&gt;  End If&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnDoubleClick(ByVal e As System.EventArgs)&lt;br /&gt;  If Me.ButtonState = CustomButtonState.Pressed Then&lt;br /&gt;    Me.Focus()&lt;br /&gt;    Me.PerformClick()&lt;br /&gt;  End If&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Function ProcessMnemonic(ByVal charCode As Char) As Boolean&lt;br /&gt;  If IsMnemonic(charCode, Me.Text) Then&lt;br /&gt;    MyBase.OnClick(EventArgs.Empty)&lt;br /&gt;    Return True&lt;br /&gt;  End If&lt;br /&gt;  Return MyBase.ProcessMnemonic(charCode)&lt;br /&gt;  End Function&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)&lt;br /&gt;  MyBase.OnTextChanged(e)&lt;br /&gt;  Me.Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)&lt;br /&gt;&lt;br /&gt;  'Simulate Transparency&lt;br /&gt;  Dim g As System.Drawing.Drawing2D.GraphicsContainer = pevent.Graphics.BeginContainer()&lt;br /&gt;  Dim translateRect As Rectangle = Me.Bounds&lt;br /&gt;  pevent.Graphics.TranslateTransform(-Me.Left, -Me.Top)&lt;br /&gt;  Dim pe As PaintEventArgs = New PaintEventArgs(pevent.Graphics, translateRect)&lt;br /&gt;  Me.InvokePaintBackground(Me.Parent, pe)&lt;br /&gt;  Me.InvokePaint(Me.Parent, pe)&lt;br /&gt;  pevent.Graphics.ResetTransform()&lt;br /&gt;  pevent.Graphics.EndContainer(g)&lt;br /&gt;&lt;br /&gt;  pevent.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias&lt;br /&gt;&lt;br /&gt;  Dim shadeColor, fillColor As Color&lt;br /&gt;  Dim darkColor As Color = DarkenColor(Me.BackColor, 10)&lt;br /&gt;  Dim darkDarkColor As Color = DarkenColor(Me.BackColor, 25)&lt;br /&gt;  Dim lightColor As Color = LightenColor(Me.BackColor, 25)&lt;br /&gt;  Dim lightLightColor As Color = LightenColor(Me.BackColor, 60)&lt;br /&gt;&lt;br /&gt;  If Me.ButtonState = CustomButtonState.Hot Then&lt;br /&gt;    fillColor = lightColor&lt;br /&gt;    shadeColor = darkDarkColor&lt;br /&gt;  ElseIf Me.ButtonState = CustomButtonState.Pressed Then&lt;br /&gt;    fillColor = Me.BackColor&lt;br /&gt;    shadeColor = Me.BackColor&lt;br /&gt;  Else&lt;br /&gt;    fillColor = Me.BackColor&lt;br /&gt;    shadeColor = darkDarkColor&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Dim r As Rectangle = Me.ClientRectangle&lt;br /&gt;  Dim path As Drawing2D.GraphicsPath = RoundRectangle(r, Me.CornerRadius, Me.RoundCorners)&lt;br /&gt;&lt;br /&gt;  Dim paintBrush As New Drawing2D.LinearGradientBrush(r, fillColor, shadeColor, Drawing2D.LinearGradientMode.Vertical)&lt;br /&gt;&lt;br /&gt;  'We want a sharp change in the colors so define a Blend for the brush&lt;br /&gt;  Dim b As New Drawing2D.Blend&lt;br /&gt;  b.Positions = New Single() {0, 0.45, 0.55, 1}&lt;br /&gt;  b.Factors = New Single() {0, 0, 1, 1}&lt;br /&gt;  paintBrush.Blend = b&lt;br /&gt;&lt;br /&gt;  'Draw the Button Background&lt;br /&gt;  pevent.Graphics.FillPath(paintBrush, path)&lt;br /&gt;  paintBrush.Dispose()&lt;br /&gt;&lt;br /&gt;  '...and border&lt;br /&gt;  Dim drawingPen As New Pen(darkDarkColor)&lt;br /&gt;  pevent.Graphics.DrawPath(drawingPen, path)&lt;br /&gt;  drawingPen.Dispose()&lt;br /&gt;&lt;br /&gt;  'Get the Rectangle to be used for Content&lt;br /&gt;  Dim inBounds As Boolean&lt;br /&gt;  'We could use some Math to get this from the radius but I'm &lt;br /&gt;  'not great at Math so for the example this hack will suffice.&lt;br /&gt;  While Not (inBounds) AndAlso r.Width &amp;gt;= 1 AndAlso r.Height &amp;gt;= 1&lt;br /&gt;    inBounds = path.IsVisible(r.Left, r.Top) AndAlso _&lt;br /&gt;    path.IsVisible(r.Right, r.Top) AndAlso _&lt;br /&gt;    path.IsVisible(r.Left, r.Bottom) AndAlso _&lt;br /&gt;    path.IsVisible(r.Right, r.Bottom)&lt;br /&gt;    r.Inflate(-1, -1)&lt;br /&gt;&lt;br /&gt;  End While&lt;br /&gt;&lt;br /&gt;  contentRect = r&lt;br /&gt;&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)&lt;br /&gt;  DrawImage(e.Graphics)&lt;br /&gt;  DrawText(e.Graphics)&lt;br /&gt;  DrawFocus(e.Graphics)&lt;br /&gt;  MyBase.OnPaint(e)&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnParentBackColorChanged(ByVal e As System.EventArgs)&lt;br /&gt;  MyBase.OnParentBackColorChanged(e)&lt;br /&gt;  Me.Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Protected Overrides Sub OnParentBackgroundImageChanged(ByVal e As System.EventArgs)&lt;br /&gt;  MyBase.OnParentBackgroundImageChanged(e)&lt;br /&gt;  Me.Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  #End Region&lt;br /&gt;&lt;br /&gt;  #Region " Internal Draw Methods "&lt;br /&gt;&lt;br /&gt;  Private Sub DrawImage(ByVal g As Graphics)&lt;br /&gt;&lt;br /&gt;  If Me.ImageList Is Nothing OrElse Me.ImageIndex = -1 Then Return&lt;br /&gt;  If Me.ImageIndex &amp;lt; 0 OrElse Me.ImageIndex &amp;gt;= Me.ImageList.Images.Count Then Return&lt;br /&gt;&lt;br /&gt;  Dim _Image As Image = Me.ImageList.Images(Me.ImageIndex)&lt;br /&gt;&lt;br /&gt;  Dim pt As Point&lt;br /&gt;&lt;br /&gt;  Select Case Me.ImageAlign&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.TopLeft&lt;br /&gt;    pt.X = contentRect.Left&lt;br /&gt;    pt.Y = contentRect.Top&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.TopCenter&lt;br /&gt;    pt.X = (Width - _Image.Width) \ 2&lt;br /&gt;    pt.Y = contentRect.Top&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.TopRight&lt;br /&gt;    pt.X = contentRect.Right - _Image.Width&lt;br /&gt;    pt.Y = contentRect.Top&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.MiddleLeft&lt;br /&gt;    pt.X = contentRect.Left&lt;br /&gt;    pt.Y = (Height - _Image.Height) \ 2&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.MiddleCenter&lt;br /&gt;    pt.X = (Width - _Image.Width) \ 2&lt;br /&gt;    pt.Y = (Height - _Image.Height) \ 2&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.MiddleRight&lt;br /&gt;    pt.X = contentRect.Right - _Image.Width&lt;br /&gt;    pt.Y = (Height - _Image.Height) \ 2&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.BottomLeft&lt;br /&gt;    pt.X = contentRect.Left&lt;br /&gt;    pt.Y = contentRect.Bottom - _Image.Height&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.BottomCenter&lt;br /&gt;    pt.X = (Width - _Image.Width) \ 2&lt;br /&gt;    pt.Y = contentRect.Bottom - _Image.Height&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.BottomRight&lt;br /&gt;    pt.X = contentRect.Right - _Image.Width&lt;br /&gt;    pt.Y = contentRect.Bottom - _Image.Height&lt;br /&gt;&lt;br /&gt;  End Select&lt;br /&gt;&lt;br /&gt;  If Me.ButtonState = CustomButtonState.Pressed Then&lt;br /&gt;    pt.Offset(1, 1)&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  If Me.Enabled Then&lt;br /&gt;    Me.ImageList.Draw(g, pt, Me.ImageIndex)&lt;br /&gt;  Else&lt;br /&gt;    ControlPaint.DrawImageDisabled(g, _Image, pt.X, pt.Y, Me.BackColor)&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Private Sub DrawText(ByVal g As Graphics)&lt;br /&gt;&lt;br /&gt;  Dim TextBrush As New SolidBrush(Me.ForeColor)&lt;br /&gt;&lt;br /&gt;  Dim R As RectangleF = RectangleF.op_Implicit(contentRect)&lt;br /&gt;&lt;br /&gt;  If Not Me.Enabled Then TextBrush.Color = SystemColors.GrayText&lt;br /&gt;&lt;br /&gt;  Dim sf As New StringFormat(StringFormatFlags.NoWrap Or StringFormatFlags.NoClip)&lt;br /&gt;&lt;br /&gt;  If ShowKeyboardCues Then&lt;br /&gt;    sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show&lt;br /&gt;  Else&lt;br /&gt;    sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Hide&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Select Case Me.TextAlign&lt;br /&gt;    Case ContentAlignment.TopLeft&lt;br /&gt;    sf.Alignment = StringAlignment.Near&lt;br /&gt;    sf.LineAlignment = StringAlignment.Near&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.TopCenter&lt;br /&gt;    sf.Alignment = StringAlignment.Center&lt;br /&gt;    sf.LineAlignment = StringAlignment.Near&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.TopRight&lt;br /&gt;    sf.Alignment = StringAlignment.Far&lt;br /&gt;    sf.LineAlignment = StringAlignment.Near&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.MiddleLeft&lt;br /&gt;    sf.Alignment = StringAlignment.Near&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.MiddleCenter&lt;br /&gt;    sf.Alignment = StringAlignment.Center&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.MiddleRight&lt;br /&gt;    sf.Alignment = StringAlignment.Far&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.BottomLeft&lt;br /&gt;    sf.Alignment = StringAlignment.Near&lt;br /&gt;    sf.LineAlignment = StringAlignment.Far&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.BottomCenter&lt;br /&gt;    sf.Alignment = StringAlignment.Center&lt;br /&gt;    sf.LineAlignment = StringAlignment.Far&lt;br /&gt;&lt;br /&gt;    Case ContentAlignment.BottomRight&lt;br /&gt;    sf.Alignment = StringAlignment.Far&lt;br /&gt;    sf.LineAlignment = StringAlignment.Far&lt;br /&gt;&lt;br /&gt;  End Select&lt;br /&gt;&lt;br /&gt;  If Me.ButtonState = CustomButtonState.Pressed Then&lt;br /&gt;    R.Offset(1, 1)&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  If Me.Enabled Then&lt;br /&gt;    g.DrawString(Me.Text, Me.Font, TextBrush, R, sf)&lt;br /&gt;  Else&lt;br /&gt;    ControlPaint.DrawStringDisabled(g, Me.Text, Me.Font, Me.BackColor, R, sf)&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  Private Sub DrawFocus(ByVal g As Graphics)&lt;br /&gt;  Dim r As Rectangle = contentRect&lt;br /&gt;  r.Inflate(1, 1)&lt;br /&gt;  If Me.Focused AndAlso Me.ShowFocusCues AndAlso Me.TabStop Then&lt;br /&gt;    ControlPaint.DrawFocusRectangle(g, r, Me.ForeColor, Me.BackColor)&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  #End Region&lt;br /&gt;&lt;br /&gt;  #Region " Helper Methods "&lt;br /&gt;&lt;br /&gt;  Private Function RoundRectangle(ByVal r As Rectangle, ByVal radius As Int32, ByVal corners As Corners) As System.Drawing.Drawing2D.GraphicsPath&lt;br /&gt;&lt;br /&gt;  'Make sure the Path fits inside the rectangle&lt;br /&gt;  r.Width -= 1&lt;br /&gt;  r.Height -= 1&lt;br /&gt;&lt;br /&gt;  'Scale the radius if it's too large to fit.&lt;br /&gt;  If (radius &amp;gt; (r.Width)) Then radius = r.Width&lt;br /&gt;  If (radius &amp;gt; (r.Height)) Then radius = r.Height&lt;br /&gt;&lt;br /&gt;  Dim path As New System.Drawing.Drawing2D.GraphicsPath&lt;br /&gt;&lt;br /&gt;  If radius &amp;lt;= 0 Then&lt;br /&gt;    path.AddRectangle(r)&lt;br /&gt;  Else&lt;br /&gt;    If (corners And corners.TopLeft) = corners.TopLeft Then&lt;br /&gt;    path.AddArc(r.Left, r.Top, radius, radius, 180, 90)&lt;br /&gt;    Else&lt;br /&gt;    path.AddLine(r.Left, r.Top, r.Left, r.Top)&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;    If (corners And corners.TopRight) = corners.TopRight Then&lt;br /&gt;    path.AddArc(r.Right - radius, r.Top, radius, radius, 270, 90)&lt;br /&gt;    Else&lt;br /&gt;    path.AddLine(r.Right, r.Top, r.Right, r.Top)&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    If (corners And corners.BottomRight) = corners.BottomRight Then&lt;br /&gt;    path.AddArc(r.Right - radius, r.Bottom - radius, radius, radius, 0, 90)&lt;br /&gt;    Else&lt;br /&gt;    path.AddLine(r.Right, r.Bottom, r.Right, r.Bottom)&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;    If (corners And corners.BottomLeft) = corners.BottomLeft Then&lt;br /&gt;    path.AddArc(r.Left, r.Bottom - radius, radius, radius, 90, 90)&lt;br /&gt;    Else&lt;br /&gt;    path.AddLine(r.Left, r.Bottom, r.Left, r.Bottom)&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;    path.CloseFigure()&lt;br /&gt;&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Return path&lt;br /&gt;&lt;br /&gt;  End Function&lt;br /&gt;&lt;br /&gt;  'The ControlPaint Class has methods to Lighten and Darken Colors, but they return a Solid Color.&lt;br /&gt;  'The Following 2 methods return a modified color with original Alpha.&lt;br /&gt;  Private Function DarkenColor(ByVal colorIn As Color, ByVal percent As Int32) As Color&lt;br /&gt;  'This method returns Black if you Darken by 100%&lt;br /&gt;&lt;br /&gt;  If percent &amp;lt; 0 OrElse percent &amp;gt; 100 Then&lt;br /&gt;    Throw New ArgumentOutOfRangeException("percent")&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Dim a, r, g, b As Int32&lt;br /&gt;&lt;br /&gt;  a = colorIn.A&lt;br /&gt;  r = colorIn.R - CInt((colorIn.R / 100) * percent)&lt;br /&gt;  g = colorIn.G - CInt((colorIn.G / 100) * percent)&lt;br /&gt;  b = colorIn.B - CInt((colorIn.B / 100) * percent)&lt;br /&gt;&lt;br /&gt;  Return Color.FromArgb(a, r, g, b)&lt;br /&gt;&lt;br /&gt;  End Function&lt;br /&gt;&lt;br /&gt;  Private Function LightenColor(ByVal colorIn As Color, ByVal percent As Int32) As Color&lt;br /&gt;&lt;br /&gt;  'This method returns White if you lighten by 100%&lt;br /&gt;  If percent &amp;lt; 0 OrElse percent &amp;gt; 100 Then&lt;br /&gt;    Throw New ArgumentOutOfRangeException("percent")&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Dim a, r, g, b As Int32&lt;br /&gt;&lt;br /&gt;  a = colorIn.A&lt;br /&gt;  r = colorIn.R + CInt(((255 - colorIn.R) / 100) * percent)&lt;br /&gt;  g = colorIn.G + CInt(((255 - colorIn.G) / 100) * percent)&lt;br /&gt;  b = colorIn.B + CInt(((255 - colorIn.B) / 100) * percent)&lt;br /&gt;&lt;br /&gt;  Return Color.FromArgb(a, r, g, b)&lt;br /&gt;  End Function&lt;br /&gt;&lt;br /&gt;  #End Region&lt;br /&gt;&lt;br /&gt;  Private Sub OnStateChange(ByVal e As EventArgs)&lt;br /&gt;  Static currentState As CustomButtonState&lt;br /&gt;  'Repaint the button only if the state has actually changed&lt;br /&gt;  If Me.ButtonState = currentState Then Return&lt;br /&gt;  currentState = Me.ButtonState&lt;br /&gt;  Me.Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;&lt;br /&gt;  End Class&lt;br /&gt;&lt;br /&gt;  #Region " Custom TypeEditor for RoundCorners property "&lt;br /&gt;&lt;br /&gt;  &amp;lt;PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted:=True), PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted:=True)&amp;gt; _&lt;br /&gt;  Public Class RoundCornersEditor&lt;br /&gt;  Inherits UITypeEditor&lt;br /&gt;&lt;br /&gt;  Public Overloads Overrides Function GetEditStyle(ByVal context As System.ComponentModel.ITypeDescriptorContext) As System.Drawing.Design.UITypeEditorEditStyle&lt;br /&gt;  Return UITypeEditorEditStyle.DropDown&lt;br /&gt;  End Function&lt;br /&gt;&lt;br /&gt;  Public Overloads Overrides Function EditValue(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal provider As System.IServiceProvider, ByVal value As Object) As Object&lt;br /&gt;&lt;br /&gt;  If Not TypeOf value Is Corners OrElse _&lt;br /&gt;    provider Is Nothing Then&lt;br /&gt;    Return value&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Dim edSvc As IWindowsFormsEditorService = CType(provider.GetService(GetType(IWindowsFormsEditorService)), IWindowsFormsEditorService)&lt;br /&gt;  If Not (edSvc Is Nothing) Then&lt;br /&gt;    Dim lb As New CheckedListBox&lt;br /&gt;    lb.BorderStyle = System.Windows.Forms.BorderStyle.None&lt;br /&gt;    lb.CheckOnClick = True&lt;br /&gt;&lt;br /&gt;    lb.Items.Add("TopLeft", (DirectCast(context.Instance, CustomButton).RoundCorners And Corners.TopLeft) = Corners.TopLeft)&lt;br /&gt;    lb.Items.Add("TopRight", (DirectCast(context.Instance, CustomButton).RoundCorners And Corners.TopRight) = Corners.TopRight)&lt;br /&gt;    lb.Items.Add("BottomLeft", (DirectCast(context.Instance, CustomButton).RoundCorners And Corners.BottomLeft) = Corners.BottomLeft)&lt;br /&gt;    lb.Items.Add("BottomRight", (DirectCast(context.Instance, CustomButton).RoundCorners And Corners.BottomRight) = Corners.BottomRight)&lt;br /&gt;&lt;br /&gt;    edSvc.DropDownControl(lb)&lt;br /&gt;    Dim cornerFlags As Corners&lt;br /&gt;    For Each o As Object In lb.CheckedItems&lt;br /&gt;    cornerFlags = cornerFlags Or DirectCast([Enum].Parse(GetType(Corners), o.ToString), Corners)&lt;br /&gt;    Next&lt;br /&gt;    lb.Dispose()&lt;br /&gt;    edSvc.CloseDropDown()&lt;br /&gt;    Return cornerFlags&lt;br /&gt;  End If&lt;br /&gt;&lt;br /&gt;  Return value&lt;br /&gt;&lt;br /&gt;  End Function&lt;br /&gt;&lt;br /&gt;  End Class&lt;br /&gt;&lt;br /&gt;  #End Region&lt;br /&gt;&lt;br /&gt;  End Namespace&lt;br /&gt;    &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System;&lt;br /&gt;  using System.ComponentModel;&lt;br /&gt;  using System.Drawing;&lt;br /&gt;  using System.Drawing.Design;&lt;br /&gt;  using System.Windows.Forms;&lt;br /&gt;  using System.Windows.Forms.Design;&lt;br /&gt;  using System.Security.Permissions;&lt;br /&gt;&lt;br /&gt;  namespace Dotnetrix.Samples.CSharp&lt;br /&gt;  {&lt;br /&gt;    [System.Flags]&lt;br /&gt;    public enum Corners&lt;br /&gt;    {&lt;br /&gt;    None = 0,&lt;br /&gt;    TopLeft = 1,&lt;br /&gt;    TopRight = 2,&lt;br /&gt;    BottomLeft = 4,&lt;br /&gt;    BottomRight = 8,&lt;br /&gt;    All = TopLeft | TopRight | BottomLeft | BottomRight&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public enum CustomButtonState&lt;br /&gt;    {&lt;br /&gt;    Normal = 1,&lt;br /&gt;    Hot,&lt;br /&gt;    Pressed,&lt;br /&gt;    Disabled,&lt;br /&gt;    Focused&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public class CustomButton : Control, IButtonControl&lt;br /&gt;    {&lt;br /&gt;    public CustomButton():base()&lt;br /&gt;    {&lt;br /&gt;      this.SetStyle(ControlStyles.Selectable | ControlStyles.StandardClick | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  #region Private Instance Variables&lt;br /&gt;&lt;br /&gt;    private DialogResult m_DialogResult;&lt;br /&gt;    private bool m_IsDefault;&lt;br /&gt;    &lt;br /&gt;    private int m_CornerRadius  = 8;&lt;br /&gt;    private Corners m_RoundCorners;&lt;br /&gt;    private CustomButtonState m_ButtonState = CustomButtonState.Normal;&lt;br /&gt;    &lt;br /&gt;    private ContentAlignment m_ImageAlign = ContentAlignment.MiddleCenter;&lt;br /&gt;    private ContentAlignment m_TextAlign = ContentAlignment.MiddleCenter;&lt;br /&gt;    private ImageList m_ImageList;&lt;br /&gt;    private int m_ImageIndex = -1;&lt;br /&gt;    &lt;br /&gt;    private bool keyPressed;&lt;br /&gt;    private Rectangle contentRect;&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region IButtonControl Implementation&lt;br /&gt;&lt;br /&gt;    [Category("Behavior"), DefaultValue(typeof(DialogResult), "None")]&lt;br /&gt;    [Description("The dialog result produced in a modal form by clicking the button.")]&lt;br /&gt;    public DialogResult DialogResult&lt;br /&gt;    {&lt;br /&gt;      get{return m_DialogResult;}&lt;br /&gt;      set&lt;br /&gt;      {&lt;br /&gt;        if (Enum.IsDefined(typeof(DialogResult), value))&lt;br /&gt;        m_DialogResult = value;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    public void NotifyDefault(bool value)&lt;br /&gt;    {&lt;br /&gt;      if (m_IsDefault != value)&lt;br /&gt;        m_IsDefault = value;&lt;br /&gt;      this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public void PerformClick()&lt;br /&gt;    {&lt;br /&gt;      if (this.CanSelect)&lt;br /&gt;        base.OnClick(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region Properties&lt;br /&gt;&lt;br /&gt;    //ButtonState&lt;br /&gt;    [Browsable(false)]&lt;br /&gt;    public CustomButtonState ButtonState&lt;br /&gt;    {&lt;br /&gt;      get{return m_ButtonState;}&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //CornerRadius&lt;br /&gt;    [Category("Appearance")]&lt;br /&gt;    [DefaultValue(8)]&lt;br /&gt;    [Description("Defines the radius of the controls RoundedCorners.")]&lt;br /&gt;    public int CornerRadius&lt;br /&gt;    {&lt;br /&gt;      get{return m_CornerRadius;}&lt;br /&gt;      set&lt;br /&gt;      {&lt;br /&gt;        if (m_CornerRadius == value) &lt;br /&gt;        return;&lt;br /&gt;        m_CornerRadius = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //DefaultSize&lt;br /&gt;    protected override System.Drawing.Size DefaultSize&lt;br /&gt;    {&lt;br /&gt;      get{return new Size(75, 23);}&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //IsDefault&lt;br /&gt;    [Browsable(false)]&lt;br /&gt;    public bool IsDefault&lt;br /&gt;    {&lt;br /&gt;      get{return m_IsDefault;}&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //ImageList&lt;br /&gt;    [Category("Appearance"), DefaultValue(typeof(ImageList), null)]&lt;br /&gt;    [Description("The image list to get the image to display in the face of the control.")]&lt;br /&gt;    public ImageList ImageList&lt;br /&gt;    {&lt;br /&gt;      get{return m_ImageList;}&lt;br /&gt;      set&lt;br /&gt;      {&lt;br /&gt;        m_ImageList = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //ImageIndex&lt;br /&gt;    [Category("Appearance"), DefaultValue(-1)]&lt;br /&gt;    [Description("The index of the image in the image list to display in the face of the control.")]&lt;br /&gt;    [TypeConverter(typeof(ImageIndexConverter))]&lt;br /&gt;    [Editor("System.Windows.Forms.Design.ImageIndexEditor, System.Design", typeof(System.Drawing.Design.UITypeEditor))]&lt;br /&gt;    public int ImageIndex&lt;br /&gt;    {&lt;br /&gt;      get{return m_ImageIndex;}&lt;br /&gt;      set&lt;br /&gt;      {&lt;br /&gt;        m_ImageIndex = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //ImageAlign&lt;br /&gt;    [Category("Appearance"), DefaultValue(typeof(ContentAlignment), "MiddleCenter")]&lt;br /&gt;    [Description("The alignment of the image that will be displayed in the face of the control.")]&lt;br /&gt;    public ContentAlignment ImageAlign&lt;br /&gt;    {&lt;br /&gt;      get{return m_ImageAlign;}&lt;br /&gt;      set&lt;br /&gt;      {&lt;br /&gt;        if (!Enum.IsDefined(typeof(ContentAlignment), value))&lt;br /&gt;        throw new InvalidEnumArgumentException("value", (int)value, typeof(ContentAlignment));&lt;br /&gt;        if (m_ImageAlign == value )&lt;br /&gt;        return;&lt;br /&gt;        m_ImageAlign = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //RoundCorners&lt;br /&gt;    [Category("Appearance")]&lt;br /&gt;    [DefaultValue(typeof(Corners), "None")]&lt;br /&gt;    [Description("Gets/sets the corners of the control to round.")]&lt;br /&gt;    [Editor(typeof(RoundCornersEditor), typeof(UITypeEditor))]&lt;br /&gt;    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]&lt;br /&gt;    public Corners RoundCorners&lt;br /&gt;    {&lt;br /&gt;      get{return m_RoundCorners;}&lt;br /&gt;      set&lt;br /&gt;      {&lt;br /&gt;        if (m_RoundCorners == value)&lt;br /&gt;        return;&lt;br /&gt;        m_RoundCorners = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //TextAlign&lt;br /&gt;    [Category("Appearance"), DefaultValue(typeof(ContentAlignment), "MiddleCenter")]&lt;br /&gt;    [Description("The alignment of the text that will be displayed in the face of the control.")]&lt;br /&gt;    public ContentAlignment TextAlign&lt;br /&gt;    {&lt;br /&gt;      get{return m_TextAlign;}&lt;br /&gt;      set&lt;br /&gt;      {&lt;br /&gt;        if (!Enum.IsDefined(typeof(ContentAlignment), value))&lt;br /&gt;        throw new InvalidEnumArgumentException("value", (int)value, typeof(ContentAlignment));&lt;br /&gt;        if (m_TextAlign == value)&lt;br /&gt;        return;&lt;br /&gt;        m_TextAlign = value;&lt;br /&gt;        this.Invalidate();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region Overriden Methods&lt;br /&gt;&lt;br /&gt;    protected override void OnKeyDown(KeyEventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnKeyDown (e);&lt;br /&gt;      if (e.KeyCode == Keys.Space)&lt;br /&gt;      {&lt;br /&gt;        keyPressed = true;&lt;br /&gt;        m_ButtonState = CustomButtonState.Pressed;&lt;br /&gt;      }&lt;br /&gt;      OnStateChange(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnKeyUp(KeyEventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnKeyUp (e);&lt;br /&gt;      if (e.KeyCode == Keys.Space)&lt;br /&gt;      {&lt;br /&gt;        if (this.ButtonState == CustomButtonState.Pressed)&lt;br /&gt;        this.PerformClick();&lt;br /&gt;        keyPressed = false;&lt;br /&gt;        m_ButtonState = CustomButtonState.Focused;&lt;br /&gt;      }&lt;br /&gt;      OnStateChange(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnMouseEnter(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnMouseEnter (e);&lt;br /&gt;      if (!keyPressed)&lt;br /&gt;        m_ButtonState = CustomButtonState.Hot;&lt;br /&gt;      OnStateChange(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnMouseLeave(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnMouseLeave (e);&lt;br /&gt;      if (!keyPressed)&lt;br /&gt;        if (this.IsDefault)&lt;br /&gt;        m_ButtonState = CustomButtonState.Focused;&lt;br /&gt;        else&lt;br /&gt;        m_ButtonState = CustomButtonState.Normal;&lt;br /&gt;      OnStateChange(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnMouseDown(MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnMouseDown (e);&lt;br /&gt;      if (e.Button == MouseButtons.Left)&lt;br /&gt;      {&lt;br /&gt;        this.Focus();&lt;br /&gt;        m_ButtonState = CustomButtonState.Pressed;&lt;br /&gt;      }&lt;br /&gt;      OnStateChange(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnMouseUp(MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnMouseUp (e);&lt;br /&gt;      m_ButtonState = CustomButtonState.Focused;&lt;br /&gt;      OnStateChange(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnMouseMove(MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnMouseMove (e);&lt;br /&gt;      if (new Rectangle(Point.Empty, this.Size).Contains(e.X, e.Y) &amp;amp;&amp;amp; e.Button == MouseButtons.Left)&lt;br /&gt;        m_ButtonState = CustomButtonState.Pressed;&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;        if(keyPressed)&lt;br /&gt;        return;&lt;br /&gt;        m_ButtonState = CustomButtonState.Hot;&lt;br /&gt;      }&lt;br /&gt;      OnStateChange(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnGotFocus(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnGotFocus (e);&lt;br /&gt;      m_ButtonState = CustomButtonState.Focused;&lt;br /&gt;      this.NotifyDefault(true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnLostFocus(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnLostFocus (e);&lt;br /&gt;      if (this.FindForm().Focused)&lt;br /&gt;        this.NotifyDefault(false);&lt;br /&gt;      m_ButtonState = CustomButtonState.Normal;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnEnabledChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnEnabledChanged (e);&lt;br /&gt;      if (this.Enabled)&lt;br /&gt;        m_ButtonState = CustomButtonState.Normal;&lt;br /&gt;      else&lt;br /&gt;        m_ButtonState = CustomButtonState.Disabled;&lt;br /&gt;      OnStateChange(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnClick(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      //Click gets fired before MouseUp which is handy&lt;br /&gt;      if (this.ButtonState == CustomButtonState.Pressed)&lt;br /&gt;      {&lt;br /&gt;        this.Focus();&lt;br /&gt;        this.PerformClick();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnDoubleClick(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      if (this.ButtonState == CustomButtonState.Pressed)&lt;br /&gt;      {&lt;br /&gt;        this.Focus();&lt;br /&gt;        this.PerformClick();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override bool ProcessMnemonic(char charCode)&lt;br /&gt;    {&lt;br /&gt;      if (IsMnemonic(charCode, this.Text))&lt;br /&gt;      {&lt;br /&gt;        base.OnClick(EventArgs.Empty);&lt;br /&gt;        return true;&lt;br /&gt;      }&lt;br /&gt;      return base.ProcessMnemonic(charCode);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnTextChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnTextChanged(e);&lt;br /&gt;      this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnPaintBackground(PaintEventArgs pevent)&lt;br /&gt;    {&lt;br /&gt;      //Simulate Transparency&lt;br /&gt;      System.Drawing.Drawing2D.GraphicsContainer g = pevent.Graphics.BeginContainer();&lt;br /&gt;      Rectangle translateRect = this.Bounds;&lt;br /&gt;      pevent.Graphics.TranslateTransform(-this.Left, -this.Top);&lt;br /&gt;      PaintEventArgs pe = new PaintEventArgs(pevent.Graphics, translateRect);&lt;br /&gt;      this.InvokePaintBackground(this.Parent, pe);&lt;br /&gt;      this.InvokePaint(this.Parent, pe);&lt;br /&gt;      pevent.Graphics.ResetTransform();&lt;br /&gt;      pevent.Graphics.EndContainer(g);&lt;br /&gt;&lt;br /&gt;      pevent.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;&lt;br /&gt;&lt;br /&gt;      Color shadeColor, fillColor; &lt;br /&gt;      Color darkColor = DarkenColor(this.BackColor, 10);&lt;br /&gt;      Color darkDarkColor = DarkenColor(this.BackColor, 25);&lt;br /&gt;      Color lightColor = LightenColor(this.BackColor, 25);&lt;br /&gt;      Color lightLightColor = LightenColor(this.BackColor, 60);&lt;br /&gt;&lt;br /&gt;      if (this.ButtonState == CustomButtonState.Hot)&lt;br /&gt;      {&lt;br /&gt;        fillColor = lightColor;&lt;br /&gt;        shadeColor = darkDarkColor;&lt;br /&gt;      }&lt;br /&gt;      else if (this.ButtonState == CustomButtonState.Pressed)&lt;br /&gt;      {&lt;br /&gt;        fillColor = this.BackColor;&lt;br /&gt;        shadeColor = this.BackColor;&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;        fillColor = this.BackColor;&lt;br /&gt;        shadeColor = darkDarkColor;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      Rectangle r = this.ClientRectangle;&lt;br /&gt;      System.Drawing.Drawing2D.GraphicsPath path = RoundRectangle(r, this.CornerRadius, this.RoundCorners);&lt;br /&gt;&lt;br /&gt;      System.Drawing.Drawing2D.LinearGradientBrush paintBrush = new System.Drawing.Drawing2D.LinearGradientBrush(r, fillColor, shadeColor, System.Drawing.Drawing2D.LinearGradientMode.Vertical);&lt;br /&gt;&lt;br /&gt;      //We want a sharp change in the colors so define a Blend for the brush&lt;br /&gt;      System.Drawing.Drawing2D.Blend b = new System.Drawing.Drawing2D.Blend();&lt;br /&gt;      b.Positions = new float[] {0, 0.45F, 0.55F, 1};&lt;br /&gt;      b.Factors = new float[] {0, 0, 1, 1};&lt;br /&gt;      paintBrush.Blend = b;&lt;br /&gt;&lt;br /&gt;      //Draw the Button Background&lt;br /&gt;      pevent.Graphics.FillPath(paintBrush, path);&lt;br /&gt;      paintBrush.Dispose();&lt;br /&gt;&lt;br /&gt;      //...and border&lt;br /&gt;      Pen drawingPen = new Pen(darkDarkColor);&lt;br /&gt;      pevent.Graphics.DrawPath(drawingPen, path);&lt;br /&gt;      drawingPen.Dispose();&lt;br /&gt;&lt;br /&gt;      //Get the Rectangle to be used for Content&lt;br /&gt;      bool inBounds = false;&lt;br /&gt;      //We could use some Math to get this from the radius but I'm &lt;br /&gt;      //not great at Math so for the example this hack will suffice.&lt;br /&gt;      while (!inBounds &amp;amp;&amp;amp; r.Width &amp;gt;= 1 &amp;amp;&amp;amp; r.Height &amp;gt;= 1)&lt;br /&gt;      {&lt;br /&gt;        inBounds = path.IsVisible(r.Left, r.Top) &amp;amp;&amp;amp;&lt;br /&gt;            path.IsVisible(r.Right, r.Top) &amp;amp;&amp;amp;&lt;br /&gt;            path.IsVisible(r.Left, r.Bottom) &amp;amp;&amp;amp;&lt;br /&gt;            path.IsVisible(r.Right, r.Bottom);&lt;br /&gt;        r.Inflate(-1, -1);&lt;br /&gt;        &lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      contentRect = r;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnPaint(PaintEventArgs e)&lt;br /&gt;    {&lt;br /&gt;      DrawImage(e.Graphics);&lt;br /&gt;      DrawText(e.Graphics);&lt;br /&gt;      DrawFocus(e.Graphics);&lt;br /&gt;      base.OnPaint (e);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnParentBackColorChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnParentBackColorChanged (e);&lt;br /&gt;      this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override void OnParentBackgroundImageChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      base.OnParentBackgroundImageChanged (e);&lt;br /&gt;      this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region Internal Draw Methods&lt;br /&gt;&lt;br /&gt;    private void DrawImage(Graphics g)&lt;br /&gt;    {&lt;br /&gt;      if (this.ImageList == null || this.ImageIndex == -1)&lt;br /&gt;        return;&lt;br /&gt;      if (this.ImageIndex &amp;lt; 0 || this.ImageIndex &amp;gt;= this.ImageList.Images.Count)&lt;br /&gt;        return;&lt;br /&gt;&lt;br /&gt;      Image _Image = this.ImageList.Images[this.ImageIndex];&lt;br /&gt;&lt;br /&gt;      Point pt = Point.Empty;&lt;br /&gt;&lt;br /&gt;      switch (this.ImageAlign)&lt;br /&gt;      {&lt;br /&gt;        case ContentAlignment.TopLeft:&lt;br /&gt;        pt.X = contentRect.Left;&lt;br /&gt;        pt.Y = contentRect.Top;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.TopCenter:&lt;br /&gt;        pt.X = (Width - _Image.Width) / 2;&lt;br /&gt;        pt.Y = contentRect.Top;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.TopRight:&lt;br /&gt;        pt.X = contentRect.Right - _Image.Width;&lt;br /&gt;        pt.Y = contentRect.Top;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.MiddleLeft:&lt;br /&gt;        pt.X = contentRect.Left;&lt;br /&gt;        pt.Y = (Height - _Image.Height) / 2;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.MiddleCenter:&lt;br /&gt;        pt.X = (Width - _Image.Width) / 2;&lt;br /&gt;        pt.Y = (Height - _Image.Height) / 2;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.MiddleRight:&lt;br /&gt;        pt.X = contentRect.Right - _Image.Width;&lt;br /&gt;        pt.Y = (Height - _Image.Height) / 2;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.BottomLeft:&lt;br /&gt;        pt.X = contentRect.Left;&lt;br /&gt;        pt.Y = contentRect.Bottom - _Image.Height;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.BottomCenter:&lt;br /&gt;        pt.X = (Width - _Image.Width) / 2;&lt;br /&gt;        pt.Y = contentRect.Bottom - _Image.Height;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.BottomRight:&lt;br /&gt;        pt.X = contentRect.Right - _Image.Width;&lt;br /&gt;        pt.Y = contentRect.Bottom - _Image.Height;&lt;br /&gt;        break;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (this.ButtonState == CustomButtonState.Pressed)&lt;br /&gt;        pt.Offset(1, 1);&lt;br /&gt;&lt;br /&gt;      if (this.Enabled)&lt;br /&gt;        this.ImageList.Draw(g, pt, this.ImageIndex);&lt;br /&gt;      else&lt;br /&gt;        ControlPaint.DrawImageDisabled(g, _Image, pt.X, pt.Y, this.BackColor);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    private void DrawText(Graphics g)&lt;br /&gt;    {&lt;br /&gt;      SolidBrush TextBrush = new SolidBrush(this.ForeColor);&lt;br /&gt;      &lt;br /&gt;      RectangleF R = (RectangleF)contentRect;&lt;br /&gt;      &lt;br /&gt;      if (!this.Enabled)&lt;br /&gt;        TextBrush.Color = SystemColors.GrayText;&lt;br /&gt;      &lt;br /&gt;      StringFormat sf = new StringFormat(StringFormatFlags.NoWrap | StringFormatFlags.NoClip);&lt;br /&gt;      &lt;br /&gt;      if (ShowKeyboardCues)&lt;br /&gt;        sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show;&lt;br /&gt;      else&lt;br /&gt;        sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Hide;&lt;br /&gt;      &lt;br /&gt;      switch (this.TextAlign)&lt;br /&gt;      {&lt;br /&gt;        case ContentAlignment.TopLeft:&lt;br /&gt;        sf.Alignment = StringAlignment.Near;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Near;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.TopCenter:&lt;br /&gt;        sf.Alignment = StringAlignment.Center;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Near;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.TopRight:&lt;br /&gt;        sf.Alignment = StringAlignment.Far;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Near;&lt;br /&gt;        break;&lt;br /&gt;        &lt;br /&gt;        case ContentAlignment.MiddleLeft:&lt;br /&gt;        sf.Alignment = StringAlignment.Near;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Center;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.MiddleCenter:&lt;br /&gt;        sf.Alignment = StringAlignment.Center;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Center;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.MiddleRight:&lt;br /&gt;        sf.Alignment = StringAlignment.Far;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Center;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.BottomLeft:&lt;br /&gt;        sf.Alignment = StringAlignment.Near;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Far;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.BottomCenter:&lt;br /&gt;        sf.Alignment = StringAlignment.Center;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Far;&lt;br /&gt;        break;&lt;br /&gt;&lt;br /&gt;        case ContentAlignment.BottomRight:&lt;br /&gt;        sf.Alignment = StringAlignment.Far;&lt;br /&gt;        sf.LineAlignment = StringAlignment.Far;&lt;br /&gt;        break;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (this.ButtonState == CustomButtonState.Pressed)&lt;br /&gt;        R.Offset(1, 1);&lt;br /&gt;&lt;br /&gt;      if (this.Enabled)&lt;br /&gt;        g.DrawString(this.Text, this.Font, TextBrush, R, sf);&lt;br /&gt;      else&lt;br /&gt;        ControlPaint.DrawStringDisabled(g, this.Text, this.Font, this.BackColor, R, sf);&lt;br /&gt;      &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    private void DrawFocus(Graphics g)&lt;br /&gt;    {&lt;br /&gt;      Rectangle r = contentRect;&lt;br /&gt;      r.Inflate(1, 1);&lt;br /&gt;      if (this.Focused &amp;amp;&amp;amp; this.ShowFocusCues &amp;amp;&amp;amp; this.TabStop)&lt;br /&gt;        ControlPaint.DrawFocusRectangle(g, r, this.ForeColor, this.BackColor);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  #region Helper Methods&lt;br /&gt;&lt;br /&gt;    private System.Drawing.Drawing2D.GraphicsPath RoundRectangle(Rectangle r, int radius, Corners corners)&lt;br /&gt;    {&lt;br /&gt;      //Make sure the Path fits inside the rectangle&lt;br /&gt;      r.Width -= 1;&lt;br /&gt;      r.Height -= 1;&lt;br /&gt;      &lt;br /&gt;      //Scale the radius if it's too large to fit.&lt;br /&gt;      if (radius &amp;gt; (r.Width))&lt;br /&gt;        radius = r.Width;&lt;br /&gt;      if (radius &amp;gt; (r.Height))&lt;br /&gt;        radius = r.Height;&lt;br /&gt;      &lt;br /&gt;      System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();&lt;br /&gt;      &lt;br /&gt;      if (radius &amp;lt;= 0 )&lt;br /&gt;        path.AddRectangle(r);&lt;br /&gt;      else&lt;br /&gt;        if ((corners &amp;amp; Corners.TopLeft) == Corners.TopLeft)&lt;br /&gt;        path.AddArc(r.Left, r.Top, radius, radius, 180, 90);&lt;br /&gt;      else&lt;br /&gt;        path.AddLine(r.Left, r.Top, r.Left, r.Top);&lt;br /&gt;      &lt;br /&gt;      if ((corners &amp;amp; Corners.TopRight) == Corners.TopRight)&lt;br /&gt;        path.AddArc(r.Right - radius, r.Top, radius, radius, 270, 90);&lt;br /&gt;      else&lt;br /&gt;        path.AddLine(r.Right, r.Top, r.Right, r.Top);&lt;br /&gt;      &lt;br /&gt;      if ((corners &amp;amp; Corners.BottomRight) == Corners.BottomRight)&lt;br /&gt;        path.AddArc(r.Right - radius, r.Bottom - radius, radius, radius, 0, 90);&lt;br /&gt;      else&lt;br /&gt;        path.AddLine(r.Right, r.Bottom, r.Right, r.Bottom);&lt;br /&gt;      &lt;br /&gt;      if ((corners &amp;amp; Corners.BottomLeft) == Corners.BottomLeft)&lt;br /&gt;        path.AddArc(r.Left, r.Bottom - radius, radius, radius, 90, 90);&lt;br /&gt;      else&lt;br /&gt;        path.AddLine(r.Left, r.Bottom, r.Left, r.Bottom);&lt;br /&gt;      &lt;br /&gt;      path.CloseFigure();&lt;br /&gt;&lt;br /&gt;      return path;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    //The ControlPaint Class has methods to Lighten and Darken Colors, but they return a Solid Color.&lt;br /&gt;    //The Following 2 methods return a modified color with original Alpha.&lt;br /&gt;    private Color DarkenColor(Color colorIn, int percent)&lt;br /&gt;    {&lt;br /&gt;      //This method returns Black if you Darken by 100%&lt;br /&gt;      &lt;br /&gt;      if (percent &amp;lt; 0 || percent &amp;gt; 100)&lt;br /&gt;        throw new ArgumentOutOfRangeException("percent");&lt;br /&gt;      &lt;br /&gt;      int a, r, g, b;&lt;br /&gt;      &lt;br /&gt;      a = colorIn.A;&lt;br /&gt;      r = colorIn.R - (int)((colorIn.R / 100f) * percent);&lt;br /&gt;      g = colorIn.G - (int)((colorIn.G / 100f) * percent);&lt;br /&gt;      b = colorIn.B - (int)((colorIn.B / 100f) * percent);&lt;br /&gt;      &lt;br /&gt;      return Color.FromArgb(a, r, g, b);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    private Color LightenColor(Color colorIn, int percent)&lt;br /&gt;    {&lt;br /&gt;      //This method returns White if you lighten by 100%&lt;br /&gt;      &lt;br /&gt;      if (percent &amp;lt; 0 || percent &amp;gt; 100)&lt;br /&gt;        throw new ArgumentOutOfRangeException("percent");&lt;br /&gt;      &lt;br /&gt;      int a, r, g, b;&lt;br /&gt;      &lt;br /&gt;      a = colorIn.A;&lt;br /&gt;      r = colorIn.R + (int)(((255f - colorIn.R) / 100f) * percent);&lt;br /&gt;      g = colorIn.G + (int)(((255f - colorIn.G) / 100f) * percent);&lt;br /&gt;      b = colorIn.B + (int)(((255f - colorIn.B) / 100f) * percent);&lt;br /&gt;      &lt;br /&gt;      return Color.FromArgb(a, r, g, b);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;    private CustomButtonState currentState; &lt;br /&gt;    private void OnStateChange(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;      //Repaint the button only if the state has actually changed&lt;br /&gt;      if (this.ButtonState == currentState)&lt;br /&gt;        return;&lt;br /&gt;      currentState = this.ButtonState;&lt;br /&gt;      this.Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  #region Custom TypeEditor for RoundCorners property&lt;br /&gt;&lt;br /&gt;    [PermissionSetAttribute(SecurityAction.LinkDemand, Unrestricted=true)]&lt;br /&gt;    [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)]&lt;br /&gt;    public class RoundCornersEditor : UITypeEditor&lt;br /&gt;    {&lt;br /&gt;    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)&lt;br /&gt;    {&lt;br /&gt;      return UITypeEditorEditStyle.DropDown;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public override Object EditValue(ITypeDescriptorContext context, IServiceProvider provider, Object value)&lt;br /&gt;    {&lt;br /&gt;      if (value != typeof(Corners) ||  provider == null)&lt;br /&gt;        return value;&lt;br /&gt;      &lt;br /&gt;      IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));&lt;br /&gt;      if (edSvc != null)&lt;br /&gt;      {&lt;br /&gt;        CheckedListBox lb = new CheckedListBox();&lt;br /&gt;        lb.BorderStyle = BorderStyle.None;&lt;br /&gt;        lb.CheckOnClick = true;&lt;br /&gt;        &lt;br /&gt;        lb.Items.Add("TopLeft", (((CustomButton)context.Instance).RoundCorners &amp;amp; Corners.TopLeft) == Corners.TopLeft);&lt;br /&gt;        lb.Items.Add("TopRight", (((CustomButton)context.Instance).RoundCorners &amp;amp; Corners.TopRight) == Corners.TopRight);&lt;br /&gt;        lb.Items.Add("BottomLeft", (((CustomButton)context.Instance).RoundCorners &amp;amp; Corners.BottomLeft) == Corners.BottomLeft);&lt;br /&gt;        lb.Items.Add("BottomRight", (((CustomButton)context.Instance).RoundCorners &amp;amp; Corners.BottomRight) == Corners.BottomRight);&lt;br /&gt;&lt;br /&gt;        edSvc.DropDownControl(lb);&lt;br /&gt;        Corners cornerFlags = Corners.None;&lt;br /&gt;        foreach (object o in lb.CheckedItems)&lt;br /&gt;        {&lt;br /&gt;        cornerFlags = cornerFlags | (Corners)Enum.Parse(typeof(Corners), o.ToString());&lt;br /&gt;        }&lt;br /&gt;        lb.Dispose();&lt;br /&gt;        edSvc.CloseDropDown();&lt;br /&gt;        return cornerFlags;&lt;br /&gt;      }&lt;br /&gt;      return value;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  #endregion&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;       &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;by: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Dohertys'&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-1723495820479380511?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/1723495820479380511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/create-custom-button-in-form.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1723495820479380511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1723495820479380511'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/create-custom-button-in-form.html' title='Create Custom Button in Form'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-VWveMRoCRWM/Ti1titmwvPI/AAAAAAAAAQ8/FHzxYMKlKag/s72-c/Create+Custom+Button+in+Form+VB+net+Csharp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-3819300420346585684</id><published>2011-07-23T13:23:00.000-07:00</published><updated>2011-07-23T13:23:32.511-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Control'/><title type='text'>Custom Tab Control With Cool Appearance</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: center;"&gt;             &lt;img alt="" height="254" src="http://dotnetrix.co.uk/images/tabcontrolex.png" width="464" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;03 Feb 2005 - New Bevel Appearance added and Draw Methods exposed for Inheritance Overrides.&lt;br /&gt;&lt;div style="text-align: center;"&gt;             &lt;img alt="" height="111" src="http://dotnetrix.co.uk/images/tabcontrolexbevel.png" width="338" /&gt;&lt;/div&gt;20 Feb 2005 - Keyboard and mouse navigation improved to ignore/skip-over disabled TabPages.&lt;br /&gt;Enabled property exposed on TabPageEX and modifications made so as to comply with Microsoft FxCop rules.&lt;br /&gt;17 May 2005 - Bug Fix: SelectedIndexChanged was being fired twice when tab changed by mouse.&lt;br /&gt;25 May 2005 - Bug Fix: When used with some 3rd party control  libraries the TabAppearanceEX Enumeration was 'misplaced' by the IDE.  This was due to nesting and so the enum has been moved. Also fixed a few  new FXCop violations and added a custom designer to TabpageEX as the  control misbehaved in VS2005 when using the standard tabpage designer.&lt;br /&gt;11 June 2005 - Added InsertTabPage method and implemented the TabPageEX Hide() and Show() methods.&lt;br /&gt;27 June 2005 - Added Visual Styles Support.&lt;br /&gt;&lt;div style="text-align: center;"&gt;             &lt;img alt="" height="271" src="http://dotnetrix.co.uk/images/tabcontrolexvs.png" width="490" /&gt;&lt;/div&gt;29 July 2005 - Added GroupBoxEX to the dll. Leave GroupBoxEX  at FlatStyle.Standard as I have overridden the OnPaintBackGround() and  OnPaint() methods to draw the control with Visual Style as necessary.  Set the GroupBoxEX's BackColor property to Transparent and you should  see the Themed Tabpage background (when it's on a themed tabpage). The  only problem with this being that all controls added to the GroupBoxEX  will inherit the Transparent Background color.&lt;br /&gt;11 August 2005 - Bug Fix: Arrow Key navigated tabs even when  Tabcontrol not focused, eg; when textbox as child of tabpage was  selected.&lt;br /&gt;24 March 2006 - Bug Fix: MouseDown and Click events were not being fired.&lt;br /&gt;06 Dec 2006 - Bug Fix: Null Reference exception was raised randomly when changing TabPage Selection. Thanks to &lt;a href="http://www.dfpc.net/"&gt;Sam J Martinez&lt;/a&gt; for his help in locating and fixing this bug.&lt;br /&gt;22 March 2007 - Bug Fix: ArgumentException raised occasionally.&lt;br /&gt;20 July 2007 - Bug Fix: Undo/Redo now works on the Design Surface.&lt;br /&gt;21 October 2008 - Bug Fix: SelectedTabFontStyle defaulted to Regular rather than Controls Font.Style.&lt;br /&gt;This control is a more complete version of the one shown in  my Tips page. Unlike the TabControl from which it Inherits, you can set  any Alignment value with any Appearance value.&lt;br /&gt;An OnSelectedIndexChanging Method has been added to the TabControl so that you may cancel selection of a TabPage.&lt;br /&gt;Disabled Tabs do not recieve a Click event.&lt;br /&gt;Set AllowDrop and AllowTabDrag to True and you are able to drag TabItems around at runtime.&lt;br /&gt;Mnemonic support has been added.&lt;br /&gt;You may have to play around with Padding if you use non standard Font.&lt;br /&gt;&lt;br /&gt;&lt;a class="button" href="http://dotnetrix.co.uk/download/TabControlEX.zip"&gt;Download Here...&lt;/a&gt;&lt;br /&gt;From: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Doherty&lt;/a&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-3819300420346585684?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/3819300420346585684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/custom-tab-control-with-cool-appearance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/3819300420346585684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/3819300420346585684'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/custom-tab-control-with-cool-appearance.html' title='Custom Tab Control With Cool Appearance'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-892054362384169895</id><published>2011-07-23T13:20:00.000-07:00</published><updated>2011-07-23T13:20:38.773-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Control'/><title type='text'>Custom Menu Design With MenuSkinner</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://dotnetrix.co.uk/images/menuskinner.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Custom Menu Design With MenuSkinner" border="0" height="126" src="http://dotnetrix.co.uk/images/menuskinner.png" title="Custom Menu Design With MenuSkinner" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;Drop a MenuSkin component on your form and standard menu items are extended with icon and font properties.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;The Menuskin component has several properties with which you can modify the menus appearance.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dotnetrix.co.uk/download/MenuSkinner.zip"&gt;Click Here To Download (By Mick Doherty)&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-892054362384169895?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/892054362384169895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/custom-menu-design-with-menuskinner.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/892054362384169895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/892054362384169895'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/custom-menu-design-with-menuskinner.html' title='Custom Menu Design With MenuSkinner'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-1445555717993805236</id><published>2011-07-22T10:26:00.000-07:00</published><updated>2011-07-22T10:26:20.942-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Menu Strip'/><title type='text'>Create Menu Bar Like Office style Menu</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-b_0O9i0_g6E/TimyIOgJMtI/AAAAAAAAAQ0/o2Q7pO8-5sI/s1600/Create+Menu+Bar+Like+Office+style+Menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Create Menu Bar Like Office style Menu" border="0" src="http://3.bp.blogspot.com/-b_0O9i0_g6E/TimyIOgJMtI/AAAAAAAAAQ0/o2Q7pO8-5sI/s1600/Create+Menu+Bar+Like+Office+style+Menu.png" title="Create Menu Bar Like Office style Menu" /&gt;&lt;/a&gt;&lt;/div&gt;A complete ownerdraw menu class with RightToLeft support.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Add this class to your project and after designing the layout of your standard menu, use search and replace to replace 'System.Windows.Forms.MenuItem' with 'MenuItemEx'. You will then be able to assign colors and icons to each menu item in the project. Use this class for MDI projects or download the MenuSkinner component in the Controls section. The MenuSkinner is much simpler to use but there is a problem with Menus that unMerge which I have yet to find a solution for.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Imports System.ComponentModel&lt;br /&gt;Imports System.Runtime.InteropServices&lt;br /&gt;Imports System.Environment&lt;br /&gt;Imports System.ComponentModel.Design&lt;br /&gt;Public Class MenuitemEx&lt;br /&gt;    Inherits MenuItem&lt;br /&gt;#Region " Windows Form Designer generated code "&lt;br /&gt;    Public Sub New()&lt;br /&gt;        MyBase.New()&lt;br /&gt;        'This call is required by the Windows Form Designer.&lt;br /&gt;        InitializeComponent()&lt;br /&gt;        'Add any initialization after the InitializeComponent() call&lt;br /&gt;    End Sub&lt;br /&gt;    'UserControl overrides dispose to clean up the component list.&lt;br /&gt;    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;        If disposing Then&lt;br /&gt;            If Not (components Is Nothing) Then&lt;br /&gt;                components.Dispose()&lt;br /&gt;            End If&lt;br /&gt;        End If&lt;br /&gt;        MyBase.Dispose(disposing)&lt;br /&gt;    End Sub&lt;br /&gt;    'Required by the Windows Form Designer&lt;br /&gt;    Private components As System.ComponentModel.IContainer&lt;br /&gt;    'NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;    'It can be modified using the Windows Form Designer.  &lt;br /&gt;    'Do not modify it using the code editor.&lt;br /&gt;    &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; Private Sub InitializeComponent()&lt;br /&gt;        '&lt;br /&gt;        'MenuitemEx&lt;br /&gt;        '&lt;br /&gt;        Me.OwnerDraw = True&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;#Region " XP Related InterOp "&lt;br /&gt;    &amp;lt;DllImport("uxtheme.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;    Private Shared Function IsAppThemed() As Boolean&lt;br /&gt;    End Function&lt;br /&gt;    &amp;lt;DllImport("user32.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;    Private Shared Function GetSysColor(ByVal index As Integer) As Integer&lt;br /&gt;    End Function&lt;br /&gt;    Private Const COLOR_MENUBAR As Integer = 30&lt;br /&gt;#End Region&lt;br /&gt;#Region " Custom Constructors "&lt;br /&gt;    Sub New(ByVal caption As String)&lt;br /&gt;        MyClass.New(caption, Nothing)&lt;br /&gt;    End Sub&lt;br /&gt;    Sub New(ByVal caption As String, ByVal [image] As Image)&lt;br /&gt;        MyBase.New()&lt;br /&gt;        m_Image = [image]&lt;br /&gt;        Me.Text = caption&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;#Region " Private Instance Variables "&lt;br /&gt;    Private m_Image As Image = Nothing&lt;br /&gt;    Private m_ItemColors As MenuItemColors = New MenuItemColors(Me)&lt;br /&gt;    Private m_Font As Font = SystemInformation.MenuFont&lt;br /&gt;    Private m_HiliteStyle As HiliteStyles = HiliteStyles.Flat&lt;br /&gt;    Private m_ImageIndex As Integer = -1&lt;br /&gt;    Private m_Imagelist As ImageList = Nothing&lt;br /&gt;    Private m_ShadowImage As Image&lt;br /&gt;    Private m_IsXPThemed As Boolean = IsXPThemed&lt;br /&gt;    '  ________________1______________&lt;br /&gt;    ' |    |  _________3_________     |&lt;br /&gt;    ' |  2 | |_________4_________|    |&lt;br /&gt;    ' |____|__________________________|&lt;br /&gt;    Private m_ItemRect As Rectangle     '1&lt;br /&gt;    Private m_ImageRect As Rectangle    '2&lt;br /&gt;    Private m_BackRect As Rectangle     '3&lt;br /&gt;    Private m_TextRect As Rectangle     '4&lt;br /&gt;#End Region&lt;br /&gt;#Region " Custom Enum "&lt;br /&gt;    Public Enum HiliteStyles&lt;br /&gt;        [Flat]&lt;br /&gt;        [Shadow]&lt;br /&gt;        [Box]&lt;br /&gt;    End Enum&lt;br /&gt;#End Region&lt;br /&gt;#Region " Properties "&lt;br /&gt;    'Image&lt;br /&gt;    &amp;lt;Category("Appearance"), DefaultValue(GetType(Image), Nothing)&amp;gt; _&lt;br /&gt;    Public Property Image() As Image&lt;br /&gt;        Get&lt;br /&gt;            If IsNothing(m_Imagelist) = False Then&lt;br /&gt;                If m_ImageIndex &amp;gt; -1 Then&lt;br /&gt;                    Return m_Imagelist.Images(m_ImageIndex)&lt;br /&gt;                End If&lt;br /&gt;            End If&lt;br /&gt;            Return m_Image&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal Value As Image)&lt;br /&gt;            m_Image = Value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;    'ImageList&lt;br /&gt;    &amp;lt;Category("Appearance"), DefaultValue(GetType(ImageList), Nothing)&amp;gt; _&lt;br /&gt;    Public Property ImageList() As ImageList&lt;br /&gt;        Get&lt;br /&gt;            Return m_Imagelist&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal Value As ImageList)&lt;br /&gt;            m_Imagelist = Value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;    'ImageIndex&lt;br /&gt;    &amp;lt;Category("Appearance"), DefaultValue(-1), _&lt;br /&gt;    TypeConverter(GetType(ImageIndexConverter)), _&lt;br /&gt;    Editor("System.Windows.Forms.Design.ImageIndexEditor, System.Design", GetType(System.Drawing.Design.UITypeEditor))&amp;gt; _&lt;br /&gt;    Public Property ImageIndex() As Integer&lt;br /&gt;        Get&lt;br /&gt;            If m_Imagelist Is Nothing Then&lt;br /&gt;                m_ImageIndex = -1&lt;br /&gt;            End If&lt;br /&gt;            Return m_ImageIndex&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal Value As Integer)&lt;br /&gt;            m_ImageIndex = Value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;    'ItemColors&lt;br /&gt;    &amp;lt;Category("Appearance"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)&amp;gt; _&lt;br /&gt;    Public Property ItemColors() As MenuItemColors&lt;br /&gt;        Get&lt;br /&gt;            Return m_ItemColors&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal Value As MenuItemColors)&lt;br /&gt;            m_ItemColors = Value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;    'Font&lt;br /&gt;    &amp;lt;Category("Appearance"), _&lt;br /&gt;    Description("The Font that displays in this MenuItem.")&amp;gt; _&lt;br /&gt;    Public Property Font() As Font&lt;br /&gt;        Get&lt;br /&gt;            Return m_Font&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal Value As Font)&lt;br /&gt;            If Not m_Font.Equals(Value) Then&lt;br /&gt;                If IsNothing(Value) Then&lt;br /&gt;                    ResetFont()&lt;br /&gt;                Else&lt;br /&gt;                    m_Font = Value&lt;br /&gt;                End If&lt;br /&gt;            End If&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;    Private Function ShouldSerializeFont() As Boolean&lt;br /&gt;        Return Not (m_Font.Equals(SystemInformation.MenuFont))&lt;br /&gt;    End Function&lt;br /&gt;    Private Sub ResetFont()&lt;br /&gt;        m_Font = SystemInformation.MenuFont&lt;br /&gt;    End Sub&lt;br /&gt;    'HiliteStyle&lt;br /&gt;    &amp;lt;Category("Behavior"), DefaultValue(GetType(HiliteStyles), "Flat")&amp;gt; _&lt;br /&gt;    Public Property HiliteStyle() As HiliteStyles&lt;br /&gt;        Get&lt;br /&gt;            Return m_HiliteStyle&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal Value As HiliteStyles)&lt;br /&gt;            m_HiliteStyle = Value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;    Private ReadOnly Property IsXPThemed() As Boolean&lt;br /&gt;        Get&lt;br /&gt;            If OSVersion.Version.Major &amp;gt;= 5 And OSVersion.Version.Minor &amp;gt;= 1 Then&lt;br /&gt;                Return IsAppThemed()&lt;br /&gt;            End If&lt;br /&gt;        End Get&lt;br /&gt;    End Property&lt;br /&gt;    Private ReadOnly Property RTLMenu() As Boolean&lt;br /&gt;        Get&lt;br /&gt;            If IsNothing(Me.GetContextMenu) Then&lt;br /&gt;                Return CBool(Me.GetMainMenu.RightToLeft)&lt;br /&gt;            Else&lt;br /&gt;                Return CBool(Me.GetContextMenu.RightToLeft)&lt;br /&gt;            End If&lt;br /&gt;        End Get&lt;br /&gt;    End Property&lt;br /&gt;#End Region&lt;br /&gt;#Region " Expandable Object Convertor "&lt;br /&gt;    'MenuItemColors&lt;br /&gt;    &amp;lt;TypeConverter(GetType(MenuItemColorsStringConverter))&amp;gt; _&lt;br /&gt;    Public Class MenuItemColors&lt;br /&gt;        Public Sub New(ByVal parent As MenuitemEx)&lt;br /&gt;            owner = Parent&lt;br /&gt;        End Sub&lt;br /&gt;        Private Owner As MenuitemEx = Nothing&lt;br /&gt;        Private m_StartColor As Color = Color.Ivory&lt;br /&gt;        Private m_EndColor As Color = Color.PowderBlue&lt;br /&gt;        Private m_ImageBarColor As Color = Color.PowderBlue&lt;br /&gt;        Private m_HiliteColor As Color = Color.Moccasin&lt;br /&gt;        Private m_HiliteBorderColor As Color = Color.Coral&lt;br /&gt;        Private m_ForeColor As Color = Color.OrangeRed&lt;br /&gt;        'GradientStartColor&lt;br /&gt;        &amp;lt;DefaultValue(GetType(Color), "Ivory")&amp;gt; _&lt;br /&gt;        Public Property GradientStartColor() As Color&lt;br /&gt;            Get&lt;br /&gt;                Return m_StartColor&lt;br /&gt;            End Get&lt;br /&gt;            Set(ByVal Value As Color)&lt;br /&gt;                m_StartColor = Value&lt;br /&gt;                updateProperties()&lt;br /&gt;            End Set&lt;br /&gt;        End Property&lt;br /&gt;        'GradientEndColor&lt;br /&gt;        &amp;lt;DefaultValue(GetType(Color), "PowderBlue")&amp;gt; _&lt;br /&gt;        Public Property GradientEndColor() As Color&lt;br /&gt;            Get&lt;br /&gt;                Return m_EndColor&lt;br /&gt;            End Get&lt;br /&gt;            Set(ByVal Value As Color)&lt;br /&gt;                m_EndColor = Value&lt;br /&gt;                updateProperties()&lt;br /&gt;            End Set&lt;br /&gt;        End Property&lt;br /&gt;        'ImageBarColor&lt;br /&gt;        &amp;lt;DefaultValue(GetType(Color), "PowderBlue")&amp;gt; _&lt;br /&gt;        Public Property ImageBarColor() As Color&lt;br /&gt;            Get&lt;br /&gt;                Return m_ImageBarColor&lt;br /&gt;            End Get&lt;br /&gt;            Set(ByVal Value As Color)&lt;br /&gt;                m_ImageBarColor = Value&lt;br /&gt;                updateProperties()&lt;br /&gt;            End Set&lt;br /&gt;        End Property&lt;br /&gt;        'HiliteColor&lt;br /&gt;        &amp;lt;DefaultValue(GetType(Color), "Moccasin")&amp;gt; _&lt;br /&gt;        Public Property HiliteColor() As Color&lt;br /&gt;            Get&lt;br /&gt;                Return m_HiliteColor&lt;br /&gt;            End Get&lt;br /&gt;            Set(ByVal Value As Color)&lt;br /&gt;                m_HiliteColor = Value&lt;br /&gt;                updateProperties()&lt;br /&gt;            End Set&lt;br /&gt;        End Property&lt;br /&gt;        'HiliteBorderColor&lt;br /&gt;        &amp;lt;DefaultValue(GetType(Color), "Coral")&amp;gt; _&lt;br /&gt;        Public Property HiliteBorderColor() As Color&lt;br /&gt;            Get&lt;br /&gt;                Return m_HiliteBorderColor&lt;br /&gt;            End Get&lt;br /&gt;            Set(ByVal Value As Color)&lt;br /&gt;                m_HiliteBorderColor = Value&lt;br /&gt;                updateProperties()&lt;br /&gt;            End Set&lt;br /&gt;        End Property&lt;br /&gt;        'ForeColor&lt;br /&gt;        &amp;lt;DefaultValue(GetType(Color), "OrangeRed")&amp;gt; _&lt;br /&gt;        Public Property ForeColor() As Color&lt;br /&gt;            Get&lt;br /&gt;                Return m_ForeColor&lt;br /&gt;            End Get&lt;br /&gt;            Set(ByVal Value As Color)&lt;br /&gt;                m_ForeColor = Value&lt;br /&gt;                updateProperties()&lt;br /&gt;            End Set&lt;br /&gt;        End Property&lt;br /&gt;        'This method is necessary for the property to be deserialized &lt;br /&gt;        'upon reset, and caused me the biggest headache.&lt;br /&gt;        Sub updateProperties()&lt;br /&gt;            If Owner Is Nothing Then Return&lt;br /&gt;            Dim ccs As IComponentChangeService = CType(Owner.GetService(GetType(IComponentChangeService)), IComponentChangeService)&lt;br /&gt;            If ccs Is Nothing Then Return&lt;br /&gt;            ccs.OnComponentChanged(Owner.ItemColors, Nothing, Nothing, Nothing)&lt;br /&gt;        End Sub&lt;br /&gt;    End Class&lt;br /&gt;    'MenuItemColorStringConvertor&lt;br /&gt;    Friend Class MenuItemColorsStringConverter&lt;br /&gt;        Inherits ExpandableObjectConverter&lt;br /&gt;        Public Overloads Overrides Function ConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destinationType As System.Type) As Object&lt;br /&gt;            If destinationType Is GetType(String) Then&lt;br /&gt;                Return "MenuItem Colors"&lt;br /&gt;            End If&lt;br /&gt;            Return MyBase.ConvertTo(context, culture, value, destinationType)&lt;br /&gt;        End Function&lt;br /&gt;        Public Overloads Overrides Function GetPropertiesSupported(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean&lt;br /&gt;            Return True&lt;br /&gt;        End Function&lt;br /&gt;        Public Overloads Overrides Function GetProperties(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal value As Object, ByVal attributes() As System.Attribute) As System.ComponentModel.PropertyDescriptorCollection&lt;br /&gt;            If context.PropertyDescriptor.PropertyType.Name.Equals("MenuItemColors") Then&lt;br /&gt;                Dim PropertyDescriptorCollection As System.ComponentModel.PropertyDescriptorCollection&lt;br /&gt;                Dim propNames(5) As String&lt;br /&gt;                PropertyDescriptorCollection = TypeDescriptor.GetProperties(GetType(MenuItemColors), attributes)&lt;br /&gt;                propNames(0) = "ImageBarColor"&lt;br /&gt;                propNames(1) = "GradientStartColor"&lt;br /&gt;                propNames(2) = "GradientEndColor"&lt;br /&gt;                propNames(3) = "HiliteColor"&lt;br /&gt;                propNames(4) = "HiliteBorderColor"&lt;br /&gt;                propNames(5) = "ForeColor"&lt;br /&gt;                Return PropertyDescriptorCollection.Sort(propNames)&lt;br /&gt;            End If&lt;br /&gt;            Return MyBase.GetProperties(context, value, attributes)&lt;br /&gt;        End Function&lt;br /&gt;    End Class&lt;br /&gt;#End Region&lt;br /&gt;    Protected Overrides Sub OnMeasureItem(ByVal e As System.Windows.Forms.MeasureItemEventArgs)&lt;br /&gt;        Dim ItemText As String = Text&lt;br /&gt;        If ShowShortcut AndAlso Shortcut &amp;lt;&amp;gt; Shortcut.None Then&lt;br /&gt;            Dim k As Keys = CType(Shortcut, Keys)&lt;br /&gt;            ItemText += "  " + TypeDescriptor.GetConverter(GetType(Keys)).ConvertToString(k)&lt;br /&gt;        End If&lt;br /&gt;        Dim sf As New StringFormat(StringFormatFlags.MeasureTrailingSpaces)&lt;br /&gt;        sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Hide&lt;br /&gt;        e.ItemWidth = CInt(e.Graphics.MeasureString(ItemText, m_Font, SizeF.Empty, sf).Width)&lt;br /&gt;        If Me.Text = "-" Then&lt;br /&gt;            e.ItemHeight = 3&lt;br /&gt;        ElseIf Not TypeOf Me.Parent Is MainMenu Then&lt;br /&gt;            e.ItemHeight = 22&lt;br /&gt;            e.ItemWidth += 44&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnDrawItem(ByVal e As System.Windows.Forms.DrawItemEventArgs)&lt;br /&gt;        m_ItemRect = e.Bounds&lt;br /&gt;        m_ImageRect = New Rectangle(e.Bounds.Location, New Size(24, e.Bounds.Height))&lt;br /&gt;        m_BackRect = New Rectangle(e.Bounds.Left + 24, e.Bounds.Top, e.Bounds.Width - 24, e.Bounds.Height)&lt;br /&gt;        m_TextRect = New Rectangle(e.Bounds.Left + 34, e.Bounds.Top, e.Bounds.Width - 52, e.Bounds.Height)&lt;br /&gt;        If RTLMenu Then&lt;br /&gt;            m_ImageRect.Offset(e.Bounds.Width - 24, 0)&lt;br /&gt;            m_BackRect.Offset(-24, 0)&lt;br /&gt;            m_TextRect.Offset(-14, 0)&lt;br /&gt;        End If&lt;br /&gt;        If Text = "-" Then&lt;br /&gt;            DrawSideBar(e.Graphics)&lt;br /&gt;            DrawBackground(e.Graphics)&lt;br /&gt;            DrawSeparator(e.Graphics)&lt;br /&gt;        ElseIf Not TypeOf Me.Parent Is MainMenu Then&lt;br /&gt;            DrawSideBar(e.Graphics)&lt;br /&gt;            DrawBackground(e.Graphics)&lt;br /&gt;            If CBool(e.State And DrawItemState.Selected) Then DrawHilite(e.Graphics)&lt;br /&gt;            DrawImage(e.Graphics, CBool(e.State And DrawItemState.Selected) And (m_HiliteStyle = HiliteStyles.Shadow))&lt;br /&gt;            DrawText(e.Graphics, Not CBool(e.State And DrawItemState.NoAccelerator))&lt;br /&gt;        Else&lt;br /&gt;            m_TextRect = e.Bounds&lt;br /&gt;            DrawMenuBar(e.Graphics)&lt;br /&gt;            If CBool(e.State And DrawItemState.Selected) OrElse _&lt;br /&gt;               CBool(e.State And DrawItemState.HotLight) Then&lt;br /&gt;                DrawHilite(e.Graphics)&lt;br /&gt;            End If&lt;br /&gt;            DrawText(e.Graphics, Not CBool(e.State And DrawItemState.NoAccelerator))&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;#Region " Custom Methods "&lt;br /&gt;    Sub DrawMenuBar(ByVal g As Graphics)&lt;br /&gt;        Dim FillBrush As New SolidBrush(SystemColors.Menu)&lt;br /&gt;        If m_IsXPThemed Then&lt;br /&gt;            FillBrush.Color = ColorTranslator.FromOle(GetSysColor(COLOR_MENUBAR))&lt;br /&gt;        End If&lt;br /&gt;        g.FillRectangle(FillBrush, m_ItemRect)&lt;br /&gt;        FillBrush.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub DrawSeparator(ByVal g As Graphics)&lt;br /&gt;        Dim DrawingPen As New Pen(m_ItemColors.ForeColor)&lt;br /&gt;        Dim startpoint As New Point(m_TextRect.Left, m_TextRect.Top + 1)&lt;br /&gt;        Dim endpoint As New Point(m_BackRect.Right - 1, m_BackRect.Top + 1)&lt;br /&gt;        If RTLMenu Then&lt;br /&gt;            startpoint.Offset(-20, 0)&lt;br /&gt;            endpoint.Offset(-10, 0)&lt;br /&gt;        End If&lt;br /&gt;        g.DrawLine(DrawingPen, startpoint, endpoint)&lt;br /&gt;        DrawingPen.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub DrawSideBar(ByVal g As Graphics)&lt;br /&gt;        Dim DrawingBrush As New SolidBrush(m_ItemColors.ImageBarColor)&lt;br /&gt;        g.FillRectangle(DrawingBrush, m_ImageRect)&lt;br /&gt;        DrawingBrush.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub DrawBackground(ByVal g As Graphics)&lt;br /&gt;        Dim FillBrush As Brush&lt;br /&gt;        If RTLMenu Then&lt;br /&gt;            FillBrush = New Drawing2D.LinearGradientBrush(m_BackRect, m_ItemColors.GradientEndColor, m_ItemColors.GradientStartColor, Drawing2D.LinearGradientMode.Horizontal)&lt;br /&gt;        Else&lt;br /&gt;            FillBrush = New Drawing2D.LinearGradientBrush(m_BackRect, m_ItemColors.GradientStartColor, m_ItemColors.GradientEndColor, Drawing2D.LinearGradientMode.Horizontal)&lt;br /&gt;        End If&lt;br /&gt;        g.FillRectangle(FillBrush, m_BackRect)&lt;br /&gt;        FillBrush.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub DrawHilite(ByVal g As Graphics)&lt;br /&gt;        Dim FillBrush As New SolidBrush(m_ItemColors.HiliteColor)&lt;br /&gt;        Dim HiliteRect As Rectangle = m_ItemRect&lt;br /&gt;        If m_HiliteStyle = HiliteStyles.Box AndAlso Not TypeOf Me.Parent Is MainMenu Then&lt;br /&gt;            HiliteRect.Width -= 24&lt;br /&gt;            If Not RTLMenu Then HiliteRect.Offset(24, 0)&lt;br /&gt;            BoxImage(g)&lt;br /&gt;        End If&lt;br /&gt;        g.FillRectangle(FillBrush, HiliteRect)&lt;br /&gt;        Dim BorderPen As New Pen(m_ItemColors.HiliteBorderColor)&lt;br /&gt;        HiliteRect.Width -= 1&lt;br /&gt;        HiliteRect.Height -= 1&lt;br /&gt;        g.DrawRectangle(BorderPen, HiliteRect)&lt;br /&gt;        FillBrush.Dispose()&lt;br /&gt;        BorderPen.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub BoxImage(ByVal g As Graphics)&lt;br /&gt;        If Image Is Nothing Then Return&lt;br /&gt;        Dim BorderPen As New Pen(ControlPaint.LightLight(m_ItemColors.ImageBarColor))&lt;br /&gt;        Dim BorderRect As Rectangle = m_ImageRect&lt;br /&gt;        BorderRect.Inflate(-1, -1)&lt;br /&gt;        g.DrawRectangle(BorderPen, BorderRect)&lt;br /&gt;        BorderPen.Color = ControlPaint.Dark(m_ItemColors.ImageBarColor)&lt;br /&gt;        g.DrawLine(BorderPen, BorderRect.Right - 1, BorderRect.Top, BorderRect.Right - 1, BorderRect.Bottom)&lt;br /&gt;        g.DrawLine(BorderPen, BorderRect.Left, BorderRect.Bottom, BorderRect.Right - 1, BorderRect.Bottom)&lt;br /&gt;        BorderPen.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub DrawText(ByVal g As Graphics, ByVal ShowHotKey As Boolean)&lt;br /&gt;        Dim TextBrush As New SolidBrush(m_ItemColors.ForeColor)&lt;br /&gt;        Dim sf As New StringFormat&lt;br /&gt;        sf.LineAlignment = StringAlignment.Center&lt;br /&gt;        sf.Alignment = StringAlignment.Near&lt;br /&gt;        If ShowHotKey Then&lt;br /&gt;            sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show&lt;br /&gt;        Else&lt;br /&gt;            sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Hide&lt;br /&gt;        End If        &lt;br /&gt;        Dim ShorCutText As String&lt;br /&gt;        If ShowShortcut AndAlso Shortcut &amp;lt;&amp;gt; Shortcut.None Then&lt;br /&gt;            Dim k As Keys = CType(Shortcut, Keys)&lt;br /&gt;            ShorCutText = TypeDescriptor.GetConverter(GetType(Keys)).ConvertToString(k)&lt;br /&gt;        End If&lt;br /&gt;        If RTLMenu Then&lt;br /&gt;            sf.FormatFlags = StringFormatFlags.DirectionRightToLeft&lt;br /&gt;        End If&lt;br /&gt;        If TypeOf Me.Parent Is MainMenu Then sf.Alignment = StringAlignment.Center&lt;br /&gt;        If Me.Enabled Then&lt;br /&gt;            g.DrawString(Text, m_Font, TextBrush, RectangleF.op_Implicit(m_TextRect), sf)&lt;br /&gt;            sf.Alignment = StringAlignment.Far&lt;br /&gt;            g.DrawString(ShorCutText, m_Font, TextBrush, RectangleF.op_Implicit(m_TextRect), sf)&lt;br /&gt;        Else&lt;br /&gt;            ControlPaint.DrawStringDisabled(g, Text, m_Font, m_ItemColors.GradientEndColor, RectangleF.op_Implicit(m_TextRect), sf)&lt;br /&gt;            sf.Alignment = StringAlignment.Far&lt;br /&gt;            ControlPaint.DrawStringDisabled(g, ShorCutText, m_Font, m_ItemColors.GradientEndColor, RectangleF.op_Implicit(m_TextRect), sf)&lt;br /&gt;        End If&lt;br /&gt;        TextBrush.Dispose()&lt;br /&gt;        sf.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub DrawImage(ByVal g As Graphics, ByVal Shadow As Boolean)&lt;br /&gt;        If Image Is Nothing Then Return&lt;br /&gt;        Dim Iconrect As Rectangle = m_ImageRect&lt;br /&gt;        Iconrect.Inflate(-4, -4)&lt;br /&gt;        If Shadow Then&lt;br /&gt;            If m_ShadowImage Is Nothing Then&lt;br /&gt;                m_ShadowImage = New Bitmap(CreateShadowImage(Image))&lt;br /&gt;            End If&lt;br /&gt;            Iconrect.Offset(1, 1)&lt;br /&gt;            g.DrawImage(m_ShadowImage, Iconrect)&lt;br /&gt;            Iconrect.Offset(-2, -2)&lt;br /&gt;        End If&lt;br /&gt;        g.DrawImage(Image, Iconrect)&lt;br /&gt;    End Sub&lt;br /&gt;    Function CreateShadowImage(ByVal bmp As Image) As Bitmap&lt;br /&gt;        Dim shadow As New Bitmap(bmp, 16, 16)&lt;br /&gt;        Dim ShadowColor As Color = ControlPaint.Dark(m_ItemColors.HiliteColor)&lt;br /&gt;        For x As Integer = 0 To 15&lt;br /&gt;            For y As Integer = 0 To 15&lt;br /&gt;                If shadow.GetPixel(x, y).A &amp;gt; 32 Then&lt;br /&gt;                    shadow.SetPixel(x, y, ShadowColor)&lt;br /&gt;                End If&lt;br /&gt;            Next&lt;br /&gt;        Next&lt;br /&gt;        Return shadow&lt;br /&gt;    End Function&lt;br /&gt;#End Region&lt;br /&gt;    'didn't have to do this in C#&lt;br /&gt;    Friend Shadows Function GetService(ByVal service As System.Type) As Object&lt;br /&gt;        Return MyBase.GetService(service)&lt;br /&gt;    End Function&lt;br /&gt;End Class&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Drawing.Drawing2D;&lt;br /&gt;using System.ComponentModel.Design;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;namespace Dotnetrix_Samples&lt;br /&gt;{&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Summary description for MenuItemEx.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    public class MenuItemEx : System.Windows.Forms.MenuItem&lt;br /&gt;    {&lt;br /&gt;        /// &amp;lt;summary&amp;gt; &lt;br /&gt;        /// Required designer variable.&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        private System.ComponentModel.Container components = null;&lt;br /&gt;        public MenuItemEx()&lt;br /&gt;        {&lt;br /&gt;            // This call is required by the Windows.Forms Form Designer.&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            // TODO: Add any initialization after the InitializeComponent call&lt;br /&gt;            m_ItemColors = new MenuItemColors(this);    &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &amp;lt;summary&amp;gt; &lt;br /&gt;        /// Clean up any resources being used.&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        protected override void Dispose( bool disposing )&lt;br /&gt;        {&lt;br /&gt;            if( disposing )&lt;br /&gt;            {&lt;br /&gt;                if(components != null)&lt;br /&gt;                {&lt;br /&gt;                    components.Dispose();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            base.Dispose( disposing );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region Component Designer generated code&lt;br /&gt;        /// &amp;lt;summary&amp;gt; &lt;br /&gt;        /// Required method for Designer support - do not modify &lt;br /&gt;        /// the contents of this method with the code editor.&lt;br /&gt;        /// &amp;lt;/summary&amp;gt;&lt;br /&gt;        private void InitializeComponent()&lt;br /&gt;        {&lt;br /&gt;            // &lt;br /&gt;            // MenuItemEx&lt;br /&gt;            // &lt;br /&gt;            this.OwnerDraw = true;&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;        #region XP Related InterOp&lt;br /&gt;        [DllImport("uxtheme.dll", CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;        private static extern bool IsAppThemed();&lt;br /&gt;        &lt;br /&gt;        [DllImport("user32.dll", CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;        private static extern int GetSysColor(int index);&lt;br /&gt;        private const int COLOR_MENUBAR = 30;&lt;br /&gt;        #endregion&lt;br /&gt;        #region Custom Constructors&lt;br /&gt;        public MenuItemEx(String caption) : this(caption,(Image)null)&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public MenuItemEx(String caption,Image image): base()&lt;br /&gt;        {&lt;br /&gt;            m_Image = image;&lt;br /&gt;            this.Text = caption;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        #endregion&lt;br /&gt;        &lt;br /&gt;        #region Private Instance Variables&lt;br /&gt;        private Image m_Image = null;&lt;br /&gt;        private MenuItemColors m_ItemColors;&lt;br /&gt;        private Font m_Font = SystemInformation.MenuFont;&lt;br /&gt;        private HiliteStyles m_HiliteStyle = HiliteStyles.Flat;&lt;br /&gt;        private int m_ImageIndex = -1;&lt;br /&gt;        private ImageList m_Imagelist = null;&lt;br /&gt;        private Image m_ShadowImage = null;&lt;br /&gt;        &lt;br /&gt;        private bool m_IsXPThemed = IsXPThemed;&lt;br /&gt;        //  ________________1______________&lt;br /&gt;        // |    |  _________3_________     |&lt;br /&gt;        // |  2 | |_________4_________|    |&lt;br /&gt;        // |____|__________________________|&lt;br /&gt;        private Rectangle m_ItemRect;   //1&lt;br /&gt;        private Rectangle m_ImageRect;  //2&lt;br /&gt;        private Rectangle m_BackRect;   //3&lt;br /&gt;        private Rectangle m_TextRect;   //4&lt;br /&gt;        #endregion&lt;br /&gt;        #region Custom Enum&lt;br /&gt;        public enum HiliteStyles&lt;br /&gt;        {&lt;br /&gt;            Flat,&lt;br /&gt;            Shadow,&lt;br /&gt;            Box&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;        #region Properties&lt;br /&gt;        //Image&lt;br /&gt;        [Category("Appearance"), DefaultValue(typeof(Image), null)]&lt;br /&gt;        public Image image&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                if (m_Imagelist != null)&lt;br /&gt;                {&lt;br /&gt;                    if (m_ImageIndex &amp;gt; -1)&lt;br /&gt;                        return m_Imagelist.Images[m_ImageIndex];&lt;br /&gt;                }&lt;br /&gt;                return m_Image;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                m_Image = value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //ImageList&lt;br /&gt;        [Category("Appearance"), DefaultValue(typeof(ImageList), null)]&lt;br /&gt;        public ImageList imageList&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                return m_Imagelist;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                m_Imagelist = value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //ImageIndex&lt;br /&gt;        [Category("Appearance"), DefaultValue(-1), TypeConverter(typeof(ImageIndexConverter)),&lt;br /&gt;        Editor("System.Windows.Forms.Design.ImageIndexEditor, System.Design", typeof(System.Drawing.Design.UITypeEditor))]&lt;br /&gt;        public int ImageIndex&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                if (m_Imagelist == null)&lt;br /&gt;                    m_ImageIndex = -1;&lt;br /&gt;                return m_ImageIndex;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                m_ImageIndex = value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //ItemColors&lt;br /&gt;        [Category("Appearance"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]&lt;br /&gt;        [RefreshProperties(RefreshProperties.All)]&lt;br /&gt;        public MenuItemColors ItemColors&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                return m_ItemColors;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                m_ItemColors = value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //Font&lt;br /&gt;        [Category("Appearance"),Description("The Font that displays in this MenuItem.")]&lt;br /&gt;        public Font font&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                return m_Font;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                if (!m_Font.Equals(value))&lt;br /&gt;                {&lt;br /&gt;                    if (value != null)&lt;br /&gt;                        ResetFont();&lt;br /&gt;                    else&lt;br /&gt;                        m_Font = value;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        private bool ShouldSerializeFont()&lt;br /&gt;        {&lt;br /&gt;            return !m_Font.Equals(SystemInformation.MenuFont);&lt;br /&gt;        }&lt;br /&gt;        private void ResetFont()&lt;br /&gt;        {&lt;br /&gt;            m_Font = SystemInformation.MenuFont;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //HiliteStyle&lt;br /&gt;        [Category("Behavior"), DefaultValue(typeof(HiliteStyles), "Flat")]&lt;br /&gt;        public HiliteStyles HiliteStyle &lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                return m_HiliteStyle;&lt;br /&gt;            }&lt;br /&gt;            set&lt;br /&gt;            {&lt;br /&gt;                m_HiliteStyle = value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static bool IsXPThemed&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                if (Environment.OSVersion.Version.Major &amp;gt;= 5 &amp;amp;&amp;amp; Environment.OSVersion.Version.Minor &amp;gt;= 1)&lt;br /&gt;                    return IsAppThemed();&lt;br /&gt;                return false;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private bool RTLMenu&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                if (GetContextMenu() == null)                    &lt;br /&gt;                    return (bool)(GetMainMenu().RightToLeft == RightToLeft.Yes);&lt;br /&gt;                else&lt;br /&gt;                    return (bool)(GetContextMenu().RightToLeft == RightToLeft.Yes);&lt;br /&gt;                &lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;        #region Expandable Object Convertor&lt;br /&gt;        //MenuItemColors&lt;br /&gt;        [TypeConverter(typeof(MenuItemColorsStringConverter))]&lt;br /&gt;            public class MenuItemColors&lt;br /&gt;        {&lt;br /&gt;            public MenuItemColors(MenuItemEx parent) : base()&lt;br /&gt;            {&lt;br /&gt;                owner = parent;&lt;br /&gt;            }&lt;br /&gt;            private MenuItemEx owner;&lt;br /&gt;            private Color m_StartColor = Color.Ivory;&lt;br /&gt;            private Color m_EndColor = Color.PowderBlue;&lt;br /&gt;            private Color m_ImageBarColor = Color.PowderBlue;&lt;br /&gt;            private Color m_HiliteColor = Color.Moccasin;&lt;br /&gt;            private Color m_HiliteBorderColor = Color.Coral;&lt;br /&gt;            private Color m_ForeColor = Color.OrangeRed;&lt;br /&gt;            //GradientStartColor&lt;br /&gt;            [DefaultValue(typeof(Color), "Ivory")]&lt;br /&gt;            public Color GradientStartColor&lt;br /&gt;            {&lt;br /&gt;                get&lt;br /&gt;                {&lt;br /&gt;                    return m_StartColor;&lt;br /&gt;                }&lt;br /&gt;                set&lt;br /&gt;                {&lt;br /&gt;                    m_StartColor = value;&lt;br /&gt;                    updateProperties();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;    &lt;br /&gt;            //GradientEndColor&lt;br /&gt;            [DefaultValue(typeof(Color), "PowderBlue")]&lt;br /&gt;            public Color GradientEndColor&lt;br /&gt;            {&lt;br /&gt;                get&lt;br /&gt;                {&lt;br /&gt;                    return m_EndColor;&lt;br /&gt;                }&lt;br /&gt;                set&lt;br /&gt;                {&lt;br /&gt;                    m_EndColor = value;&lt;br /&gt;                    updateProperties();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            //ImageBarColor&lt;br /&gt;            [DefaultValue(typeof(Color), "PowderBlue")]&lt;br /&gt;            public Color ImageBarColor&lt;br /&gt;            {&lt;br /&gt;                get&lt;br /&gt;                {&lt;br /&gt;                    return m_ImageBarColor;&lt;br /&gt;                }&lt;br /&gt;                set&lt;br /&gt;                {&lt;br /&gt;                    m_ImageBarColor = value;&lt;br /&gt;                    updateProperties();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            //HiliteColor&lt;br /&gt;            [DefaultValue(typeof(Color), "Moccasin")]&lt;br /&gt;            public Color HiliteColor&lt;br /&gt;            {&lt;br /&gt;                get&lt;br /&gt;                {&lt;br /&gt;                    return m_HiliteColor;&lt;br /&gt;                }&lt;br /&gt;                set&lt;br /&gt;                {&lt;br /&gt;                    m_HiliteColor = value;&lt;br /&gt;                    updateProperties();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            //HiliteBorderColor&lt;br /&gt;            [DefaultValue(typeof(Color), "Coral")]&lt;br /&gt;            public Color HiliteBorderColor&lt;br /&gt;            {&lt;br /&gt;                get&lt;br /&gt;                {&lt;br /&gt;                    return m_HiliteBorderColor;&lt;br /&gt;                }&lt;br /&gt;                set&lt;br /&gt;                {&lt;br /&gt;                    m_HiliteBorderColor = value;&lt;br /&gt;                    updateProperties();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            //ForeColor&lt;br /&gt;            [DefaultValue(typeof(Color), "OrangeRed")]&lt;br /&gt;            public Color ForeColor&lt;br /&gt;            {&lt;br /&gt;                get&lt;br /&gt;                {&lt;br /&gt;                    return m_ForeColor;&lt;br /&gt;                }&lt;br /&gt;                set&lt;br /&gt;                {&lt;br /&gt;                    m_ForeColor = value;&lt;br /&gt;                    updateProperties();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            //This method is necessary for the property to be deserialized &lt;br /&gt;            //upon reset, and caused me the biggest headache.&lt;br /&gt;            void updateProperties()&lt;br /&gt;            {&lt;br /&gt;                if (owner == null) return;&lt;br /&gt;                IComponentChangeService ccs = &lt;br /&gt;                    (IComponentChangeService)&lt;br /&gt;                    owner.GetService(typeof(IComponentChangeService));&lt;br /&gt;                if (ccs == null) return;&lt;br /&gt;                ccs.OnComponentChanged(owner.ItemColors, null, null, null);&lt;br /&gt;                &lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //MenuItemColorStringConvertor&lt;br /&gt;        internal class MenuItemColorsStringConverter : ExpandableObjectConverter&lt;br /&gt;        {&lt;br /&gt;            public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)&lt;br /&gt;            {&lt;br /&gt;                return false;&lt;br /&gt;            }&lt;br /&gt; &lt;br /&gt;            public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)&lt;br /&gt;            {&lt;br /&gt;                if (destinationType == typeof(string) &amp;amp;&amp;amp; value is MenuItemColors)&lt;br /&gt;                    return "MenuItem Colors";&lt;br /&gt;                return base.ConvertTo (context, culture, value, destinationType);&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;        &lt;br /&gt;            public override bool GetPropertiesSupported(ITypeDescriptorContext context)&lt;br /&gt;            {&lt;br /&gt;                return true;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) &lt;br /&gt;            {&lt;br /&gt;                if (context.PropertyDescriptor.PropertyType.Name.Equals("MenuItemColors"))&lt;br /&gt;                {&lt;br /&gt;                    System.ComponentModel.PropertyDescriptorCollection propertyDescriptorCollection; &lt;br /&gt;                    string[] propNames = new string[5]; &lt;br /&gt;                    propertyDescriptorCollection = TypeDescriptor.GetProperties(typeof(MenuItemColors),attributes); &lt;br /&gt;                    propNames[0] = @"ImageBarColor"; &lt;br /&gt;                    propNames[1] = @"GradientStartColor";&lt;br /&gt;                    propNames[2] = @"GradientEndColor";&lt;br /&gt;                    propNames[3] = @"HiliteColor";&lt;br /&gt;                    propNames[4] = @"HiliteBorderColor";&lt;br /&gt;                    //for some reason setting the last element stops the Property&lt;br /&gt;                    //expanding in C# but not in VB. Not that it matters since&lt;br /&gt;                    //it's the only property left and so will be auto sorted.&lt;br /&gt;                    //propNames[5] = @"ForeColor";&lt;br /&gt;                    return propertyDescriptorCollection.Sort(propNames); &lt;br /&gt;                }&lt;br /&gt;                return base.GetProperties(context, value, attributes);&lt;br /&gt;            } &lt;br /&gt; &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;        &lt;br /&gt;        protected override void OnMeasureItem(MeasureItemEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            String ItemText = Text;&lt;br /&gt;            if (ShowShortcut &amp;amp;&amp;amp; Shortcut != Shortcut.None)&lt;br /&gt;            {&lt;br /&gt;                Keys k = (Keys)Shortcut;&lt;br /&gt;                ItemText += "  " + TypeDescriptor.GetConverter(typeof(Keys)).ConvertToString(k);&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            StringFormat sf = new StringFormat(StringFormatFlags.MeasureTrailingSpaces);&lt;br /&gt;            sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Hide;&lt;br /&gt;            &lt;br /&gt;            e.ItemWidth = (int)e.Graphics.MeasureString(ItemText, m_Font, SizeF.Empty, sf).Width;&lt;br /&gt;            &lt;br /&gt;            if (Text == "-")&lt;br /&gt;                e.ItemHeight = 3;&lt;br /&gt;            else if (this.Parent is MainMenu == false)&lt;br /&gt;            {&lt;br /&gt;                e.ItemHeight = 22;&lt;br /&gt;                e.ItemWidth += 44;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected override void OnDrawItem(DrawItemEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            m_ItemRect = e.Bounds;&lt;br /&gt;            m_ImageRect = new Rectangle(e.Bounds.Location, new Size(24, e.Bounds.Height));&lt;br /&gt;            m_BackRect = new Rectangle(e.Bounds.Left + 24, e.Bounds.Top, e.Bounds.Width - 24, e.Bounds.Height);&lt;br /&gt;            m_TextRect = new Rectangle(e.Bounds.Left + 34, e.Bounds.Top, e.Bounds.Width - 52, e.Bounds.Height);&lt;br /&gt;            if (RTLMenu)&lt;br /&gt;            {&lt;br /&gt;                m_ImageRect.Offset(e.Bounds.Width - 24, 0);&lt;br /&gt;                m_BackRect.Offset(-24, 0);&lt;br /&gt;                m_TextRect.Offset(-14, 0);&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            if (Text == "-")&lt;br /&gt;            {&lt;br /&gt;                DrawSideBar(e.Graphics);&lt;br /&gt;                DrawBackground(e.Graphics);&lt;br /&gt;                DrawSeparator(e.Graphics);&lt;br /&gt;            }&lt;br /&gt;            else if(Parent is MainMenu == false)&lt;br /&gt;            {&lt;br /&gt;                DrawSideBar(e.Graphics);&lt;br /&gt;                DrawBackground(e.Graphics);&lt;br /&gt;                if (System.Convert.ToBoolean(e.State &amp;amp; DrawItemState.Selected)) &lt;br /&gt;                    DrawHilite(e.Graphics);&lt;br /&gt;                DrawImage(e.Graphics, ((System.Convert.ToBoolean(e.State &amp;amp; DrawItemState.Selected) &amp;amp;&amp;amp; (m_HiliteStyle == HiliteStyles.Shadow))));&lt;br /&gt;                DrawText(e.Graphics, !System.Convert.ToBoolean(e.State &amp;amp; DrawItemState.NoAccelerator));&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                m_TextRect = e.Bounds;&lt;br /&gt;                DrawMenuBar(e.Graphics);&lt;br /&gt;                if (System.Convert.ToBoolean(e.State &amp;amp; DrawItemState.Selected) || System.Convert.ToBoolean(e.State &amp;amp; DrawItemState.HotLight)) &lt;br /&gt;                    DrawHilite(e.Graphics);&lt;br /&gt;                DrawText(e.Graphics, !System.Convert.ToBoolean(e.State &amp;amp; DrawItemState.NoAccelerator));&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region Custom Methods&lt;br /&gt;        void DrawMenuBar(Graphics g)&lt;br /&gt;        {&lt;br /&gt;            SolidBrush FillBrush = new SolidBrush(SystemColors.Menu);&lt;br /&gt;            if (m_IsXPThemed)&lt;br /&gt;                FillBrush.Color = ColorTranslator.FromOle(GetSysColor(COLOR_MENUBAR));&lt;br /&gt;            g.FillRectangle(FillBrush, m_ItemRect);&lt;br /&gt;            FillBrush.Dispose();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        void DrawSeparator(Graphics g)&lt;br /&gt;        {&lt;br /&gt;            Pen DrawingPen = new Pen(m_ItemColors.ForeColor);&lt;br /&gt;            Point startpoint = new Point(m_TextRect.Left, m_TextRect.Top + 1);&lt;br /&gt;            Point endpoint = new Point(m_BackRect.Right - 1, m_BackRect.Top + 1);&lt;br /&gt;            if (RTLMenu)&lt;br /&gt;            {&lt;br /&gt;                startpoint.Offset(-20, 0);&lt;br /&gt;                endpoint.Offset(-10, 0);&lt;br /&gt;            }&lt;br /&gt;            g.DrawLine(DrawingPen, startpoint, endpoint);&lt;br /&gt;            DrawingPen.Dispose();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        void DrawSideBar(Graphics g)&lt;br /&gt;        {&lt;br /&gt;            SolidBrush DrawingBrush = new SolidBrush(m_ItemColors.ImageBarColor);&lt;br /&gt;            g.FillRectangle(DrawingBrush, m_ImageRect);&lt;br /&gt;            DrawingBrush.Dispose();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        void DrawBackground(Graphics g)&lt;br /&gt;        {&lt;br /&gt;            Brush FillBrush;&lt;br /&gt;            if (RTLMenu)&lt;br /&gt;                FillBrush = new LinearGradientBrush(m_BackRect, m_ItemColors.GradientEndColor, m_ItemColors.GradientStartColor, LinearGradientMode.Horizontal);&lt;br /&gt;            else&lt;br /&gt;                FillBrush = new LinearGradientBrush(m_BackRect, m_ItemColors.GradientStartColor, m_ItemColors.GradientEndColor, LinearGradientMode.Horizontal);&lt;br /&gt;            g.FillRectangle(FillBrush, m_BackRect);&lt;br /&gt;            FillBrush.Dispose();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        void DrawHilite(Graphics g)&lt;br /&gt;        {&lt;br /&gt;            SolidBrush FillBrush = new SolidBrush(m_ItemColors.HiliteColor);&lt;br /&gt;            Rectangle HiliteRect = m_ItemRect;&lt;br /&gt;            if (m_HiliteStyle == HiliteStyles.Box &amp;amp;&amp;amp; Parent is MainMenu == false)&lt;br /&gt;            {&lt;br /&gt;                HiliteRect.Width -= 24;&lt;br /&gt;                if (!RTLMenu)&lt;br /&gt;                    HiliteRect.Offset(24, 0);&lt;br /&gt;                BoxImage(g);&lt;br /&gt;            }&lt;br /&gt;            g.FillRectangle(FillBrush, HiliteRect);&lt;br /&gt;            Pen BorderPen = new Pen(m_ItemColors.HiliteBorderColor);&lt;br /&gt;            HiliteRect.Width -= 1;&lt;br /&gt;            HiliteRect.Height -= 1;&lt;br /&gt;            g.DrawRectangle(BorderPen, HiliteRect);&lt;br /&gt;            FillBrush.Dispose();&lt;br /&gt;            BorderPen.Dispose();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        void BoxImage(Graphics g)&lt;br /&gt;        {&lt;br /&gt;            if (image == null) return;&lt;br /&gt;            Pen BorderPen = new Pen(ControlPaint.LightLight(m_ItemColors.ImageBarColor));&lt;br /&gt;            Rectangle BorderRect = m_ImageRect;&lt;br /&gt;            BorderRect.Inflate(-1, -1);&lt;br /&gt;            g.DrawRectangle(BorderPen, BorderRect);&lt;br /&gt;            BorderPen.Color = ControlPaint.Dark(m_ItemColors.ImageBarColor);&lt;br /&gt;            g.DrawLine(BorderPen, BorderRect.Right - 1, BorderRect.Top, BorderRect.Right - 1, BorderRect.Bottom);&lt;br /&gt;            g.DrawLine(BorderPen, BorderRect.Left, BorderRect.Bottom, BorderRect.Right - 1, BorderRect.Bottom);&lt;br /&gt;            BorderPen.Dispose();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;            void DrawText(Graphics g, bool ShowHotKey)&lt;br /&gt;            {&lt;br /&gt;                SolidBrush TextBrush = new SolidBrush(m_ItemColors.ForeColor);&lt;br /&gt;                StringFormat sf = new StringFormat();&lt;br /&gt;                sf.LineAlignment = StringAlignment.Center;&lt;br /&gt;                sf.Alignment = StringAlignment.Near;&lt;br /&gt;                if (ShowHotKey)&lt;br /&gt;                    sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show;&lt;br /&gt;                else&lt;br /&gt;                    sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Hide;&lt;br /&gt;            &lt;br /&gt;                String ShorCutText = "";&lt;br /&gt;            &lt;br /&gt;                if (ShowShortcut &amp;amp;&amp;amp; Shortcut != Shortcut.None)&lt;br /&gt;                {&lt;br /&gt;                    Keys k = (Keys)Shortcut;&lt;br /&gt;                    ShorCutText = TypeDescriptor.GetConverter(typeof(Keys)).ConvertToString(k);&lt;br /&gt;                }&lt;br /&gt;            &lt;br /&gt;                if (RTLMenu)&lt;br /&gt;                    sf.FormatFlags = StringFormatFlags.DirectionRightToLeft;&lt;br /&gt;            &lt;br /&gt;                if (Parent is MainMenu)&lt;br /&gt;                    sf.Alignment = StringAlignment.Center;&lt;br /&gt;            &lt;br /&gt;                if (Enabled)&lt;br /&gt;                {&lt;br /&gt;                    g.DrawString(Text, m_Font, TextBrush, RectangleF.op_Implicit(m_TextRect), sf);&lt;br /&gt;                    sf.Alignment = StringAlignment.Far;&lt;br /&gt;                    g.DrawString(ShorCutText, m_Font, TextBrush, RectangleF.op_Implicit(m_TextRect), sf);&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    ControlPaint.DrawStringDisabled(g, Text, m_Font, m_ItemColors.GradientEndColor, RectangleF.op_Implicit(m_TextRect), sf);&lt;br /&gt;                    sf.Alignment = StringAlignment.Far;&lt;br /&gt;                    ControlPaint.DrawStringDisabled(g, ShorCutText, m_Font, m_ItemColors.GradientEndColor, RectangleF.op_Implicit(m_TextRect), sf);&lt;br /&gt;                }&lt;br /&gt;            &lt;br /&gt;                TextBrush.Dispose();&lt;br /&gt;                sf.Dispose();&lt;br /&gt;            &lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        void DrawImage(Graphics g, bool Shadow)&lt;br /&gt;        {&lt;br /&gt;            if (image == null) return;&lt;br /&gt;            Rectangle Iconrect = m_ImageRect;&lt;br /&gt;            Iconrect.Inflate(-4, -4);&lt;br /&gt;            &lt;br /&gt;            if (Shadow)&lt;br /&gt;            {&lt;br /&gt;                if (m_ShadowImage == null)&lt;br /&gt;                    m_ShadowImage = new Bitmap(CreateShadowImage(image));&lt;br /&gt;                Iconrect.Offset(1, 1);&lt;br /&gt;                g.DrawImage(m_ShadowImage, Iconrect);&lt;br /&gt;                Iconrect.Offset(-2, -2);&lt;br /&gt;            }&lt;br /&gt;            g.DrawImage(image, Iconrect);&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        Bitmap CreateShadowImage(Image bmp)&lt;br /&gt;        {&lt;br /&gt;            Bitmap shadow = new Bitmap(bmp, 16, 16);&lt;br /&gt;            Color ShadowColor = ControlPaint.Dark(m_ItemColors.HiliteColor);&lt;br /&gt;            &lt;br /&gt;            for (int x = 0; x&amp;lt;=15; x++)&lt;br /&gt;            {&lt;br /&gt;                for (int y = 0;  y&amp;lt;=15; y++)&lt;br /&gt;                {&lt;br /&gt;                    if (shadow.GetPixel(x, y).A &amp;gt; 32)&lt;br /&gt;                        shadow.SetPixel(x, y, ShadowColor);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            return shadow;&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;                    &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;by: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Dohertys'&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-1445555717993805236?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/1445555717993805236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/create-menu-bar-like-office-style-menu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1445555717993805236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1445555717993805236'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/create-menu-bar-like-office-style-menu.html' title='Create Menu Bar Like Office style Menu'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-b_0O9i0_g6E/TimyIOgJMtI/AAAAAAAAAQ0/o2Q7pO8-5sI/s72-c/Create+Menu+Bar+Like+Office+style+Menu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-9068639995368854653</id><published>2011-07-22T10:21:00.000-07:00</published><updated>2011-07-22T10:21:31.695-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Menu Strip'/><title type='text'>Add Menu Items on Top Left Window Icon (AKA System Menu)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CBYNiPaKxxs/TimwhI5gCHI/AAAAAAAAAQw/ebQ9ztHwgho/s1600/Adding+Menu+Items+on+Top+Left+Window+Icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Add Menu Items on Top Left Window Icon" border="0" src="http://2.bp.blogspot.com/-CBYNiPaKxxs/TimwhI5gCHI/AAAAAAAAAQw/ebQ9ztHwgho/s1600/Adding+Menu+Items+on+Top+Left+Window+Icon.png" /&gt;&lt;/a&gt;&lt;/div&gt;There is no DotNet Native way to manipulate the Window Menu. You must do it all via InterOp.&lt;br /&gt;You can add existing Menuitems though.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;The instructions shown here detail the steps necessary to achieve the menu as shown above.&lt;br /&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;'Create a New Windows Form Project.&lt;br /&gt;'Add the following line of code before Public Class Form1:&lt;br /&gt;'  Imports System.Runtime.InteropServices&lt;br /&gt;'Add a ContextMenu to the Form and name it PopUpMenu.&lt;br /&gt;'Add a MenuItem to PopUpMenu and call it sysPopUp.&lt;br /&gt;'Add a MainMenu to the form and add a MenuItem to that which you should name MenuHelpAbout.&lt;br /&gt;'Finally, Add the following code to the Form.&lt;br /&gt;&lt;br /&gt;&amp;lt;DllImport("user32.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;Private Shared Function GetSystemMenu(ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&amp;lt;DllImport("user32.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;Private Shared Function AppendMenu(ByVal hMenu As IntPtr, ByVal uFlags As Int32, ByVal uIDNewItem As IntPtr, ByVal lpNewItem As String) As Boolean&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&amp;lt;DllImport("user32", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;Private Shared Function InsertMenu(ByVal hMenu As IntPtr, ByVal uPosition As Integer, ByVal uFlags As Integer, ByVal uIDNewItem As IntPtr, ByVal lpNewItem As String) As Boolean&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&amp;lt;DllImport("user32", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;Private Shared Function SetMenuItemBitmaps(ByVal hMenu As IntPtr, ByVal uPosition As Integer, ByVal uFlags As Integer, ByVal hBitmapUnchecked As IntPtr, ByVal hBitmapChecked As IntPtr) As Boolean&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Private Const MF_STRING As Integer = &amp;amp;H0&lt;br /&gt;Private Const MF_SEPARATOR As Integer = &amp;amp;H800&amp;amp;&lt;br /&gt;Private Const MF_BYCOMMAND As Integer = &amp;amp;H0&lt;br /&gt;Private Const MF_BYPOSITION As Integer = &amp;amp;H400&lt;br /&gt;Private Const MF_POPUP As Integer = &amp;amp;H10&lt;br /&gt;&lt;br /&gt;Private Const WM_SYSCOMMAND As Integer = &amp;amp;H112&lt;br /&gt;&lt;br /&gt;Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;br /&gt;    AddSysMenuItems()&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub AddSysMenuItems()&lt;br /&gt;&lt;br /&gt;    'Create a glyph for About MenuItem&lt;br /&gt;    Dim bmpGlyph As New Bitmap(16, 16)&lt;br /&gt;    Dim g As Graphics = Graphics.FromImage(bmpGlyph)&lt;br /&gt;    g.Clear(Color.White)&lt;br /&gt;    Dim sf As New StringFormat&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center&lt;br /&gt;    sf.Alignment = StringAlignment.Center&lt;br /&gt;    g.DrawString("?", New Font(FontFamily.GenericMonospace, 16, FontStyle.Bold, GraphicsUnit.Pixel), SystemBrushes.WindowText, New RectangleF(0, 0, 16, 16), sf)&lt;br /&gt;    g.Dispose()&lt;br /&gt;&lt;br /&gt;    'Get a gdi bitmap object from our bitmap.&lt;br /&gt;    Dim hbmp As IntPtr = bmpGlyph.GetHbitmap&lt;br /&gt;    bmpGlyph.Dispose()&lt;br /&gt;&lt;br /&gt;    'Get the System Menus Handle.&lt;br /&gt;    Dim hSysMenu As IntPtr = GetSystemMenu(Me.Handle, False)&lt;br /&gt;&lt;br /&gt;    'Add a standard Separator Item.&lt;br /&gt;    AppendMenu(hSysMenu, MF_SEPARATOR, IntPtr.Zero, Nothing)&lt;br /&gt;    'Add an About Menu Item.&lt;br /&gt;    AppendMenu(hSysMenu, MF_STRING, MenuHelpAbout.Handle, MenuHelpAbout.Text)&lt;br /&gt;    'Add our Glyph to the About MenuItem.&lt;br /&gt;    SetMenuItemBitmaps(hSysMenu, MenuHelpAbout.Handle.ToInt32, MF_BYCOMMAND, hbmp, hbmp)&lt;br /&gt;    'Finally we'll insert an existing Popup Menu at position 0&lt;br /&gt;    InsertMenu(hSysMenu, 0, MF_BYPOSITION Or MF_POPUP, PopupMenu.Handle, "Popup Item")&lt;br /&gt;    'and a separator at position 1.&lt;br /&gt;    InsertMenu(hSysMenu, 1, MF_BYPOSITION Or MF_SEPARATOR, IntPtr.Zero, Nothing)&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub MenuHelpAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuHelpAbout.Click&lt;br /&gt;    Dim id As String&lt;br /&gt;    If TypeOf sender Is Menu Then&lt;br /&gt;        id = "Forms"&lt;br /&gt;    Else&lt;br /&gt;        id = "Window Menus"&lt;br /&gt;    End If&lt;br /&gt;    MessageBox.Show(String.Format("This message was initiated from the {0} About Menu", id))&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub sysPopUp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sysPopUp.Click&lt;br /&gt;    MessageBox.Show(DirectCast(sender, MenuItem).Text)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;br /&gt;    'MenuItems added directly to the System menu do not fire the &lt;br /&gt;    'Menuitems default event, so we need to call this ourselves.&lt;br /&gt;    'Popupmenus will fire their default events though as can be&lt;br /&gt;    'seen by the fact that we do not call sysPopUp_Click() here.&lt;br /&gt;    MyBase.WndProc(m)&lt;br /&gt;    If m.Msg = WM_SYSCOMMAND Then&lt;br /&gt;        If m.WParam.Equals(MenuHelpAbout.Handle) Then&lt;br /&gt;            MenuHelpAbout_Click(Me, EventArgs.Empty)&lt;br /&gt;        End If&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;                    &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;//Create a New Windows Form Project.&lt;br /&gt;//Add the following line of code before public class form1:&lt;br /&gt;//  using System.Runtime.InteropServices;&lt;br /&gt;//Add a ContextMenu to the Form and name it PopUpMenu.&lt;br /&gt;//Add a MenuItem to PopUpMenu and call it sysPopUp.&lt;br /&gt;//Add a MainMenu to the form and add a MenuItem to that which you should name MenuHelpAbout.&lt;br /&gt;//Finally, Add the following code to the Form.&lt;br /&gt;[DllImport(&amp;quot;user32.dll&amp;quot;, CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;private static extern IntPtr GetSystemMenu(IntPtr hWnd , bool bRevert);&lt;br /&gt;    &lt;br /&gt;[DllImport(&amp;quot;user32.dll&amp;quot;, CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;private static extern bool AppendMenu(IntPtr hMenu, Int32 uFlags, IntPtr uIDNewItem, String lpNewItem );&lt;br /&gt;    &lt;br /&gt;[DllImport(&amp;quot;user32&amp;quot;, CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;private static extern bool InsertMenu(IntPtr hMenu, int uPosition, int uFlags, IntPtr uIDNewItem, String lpNewItem);&lt;br /&gt;[DllImport(&amp;quot;user32&amp;quot;, CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;private static extern bool SetMenuItemBitmaps(IntPtr hMenu, int uPosition, int uFlags, IntPtr hBitmapUnchecked, IntPtr hBitmapChecked);&lt;br /&gt;private const int MF_STRING  = 0;&lt;br /&gt;private const int MF_SEPARATOR = 0x800;&lt;br /&gt;private const int MF_BYCOMMAND = 0;&lt;br /&gt;private const int MF_BYPOSITION = 0x400;&lt;br /&gt;private const int MF_POPUP = 0x10;&lt;br /&gt;private System.Windows.Forms.ContextMenu PopUpMenu;&lt;br /&gt;private System.Windows.Forms.MenuItem menuItem1;&lt;br /&gt;private System.Windows.Forms.MenuItem menuItem2;&lt;br /&gt;private System.Windows.Forms.MainMenu mainMenu1;&lt;br /&gt;private System.Windows.Forms.MenuItem menuItem3;&lt;br /&gt;private System.Windows.Forms.MenuItem MenuHelpAbout;&lt;br /&gt;private const int WM_SYSCOMMAND = 0x112;&lt;br /&gt;private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    AddSysMenuItems();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void AddSysMenuItems()&lt;br /&gt;{&lt;br /&gt;    //Create a glyph for About MenuItem&lt;br /&gt;    Bitmap bmpGlyph = new Bitmap(16, 16);&lt;br /&gt;    Graphics g = Graphics.FromImage(bmpGlyph);&lt;br /&gt;    g.Clear(Color.White);&lt;br /&gt;    StringFormat sf = new StringFormat();&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center;&lt;br /&gt;    sf.Alignment = StringAlignment.Center;&lt;br /&gt;    g.DrawString(&amp;quot;?&amp;quot;, new Font(FontFamily.GenericMonospace, 16, FontStyle.Bold, GraphicsUnit.Pixel), SystemBrushes.WindowText, new RectangleF(0, 0, 16, 16), sf);&lt;br /&gt;    g.Dispose();&lt;br /&gt;      &lt;br /&gt;    //Get a gdi bitmap object from our bitmap.&lt;br /&gt;    IntPtr hbmp = bmpGlyph.GetHbitmap();&lt;br /&gt;    bmpGlyph.Dispose();&lt;br /&gt;        &lt;br /&gt;    //Get the System Menus Handle.&lt;br /&gt;    IntPtr hSysMenu = GetSystemMenu(Handle, false);&lt;br /&gt;       &lt;br /&gt;    //Add a standard Separator Item.&lt;br /&gt;    AppendMenu(hSysMenu, MF_SEPARATOR, IntPtr.Zero, null);&lt;br /&gt;    //Add an About Menu Item.&lt;br /&gt;    AppendMenu(hSysMenu, MF_STRING, MenuHelpAbout.Handle, MenuHelpAbout.Text);&lt;br /&gt;    //Add our Glyph to the About MenuItem.&lt;br /&gt;    SetMenuItemBitmaps(hSysMenu, MenuHelpAbout.Handle.ToInt32(), MF_BYCOMMAND, hbmp, hbmp);&lt;br /&gt;    //Finally we'll insert an existing Popup Menu at position 0&lt;br /&gt;    InsertMenu(hSysMenu, 0, MF_BYPOSITION | MF_POPUP, PopUpMenu.Handle, &amp;quot;Popup Item&amp;quot;);&lt;br /&gt;    //and a separator at position 1.&lt;br /&gt;    InsertMenu(hSysMenu, 1, MF_BYPOSITION | MF_SEPARATOR, IntPtr.Zero, null);&lt;br /&gt;      &lt;br /&gt;}&lt;br /&gt;    &lt;br /&gt;#endregion&lt;br /&gt;private void MenuHelpAbout_Click(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    String id;&lt;br /&gt;    if (sender is Menu)&lt;br /&gt;        id = &amp;quot;Forms&amp;quot;;&lt;br /&gt;    else&lt;br /&gt;        id = &amp;quot;Window Menus&amp;quot;;&lt;br /&gt;       &lt;br /&gt;    MessageBox.Show(String.Format(&amp;quot;This message was initiated from the {0} About Menu&amp;quot;, id));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void sysPopUp_Click(object sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;    MessageBox.Show(((MenuItem)sender).Text);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected override void WndProc(ref Message m)&lt;br /&gt;{&lt;br /&gt;    //MenuItems added directly to the System menu do not fire the&lt;br /&gt;    //Menuitems default event, so we need to call this ourselves.&lt;br /&gt;    //Popupmenus will fire their default events though as can be&lt;br /&gt;    //seen by the fact that we do not call sysPopUp_Click() here.&lt;br /&gt;    base.WndProc (ref m);&lt;br /&gt;    if (m.Msg == WM_SYSCOMMAND)&lt;br /&gt;        if (m.WParam.Equals(MenuHelpAbout.Handle))&lt;br /&gt;            MenuHelpAbout_Click(this, EventArgs.Empty);&lt;br /&gt;}&lt;br /&gt;                    &lt;/pre&gt;&lt;/div&gt;by: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Dohertys'&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-9068639995368854653?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/9068639995368854653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/add-menu-items-on-top-left-window-icon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/9068639995368854653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/9068639995368854653'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/add-menu-items-on-top-left-window-icon.html' title='Add Menu Items on Top Left Window Icon (AKA System Menu)'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CBYNiPaKxxs/TimwhI5gCHI/AAAAAAAAAQw/ebQ9ztHwgho/s72-c/Adding+Menu+Items+on+Top+Left+Window+Icon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-6661137944890948078</id><published>2011-07-22T07:59:00.000-07:00</published><updated>2011-07-22T10:07:37.355-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='TabControl'/><title type='text'>TabDragging Example using TabDragger Class</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Add the following classes to your project and make one of the following calls to your forms constructor after the InitializeComponent() call (assumes your TabControl is named TabControl1):&lt;br /&gt;This will give you simple DragArrange of the tabs.&lt;br /&gt;[VB]    Dim DragTabs As new TabDragger(TabControl1)&lt;br /&gt;[C#]    TabDragger DragTabs = New TabDragger(this.tabControl1);&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;...and this will give you the ability to drag tabs out of the tabcontrol.&lt;br /&gt;[VB]    Dim DragTabs As New TabDragger(TabControl1, TabDragBehavior.TabDragout)&lt;br /&gt;[C#]    TabDragger DragTabs = new TabDragger(this.tabControl1, TabDragBehavior.TabDragOut);&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;VB net Class:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Friend Class TabDragger&lt;br /&gt;&lt;br /&gt;    Public Sub New(ByVal tabControl As TabControl)&lt;br /&gt;        MyBase.New()&lt;br /&gt;        Me.tabControl = tabControl&lt;br /&gt;        AddHandler tabControl.MouseDown, AddressOf tabControl_MouseDown&lt;br /&gt;        AddHandler tabControl.MouseMove, AddressOf tabControl_MouseMove&lt;br /&gt;        AddHandler tabControl.DoubleClick, AddressOf tabControl_DoubleClick&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Public Sub New(ByVal tabControl As TabControl, ByVal behavior As TabDragBehavior)&lt;br /&gt;        Me.New(tabControl)&lt;br /&gt;        Me._dragBehavior = behavior&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private tabControl As TabControl&lt;br /&gt;    Private dragTab As TabPage = Nothing&lt;br /&gt;    Private _dragBehavior As TabDragBehavior = TabDragBehavior.TabDragArrange&lt;br /&gt;&lt;br /&gt;    Private ReadOnly Property DragBehavior() As TabDragBehavior&lt;br /&gt;        Get&lt;br /&gt;            If (Not tabControl.Multiline) Then&lt;br /&gt;                Return _dragBehavior&lt;br /&gt;            End If&lt;br /&gt;            Return TabDragBehavior.None&lt;br /&gt;        End Get&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;    Private Sub tabControl_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)&lt;br /&gt;        dragTab = TabUnderMouse()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub tabControl_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)&lt;br /&gt;&lt;br /&gt;        If (_dragBehavior = TabDragBehavior.None) Then&lt;br /&gt;            Return&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;        If (e.Button = MouseButtons.Left) Then&lt;br /&gt;            If (dragTab IsNot Nothing) Then&lt;br /&gt;                If (tabControl.TabPages.Contains(dragTab)) Then&lt;br /&gt;                    If (PointInTabStrip(e.Location)) Then&lt;br /&gt;                        Dim hotTab As TabPage = TabUnderMouse()&lt;br /&gt;                        If (hotTab IsNot dragTab AndAlso hotTab IsNot Nothing) Then&lt;br /&gt;                            Dim id1 As Int32 = tabControl.TabPages.IndexOf(dragTab)&lt;br /&gt;                            Dim id2 As Int32 = tabControl.TabPages.IndexOf(hotTab)&lt;br /&gt;                            If (id1 &amp;gt; id2) Then&lt;br /&gt;                                For id As Int32 = id2 To id1&lt;br /&gt;                                    SwapTabPages(id1, id)&lt;br /&gt;                                Next&lt;br /&gt;                            Else&lt;br /&gt;                                For id As Int32 = id2 To id1 Step -1&lt;br /&gt;                                    SwapTabPages(id1, id)&lt;br /&gt;                                Next&lt;br /&gt;                            End If&lt;br /&gt;                            tabControl.SelectedTab = dragTab&lt;br /&gt;                        End If&lt;br /&gt;                    Else&lt;br /&gt;                        If (Me._dragBehavior = TabDragBehavior.TabDragOut) Then&lt;br /&gt;                            If (dragTab.Tag IsNot Nothing) Then&lt;br /&gt;&lt;br /&gt;                                DirectCast(dragTab.Tag, TabForm).Dispose()&lt;br /&gt;                                dragTab.Tag = Nothing&lt;br /&gt;                            Else&lt;br /&gt;                                Dim frm As New TabForm(dragTab)&lt;br /&gt;                            End If&lt;br /&gt;                        End If&lt;br /&gt;                    End If&lt;br /&gt;                End If&lt;br /&gt;            End If&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub tabControl_DoubleClick(ByVal sender As Object, ByVal e As EventArgs)&lt;br /&gt;        If (Me._dragBehavior = TabDragBehavior.TabDragOut) Then&lt;br /&gt;            Dim frm As New TabForm(dragTab)&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;#Region " Private Methods "&lt;br /&gt;&lt;br /&gt;    Private Function TabUnderMouse() As TabPage&lt;br /&gt;        Dim HTI As NativeMethods.TCHITTESTINFO = New NativeMethods.TCHITTESTINFO(tabControl.PointToClient(Cursor.Position))&lt;br /&gt;        Dim tabID As Int32 = NativeMethods.SendMessage(tabControl.Handle, NativeMethods.TCM_HITTEST, IntPtr.Zero, HTI)&lt;br /&gt;        Return If(tabID = -1, Nothing, tabControl.TabPages(tabID))&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Private Function PointInTabStrip(ByVal point As Point) As Boolean&lt;br /&gt;        Dim tabBounds As Rectangle = Rectangle.Empty&lt;br /&gt;        Dim displayRC As Rectangle = tabControl.DisplayRectangle&lt;br /&gt;&lt;br /&gt;        Select Case tabControl.Alignment&lt;br /&gt;            Case TabAlignment.Bottom&lt;br /&gt;                tabBounds.Location = New Point(0, displayRC.Bottom)&lt;br /&gt;                tabBounds.Size = New Size(tabControl.Width, tabControl.Height - displayRC.Height)&lt;br /&gt;&lt;br /&gt;            Case TabAlignment.Left&lt;br /&gt;                tabBounds.Size = New Size(displayRC.Left, tabControl.Height)&lt;br /&gt;&lt;br /&gt;            Case TabAlignment.Right&lt;br /&gt;                tabBounds.Location = New Point(displayRC.Right, 0)&lt;br /&gt;                tabBounds.Size = New Size(tabControl.Width - displayRC.Width, tabControl.Height)&lt;br /&gt;&lt;br /&gt;            Case Else&lt;br /&gt;                tabBounds.Size = New Size(tabControl.Width, displayRC.Top)&lt;br /&gt;        End Select&lt;br /&gt;&lt;br /&gt;        tabBounds.Inflate(-3, -3)&lt;br /&gt;&lt;br /&gt;        Return tabBounds.Contains(point)&lt;br /&gt;&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Private Sub SwapTabPages(ByVal index1 As Int32, ByVal index2 As Int32)&lt;br /&gt;        If ((index1 Or index2) &amp;lt;&amp;gt; -1) Then&lt;br /&gt;            Dim tab1 As TabPage = tabControl.TabPages(index1)&lt;br /&gt;            Dim tab2 As TabPage = tabControl.TabPages(index2)&lt;br /&gt;            tabControl.TabPages(index1) = tab2&lt;br /&gt;            tabControl.TabPages(index2) = tab1&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;#End Region&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;Friend Class TabForm&lt;br /&gt;    Inherits Form&lt;br /&gt;&lt;br /&gt;    Public Sub New(ByVal tabPage As TabPage)&lt;br /&gt;        MyBase.New()&lt;br /&gt;        Me.FormBorderStyle = FormBorderStyle.FixedToolWindow&lt;br /&gt;        Me.StartPosition = FormStartPosition.Manual&lt;br /&gt;        Me.MinimizeBox = False&lt;br /&gt;        Me.MaximizeBox = False&lt;br /&gt;        Me.tabPage = tabPage&lt;br /&gt;        tabPage.Tag = Me&lt;br /&gt;        Me.tabControl = DirectCast(tabPage.Parent, TabControl)&lt;br /&gt;        Me.tabID = tabControl.TabPages.IndexOf(tabPage)&lt;br /&gt;        Me.ClientSize = tabPage.Size&lt;br /&gt;        Me.Location = tabControl.PointToScreen(New Point(tabPage.Left, tabControl.PointToClient(Cursor.Position).Y - SystemInformation.ToolWindowCaptionHeight \ 2))&lt;br /&gt;        Me.Text = tabPage.Text&lt;br /&gt;        UnDockFromTab()&lt;br /&gt;        Me.dragOffset = tabControl.PointToScreen(Cursor.Position)&lt;br /&gt;        Me.dragOffset.X -= Me.Location.X&lt;br /&gt;        Me.dragOffset.Y -= Me.Location.Y&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private tabPage As TabPage&lt;br /&gt;    Private tabControl As TabControl&lt;br /&gt;    Private tabID As Int32&lt;br /&gt;    Private dragOffset As Point&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub OnClosed(ByVal e As EventArgs)&lt;br /&gt;        MyBase.OnClosed(e)&lt;br /&gt;        DockToTab()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub WndProc(ByRef m As Message)&lt;br /&gt;&lt;br /&gt;        If (m.Msg = NativeMethods.WM_MOVING) Then&lt;br /&gt;&lt;br /&gt;            Dim rc As NativeMethods.RECT = DirectCast(m.GetLParam(GetType(NativeMethods.RECT)), NativeMethods.RECT)&lt;br /&gt;            Dim pt As Point = tabControl.PointToClient(Cursor.Position)&lt;br /&gt;            Dim pageRect As Rectangle = tabControl.DisplayRectangle&lt;br /&gt;            Dim tabsRect As Rectangle = Rectangle.Empty&lt;br /&gt;&lt;br /&gt;            Select Case tabControl.Alignment&lt;br /&gt;&lt;br /&gt;                Case TabAlignment.Left&lt;br /&gt;                    tabsRect.Size = New Size(pageRect.Left, tabControl.Height)&lt;br /&gt;&lt;br /&gt;                Case TabAlignment.Bottom&lt;br /&gt;                    tabsRect.Location = New Point(0, pageRect.Bottom)&lt;br /&gt;                    tabsRect.Size = New Size(tabControl.Width, tabControl.Bottom - pageRect.Bottom)&lt;br /&gt;&lt;br /&gt;                Case TabAlignment.Right&lt;br /&gt;                    tabsRect.Location = New Point(pageRect.Right, 0)&lt;br /&gt;                    tabsRect.Size = New Size(tabControl.Right - pageRect.Right, tabControl.Height)&lt;br /&gt;&lt;br /&gt;                Case Else&lt;br /&gt;                    tabsRect.Size = New Size(tabControl.Width, pageRect.Top)&lt;br /&gt;            End Select&lt;br /&gt;&lt;br /&gt;            If tabsRect.Contains(pt) Then&lt;br /&gt;                DockToTab()&lt;br /&gt;            Else&lt;br /&gt;                UnDockFromTab()&lt;br /&gt;            End If&lt;br /&gt;&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;        MyBase.WndProc(m)&lt;br /&gt;&lt;br /&gt;        Select Case m.Msg&lt;br /&gt;            Case NativeMethods.WM_NCLBUTTONDBLCLK&lt;br /&gt;                Me.Close()&lt;br /&gt;&lt;br /&gt;            Case NativeMethods.WM_EXITSIZEMOVE&lt;br /&gt;                If (Not Me.Visible) Then&lt;br /&gt;                    Me.Close()&lt;br /&gt;                End If&lt;br /&gt;&lt;br /&gt;            Case NativeMethods.WM_MOUSEMOVE&lt;br /&gt;                If (m.WParam.ToInt32() = 1) Then&lt;br /&gt;&lt;br /&gt;                    If (Not captured) Then&lt;br /&gt;                        Dim pt As Point = tabControl.PointToScreen((Cursor.Position))&lt;br /&gt;                        Dim newPosition As Point = New Point(pt.X - dragOffset.X, pt.Y - dragOffset.Y)&lt;br /&gt;                        Me.Location = newPosition&lt;br /&gt;                    End If&lt;br /&gt;                    Dim rc As NativeMethods.RECT = New NativeMethods.RECT(Me.Bounds)&lt;br /&gt;                    Dim lParam As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(rc))&lt;br /&gt;                    Marshal.StructureToPtr(rc, lParam, True)&lt;br /&gt;                    NativeMethods.SendMessage(Me.Handle, NativeMethods.WM_MOVING, IntPtr.Zero, lParam)&lt;br /&gt;                    Marshal.FreeHGlobal(lParam)&lt;br /&gt;                End If&lt;br /&gt;&lt;br /&gt;            Case NativeMethods.WM_SETCURSOR&lt;br /&gt;                captured = True&lt;br /&gt;&lt;br /&gt;            Case Else&lt;br /&gt;&lt;br /&gt;        End Select&lt;br /&gt;&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private captured As Boolean&lt;br /&gt;&lt;br /&gt;    Private Sub DockToTab()&lt;br /&gt;&lt;br /&gt;        If (Not tabControl.TabPages.Contains(tabPage)) Then&lt;br /&gt;            For id As Int32 = Me.Controls.Count - 1 To 0 Step -1&lt;br /&gt;&lt;br /&gt;                tabPage.Controls.Add(Me.Controls(0))&lt;br /&gt;            Next&lt;br /&gt;            tabControl.TabPages.Insert(tabID, tabPage)&lt;br /&gt;            tabControl.SelectedTab = tabPage&lt;br /&gt;&lt;br /&gt;            tabControl.Capture = True&lt;br /&gt;            Me.Close()&lt;br /&gt;        End If&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub UnDockFromTab()&lt;br /&gt;&lt;br /&gt;        If (Me.Visible OrElse Me.IsDisposed) Then&lt;br /&gt;            Return&lt;br /&gt;        End If&lt;br /&gt;&lt;br /&gt;        For id As Int32 = tabPage.Controls.Count - 1 To 0 Step -1&lt;br /&gt;            Me.Controls.Add(tabPage.Controls(0))&lt;br /&gt;        Next&lt;br /&gt;&lt;br /&gt;        tabControl.TabPages.Remove(tabPage)&lt;br /&gt;        Me.Capture = True&lt;br /&gt;        Me.Show()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;Friend NotInheritable Class NativeMethods&lt;br /&gt;&lt;br /&gt;    &amp;lt;StructLayout(LayoutKind.Sequential)&amp;gt; _&lt;br /&gt;    Public Structure RECT&lt;br /&gt;        Public Left, Top, Right, Bottom As Int32&lt;br /&gt;        Public Sub New(ByVal bounds As Rectangle)&lt;br /&gt;            Me.Left = bounds.Left&lt;br /&gt;            Me.Top = bounds.Top&lt;br /&gt;            Me.Right = bounds.Right&lt;br /&gt;            Me.Bottom = bounds.Bottom&lt;br /&gt;        End Sub&lt;br /&gt;        Public Overrides Function ToString() As String&lt;br /&gt;            Return String.Format("{0}, {1}, {2}, {3}", Left, Top, Right, Bottom)&lt;br /&gt;        End Function&lt;br /&gt;    End Structure&lt;br /&gt;&lt;br /&gt;    Public Const WM_NCLBUTTONDBLCLK As Int32 = &amp;amp;HA3&lt;br /&gt;&lt;br /&gt;    Public Const WM_SETCURSOR As Int32 = &amp;amp;H20&lt;br /&gt;&lt;br /&gt;    Public Const WM_NCHITTEST As Int32 = &amp;amp;H84&lt;br /&gt;&lt;br /&gt;    Public Const WM_MOUSEMOVE As Int32 = &amp;amp;H200&lt;br /&gt;    Public Const WM_MOVING As Int32 = &amp;amp;H216&lt;br /&gt;    Public Const WM_EXITSIZEMOVE As Int32 = &amp;amp;H232&lt;br /&gt;&lt;br /&gt;    &amp;lt;DllImport("user32.dll")&amp;gt; _&lt;br /&gt;    Public Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal msg As Int32, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Int32&lt;br /&gt;    End Function&lt;br /&gt;    &amp;lt;DllImport("user32.dll")&amp;gt; _&lt;br /&gt;    Public Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal msg As Int32, ByVal wParam As IntPtr, ByRef lParam As TCHITTESTINFO) As Int32&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    &amp;lt;StructLayout(LayoutKind.Sequential)&amp;gt; _&lt;br /&gt;    Public Structure TCHITTESTINFO&lt;br /&gt;        Public pt As Point&lt;br /&gt;        Public flags As TCHITTESTFLAGS&lt;br /&gt;        Public Sub New(ByVal point As Point)&lt;br /&gt;            pt = point&lt;br /&gt;            flags = TCHITTESTFLAGS.TCHT_ONITEM&lt;br /&gt;        End Sub&lt;br /&gt;    End Structure&lt;br /&gt;&lt;br /&gt;    &amp;lt;Flags()&amp;gt; _&lt;br /&gt;    Public Enum TCHITTESTFLAGS&lt;br /&gt;        TCHT_NOWHERE = 1&lt;br /&gt;        TCHT_ONITEMICON = 2&lt;br /&gt;        TCHT_ONITEMLABEL = 4&lt;br /&gt;        TCHT_ONITEM = TCHT_ONITEMICON Or TCHT_ONITEMLABEL&lt;br /&gt;    End Enum&lt;br /&gt;&lt;br /&gt;    Public Const TCM_HITTEST As Int32 = &amp;amp;H130D&lt;br /&gt;&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;Public Enum TabDragBehavior&lt;br /&gt;    None&lt;br /&gt;    TabDragArrange&lt;br /&gt;    TabDragOut&lt;br /&gt;End Enum&lt;br /&gt;                    &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;CSharp Class:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;internal class TabDragger&lt;br /&gt;{&lt;br /&gt;    public TabDragger(TabControl tabControl)&lt;br /&gt;        : base()&lt;br /&gt;    {&lt;br /&gt;        this.tabControl = tabControl;&lt;br /&gt;        tabControl.MouseDown +=new MouseEventHandler(tabControl_MouseDown);&lt;br /&gt;        tabControl.MouseMove += new MouseEventHandler(tabControl_MouseMove);&lt;br /&gt;        tabControl.DoubleClick += new EventHandler(tabControl_DoubleClick);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public TabDragger(TabControl tabControl, TabDragBehavior behavior) &lt;br /&gt;        : this(tabControl)&lt;br /&gt;    {&lt;br /&gt;        this.dragBehavior = behavior;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private TabControl tabControl;&lt;br /&gt;    private TabPage dragTab = null;&lt;br /&gt;    private TabDragBehavior dragBehavior = TabDragBehavior.TabDragArrange;&lt;br /&gt;&lt;br /&gt;    private TabDragBehavior DragBehavior&lt;br /&gt;    {&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            if (!tabControl.Multiline)&lt;br /&gt;                return dragBehavior;&lt;br /&gt;            return TabDragBehavior.None;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void tabControl_MouseDown(object sender, MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        dragTab = TabUnderMouse();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void tabControl_MouseMove(object sender, MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        if (DragBehavior == TabDragBehavior.None)&lt;br /&gt;            return;&lt;br /&gt;&lt;br /&gt;        if (e.Button == MouseButtons.Left)&lt;br /&gt;        {&lt;br /&gt;            if (dragTab != null)&lt;br /&gt;            {&lt;br /&gt;                if (tabControl.TabPages.Contains(dragTab))&lt;br /&gt;                {&lt;br /&gt;                    if (PointInTabStrip(e.Location))&lt;br /&gt;                    {&lt;br /&gt;                        TabPage hotTab = TabUnderMouse();&lt;br /&gt;                        if (hotTab != dragTab &amp;amp;&amp;amp; hotTab != null)&lt;br /&gt;                        {&lt;br /&gt;                            int id1 = tabControl.TabPages.IndexOf(dragTab);&lt;br /&gt;                            int id2 = tabControl.TabPages.IndexOf(hotTab);&lt;br /&gt;                            if (id1 &amp;gt; id2)&lt;br /&gt;                            {&lt;br /&gt;                                for (int id = id2; id &amp;lt;= id1; id++)&lt;br /&gt;                                {&lt;br /&gt;                                    SwapTabPages(id1, id);&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                            else&lt;br /&gt;                            {&lt;br /&gt;                                for (int id = id2; id &amp;gt; id1; id--)&lt;br /&gt;                                {&lt;br /&gt;                                    SwapTabPages(id1, id);&lt;br /&gt;                                }&lt;br /&gt;                            }&lt;br /&gt;                            tabControl.SelectedTab = dragTab;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        if (this.dragBehavior == TabDragBehavior.TabDragOut)&lt;br /&gt;                        {&lt;br /&gt;                            if (dragTab.Tag != null)&lt;br /&gt;                            {&lt;br /&gt;                                ((TabForm)dragTab.Tag).Dispose();&lt;br /&gt;                                dragTab.Tag = null;&lt;br /&gt;                            }&lt;br /&gt;                            else&lt;br /&gt;                            {&lt;br /&gt;                                TabForm frm = new TabForm(dragTab);&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void tabControl_DoubleClick(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        if (this.DragBehavior == TabDragBehavior.TabDragOut)&lt;br /&gt;        {&lt;br /&gt;            TabForm frm = new TabForm(dragTab);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #region Private Methods&lt;br /&gt;&lt;br /&gt;    private TabPage TabUnderMouse()&lt;br /&gt;    {&lt;br /&gt;        NativeMethods.TCHITTESTINFO HTI = new NativeMethods.TCHITTESTINFO(tabControl.PointToClient(Cursor.Position));&lt;br /&gt;        int tabID = NativeMethods.SendMessage(tabControl.Handle, NativeMethods.TCM_HITTEST, IntPtr.Zero, ref HTI);&lt;br /&gt;        return tabID == -1 ? null : tabControl.TabPages[tabID];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private bool PointInTabStrip(Point point)&lt;br /&gt;    {&lt;br /&gt;        Rectangle tabBounds = Rectangle.Empty;&lt;br /&gt;        Rectangle displayRC = tabControl.DisplayRectangle; ;&lt;br /&gt;&lt;br /&gt;        switch (tabControl.Alignment)&lt;br /&gt;        {&lt;br /&gt;            case TabAlignment.Bottom:&lt;br /&gt;                tabBounds.Location = new Point(0, displayRC.Bottom);&lt;br /&gt;                tabBounds.Size = new Size(tabControl.Width, tabControl.Height - displayRC.Height);&lt;br /&gt;                break;&lt;br /&gt;&lt;br /&gt;            case TabAlignment.Left:&lt;br /&gt;                tabBounds.Size = new Size(displayRC.Left, tabControl.Height);&lt;br /&gt;                break;&lt;br /&gt;&lt;br /&gt;            case TabAlignment.Right:&lt;br /&gt;                tabBounds.Location = new Point(displayRC.Right, 0);&lt;br /&gt;                tabBounds.Size = new Size(tabControl.Width - displayRC.Width, tabControl.Height);&lt;br /&gt;                break;&lt;br /&gt;&lt;br /&gt;            default:&lt;br /&gt;                tabBounds.Size = new Size(tabControl.Width, displayRC.Top);&lt;br /&gt;                break;&lt;br /&gt;        }&lt;br /&gt;        tabBounds.Inflate(-3, -3);&lt;br /&gt;        return tabBounds.Contains(point);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void SwapTabPages(int index1, int index2)&lt;br /&gt;    {&lt;br /&gt;        if ((index1 | index2) != -1)&lt;br /&gt;        {&lt;br /&gt;            TabPage tab1 = tabControl.TabPages[index1];&lt;br /&gt;            TabPage tab2 = tabControl.TabPages[index2];&lt;br /&gt;            tabControl.TabPages[index1] = tab2;&lt;br /&gt;            tabControl.TabPages[index2] = tab1;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;internal class TabForm : Form&lt;br /&gt;{&lt;br /&gt;    public TabForm(TabPage tabPage)&lt;br /&gt;        : base()&lt;br /&gt;    {&lt;br /&gt;        this.FormBorderStyle = FormBorderStyle.FixedToolWindow;&lt;br /&gt;        this.StartPosition = FormStartPosition.Manual;&lt;br /&gt;        this.MinimizeBox = false;&lt;br /&gt;        this.MaximizeBox = false;&lt;br /&gt;        this.tabPage = tabPage;&lt;br /&gt;        tabPage.Tag = this;&lt;br /&gt;        this.tabControl = (TabControl)tabPage.Parent;&lt;br /&gt;        this.tabID = tabControl.TabPages.IndexOf(tabPage);&lt;br /&gt;        this.ClientSize = tabPage.Size;&lt;br /&gt;        this.Location = tabControl.PointToScreen(new Point(tabPage.Left, tabControl.PointToClient(Cursor.Position).Y - SystemInformation.ToolWindowCaptionHeight / 2));&lt;br /&gt;        this.Text = tabPage.Text;&lt;br /&gt;        UnDockFromTab();&lt;br /&gt;        this.dragOffset = tabControl.PointToScreen(Cursor.Position);&lt;br /&gt;        this.dragOffset.X -= this.Location.X ;&lt;br /&gt;        this.dragOffset.Y -= this.Location.Y;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private TabPage tabPage;&lt;br /&gt;    private TabControl tabControl;&lt;br /&gt;    private int tabID;&lt;br /&gt;    private Point dragOffset;&lt;br /&gt;&lt;br /&gt;    protected override void OnClosed(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        base.OnClosed(e);&lt;br /&gt;        DockToTab();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected override void WndProc(ref Message m)&lt;br /&gt;    {&lt;br /&gt;        if (m.Msg == NativeMethods.WM_MOVING)&lt;br /&gt;        {&lt;br /&gt;            NativeMethods.RECT rc = (NativeMethods.RECT)m.GetLParam(typeof(NativeMethods.RECT));&lt;br /&gt;            Point pt = tabControl.PointToClient(Cursor.Position);&lt;br /&gt;            Rectangle pageRect = tabControl.DisplayRectangle;&lt;br /&gt;            Rectangle tabsRect = Rectangle.Empty;&lt;br /&gt;            switch (tabControl.Alignment)&lt;br /&gt;            {&lt;br /&gt;                case TabAlignment.Left:&lt;br /&gt;                    tabsRect.Size = new Size(pageRect.Left, tabControl.Height);&lt;br /&gt;                    break;&lt;br /&gt;&lt;br /&gt;                case TabAlignment.Bottom:&lt;br /&gt;                    tabsRect.Location = new Point(0, pageRect.Bottom);&lt;br /&gt;                    tabsRect.Size = new Size(tabControl.Width, tabControl.Bottom - pageRect.Bottom);&lt;br /&gt;                    break;&lt;br /&gt;&lt;br /&gt;                case TabAlignment.Right:&lt;br /&gt;                    tabsRect.Location = new Point(pageRect.Right, 0);&lt;br /&gt;                    tabsRect.Size = new Size(tabControl.Right - pageRect.Right, tabControl.Height);&lt;br /&gt;                    break;&lt;br /&gt;&lt;br /&gt;                default:&lt;br /&gt;                    tabsRect.Size = new Size(tabControl.Width, pageRect.Top);&lt;br /&gt;                    break;&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;            if (tabsRect.Contains(pt))&lt;br /&gt;                DockToTab();&lt;br /&gt;            else&lt;br /&gt;                UnDockFromTab();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        base.WndProc(ref m);&lt;br /&gt;            &lt;br /&gt;        switch (m.Msg)&lt;br /&gt;        {&lt;br /&gt;            case NativeMethods.WM_NCLBUTTONDBLCLK:&lt;br /&gt;                this.Close();&lt;br /&gt;                break;&lt;br /&gt;&lt;br /&gt;            case NativeMethods.WM_EXITSIZEMOVE:&lt;br /&gt;                if (!this.Visible)&lt;br /&gt;                    this.Close();&lt;br /&gt;                break;&lt;br /&gt;&lt;br /&gt;            case NativeMethods.WM_MOUSEMOVE:&lt;br /&gt;                if (m.WParam.ToInt32() == 1)&lt;br /&gt;                {&lt;br /&gt;                    if (!captured)&lt;br /&gt;                    {&lt;br /&gt;                        Point pt = tabControl.PointToScreen((Cursor.Position));&lt;br /&gt;                        Point newPosition = new Point(pt.X - dragOffset.X, pt.Y - dragOffset.Y);&lt;br /&gt;                        this.Location = newPosition;&lt;br /&gt;                    }&lt;br /&gt;                    NativeMethods.RECT rc = new NativeMethods.RECT(this.Bounds);&lt;br /&gt;                    IntPtr lParam = Marshal.AllocHGlobal(Marshal.SizeOf(rc));&lt;br /&gt;                    Marshal.StructureToPtr(rc, lParam, true);&lt;br /&gt;                    NativeMethods.SendMessage(this.Handle, NativeMethods.WM_MOVING, IntPtr.Zero, lParam);&lt;br /&gt;                    Marshal.FreeHGlobal(lParam);&lt;br /&gt;                }&lt;br /&gt;                break;&lt;br /&gt;&lt;br /&gt;            case NativeMethods.WM_SETCURSOR:&lt;br /&gt;                captured = true;&lt;br /&gt;                break;&lt;br /&gt;&lt;br /&gt;            default:&lt;br /&gt;                break;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private bool captured;&lt;br /&gt;&lt;br /&gt;    private void DockToTab()&lt;br /&gt;    {&lt;br /&gt;        if (!tabControl.TabPages.Contains(tabPage))&lt;br /&gt;        {&lt;br /&gt;            for (int id = this.Controls.Count - 1; id &amp;gt;= 0; id--)&lt;br /&gt;            {&lt;br /&gt;                tabPage.Controls.Add(this.Controls[0]);&lt;br /&gt;            }&lt;br /&gt;            tabControl.TabPages.Insert(tabID, tabPage);&lt;br /&gt;            tabControl.SelectedTab = tabPage;&lt;br /&gt;&lt;br /&gt;            tabControl.Capture = true;&lt;br /&gt;            this.Close();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void UnDockFromTab()&lt;br /&gt;    {&lt;br /&gt;        if (this.Visible || this.IsDisposed)&lt;br /&gt;            return;&lt;br /&gt;        for (int id = tabPage.Controls.Count - 1; id &amp;gt;= 0; id--)&lt;br /&gt;        {&lt;br /&gt;            this.Controls.Add(tabPage.Controls[0]);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        tabControl.TabPages.Remove(tabPage);&lt;br /&gt;        this.Capture = true;&lt;br /&gt;        this.Show();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;internal sealed class NativeMethods&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    [StructLayout(LayoutKind.Sequential)]&lt;br /&gt;    public struct RECT&lt;br /&gt;    {&lt;br /&gt;        public int Left, Top, Right, Bottom;&lt;br /&gt;        public RECT(Rectangle bounds)&lt;br /&gt;        {&lt;br /&gt;            this.Left = bounds.Left;&lt;br /&gt;            this.Top = bounds.Top;&lt;br /&gt;            this.Right = bounds.Right;&lt;br /&gt;            this.Bottom = bounds.Bottom;&lt;br /&gt;        }&lt;br /&gt;        public override string ToString()&lt;br /&gt;        {&lt;br /&gt;            return String.Format("{0}, {1}, {2}, {3}", Left, Top, Right, Bottom);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public const int WM_NCLBUTTONDBLCLK = 0xA3;&lt;br /&gt;    &lt;br /&gt;    public const int WM_SETCURSOR = 0x20;&lt;br /&gt;&lt;br /&gt;    public const int WM_NCHITTEST = 0x84;&lt;br /&gt;&lt;br /&gt;    public const int WM_MOUSEMOVE = 0x200;&lt;br /&gt;    public const int WM_MOVING = 0x216;&lt;br /&gt;    public const int WM_EXITSIZEMOVE = 0x232;&lt;br /&gt;&lt;br /&gt;    [DllImport("user32.dll")]&lt;br /&gt;    public static extern int SendMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam);&lt;br /&gt;&lt;br /&gt;    [DllImport("user32.dll")]&lt;br /&gt;    public static extern int SendMessage(IntPtr hwnd, int msg, IntPtr wParam, ref TCHITTESTINFO lParam);&lt;br /&gt;&lt;br /&gt;    [StructLayout(LayoutKind.Sequential)]&lt;br /&gt;    public struct TCHITTESTINFO&lt;br /&gt;    {&lt;br /&gt;        public Point pt;&lt;br /&gt;        public TCHITTESTFLAGS flags;&lt;br /&gt;        public TCHITTESTINFO(Point point)&lt;br /&gt;        {&lt;br /&gt;            pt = point;&lt;br /&gt;            flags = TCHITTESTFLAGS.TCHT_ONITEM;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [Flags()]&lt;br /&gt;    public enum TCHITTESTFLAGS&lt;br /&gt;    {&lt;br /&gt;        TCHT_NOWHERE = 1,&lt;br /&gt;        TCHT_ONITEMICON = 2,&lt;br /&gt;        TCHT_ONITEMLABEL = 4,&lt;br /&gt;        TCHT_ONITEM = TCHT_ONITEMICON | TCHT_ONITEMLABEL&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public const int TCM_HITTEST = 0x130D;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public enum TabDragBehavior&lt;br /&gt;{None, TabDragArrange, TabDragOut }&lt;br /&gt;                    &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-6661137944890948078?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/6661137944890948078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/tabdragging-example-using-tabdragger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/6661137944890948078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/6661137944890948078'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/tabdragging-example-using-tabdragger.html' title='TabDragging Example using TabDragger Class'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-779224966138368193</id><published>2011-07-22T07:29:00.000-07:00</published><updated>2011-07-22T07:32:14.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='TabControl'/><title type='text'>Show Hide Tabpages in Tabcontrol</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;script language="javascript" type="text/javascript"&gt;function showHideById(id){var el = document.getElementById(id);if(el.style.display == 'none'){el.style.display = ''; }else{el.style.display = 'none'; }}&lt;/script&gt;&lt;br /&gt;The Visible property has not been implemented on the Tabcontrol and there is no Insert method. The following methods are a workaround.&lt;br /&gt;This some sample by: Mick Doherty. demonstrated how to manipulate show and hide tabpages in a tabcontrol. See this code, sample in VB net and Csharp&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;:&lt;br /&gt;&lt;h3&gt;Hide TabPages VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Private Sub HideTabPage(ByVal tp As TabPage)&lt;br /&gt;  If TabControl1.TabPages.Contains(tp) Then TabControl1.TabPages.Remove(tp)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub ShowTabPage(ByVal tp As TabPage)&lt;br /&gt;  ShowTabPage(tp, TabControl1.TabPages.Count)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub ShowTabPage(ByVal tp As TabPage, ByVal index As Integer)&lt;br /&gt;  If TabControl1.TabPages.Contains(tp) Then Return&lt;br /&gt;  InsertTabPage(tp, index)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub InsertTabPage(ByVal [tabpage] As TabPage, ByVal [index] As Integer)&lt;br /&gt;  If [index] &amp;lt; 0 Or [index] &amp;gt; TabControl1.TabCount Then&lt;br /&gt;    Throw New ArgumentException("Index out of Range.")&lt;br /&gt;  End If&lt;br /&gt;  TabControl1.TabPages.Add([tabpage])&lt;br /&gt;  If [index] &amp;lt; TabControl1.TabCount - 1 Then&lt;br /&gt;    Do While TabControl1.TabPages.IndexOf([tabpage]) &amp;lt;&amp;gt; [index]&lt;br /&gt;    SwapTabPages([tabpage], (TabControl1.TabPages(TabControl1.TabPages.IndexOf([tabpage]) - 1)))&lt;br /&gt;    Loop&lt;br /&gt;  End If&lt;br /&gt;  TabControl1.SelectedTab = [tabpage]&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub SwapTabPages(ByVal tp1 As TabPage, ByVal tp2 As TabPage)&lt;br /&gt;  If TabControl1.TabPages.Contains(tp1) = False Or TabControl1.TabPages.Contains(tp2) = False Then&lt;br /&gt;    Throw New ArgumentException("TabPages must be in the TabCotrols TabPageCollection.")&lt;br /&gt;  End If&lt;br /&gt;  Dim Index1 As Integer = TabControl1.TabPages.IndexOf(tp1)&lt;br /&gt;  Dim Index2 As Integer = TabControl1.TabPages.IndexOf(tp2)&lt;br /&gt;  TabControl1.TabPages(Index1) = tp2&lt;br /&gt;  TabControl1.TabPages(Index2) = tp1&lt;br /&gt;&lt;br /&gt;  'Uncomment the following section to overcome bugs in the Compact Framework&lt;br /&gt;  'TabControl1.SelectedIndex = TabControl1.SelectedIndex &lt;br /&gt;  'Dim tp1Text, tp2Text As String&lt;br /&gt;  'tp1Text = tp1.Text&lt;br /&gt;  'tp2Text = tp2.Text&lt;br /&gt;  'tp1.Text=tp2Text&lt;br /&gt;  'tp2.Text=tp1Text&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;Hide TabPages Csharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;private void HideTabPage(TabPage tp)&lt;br /&gt;{&lt;br /&gt;if (tabControl1.TabPages.Contains(tp))&lt;br /&gt;tabControl1.TabPages.Remove(tp);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void ShowTabPage(TabPage tp)&lt;br /&gt;{&lt;br /&gt;ShowTabPage(tp, tabControl1.TabPages.Count);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void ShowTabPage(TabPage tp , int index)&lt;br /&gt;{&lt;br /&gt;if (tabControl1.TabPages.Contains(tp)) return;&lt;br /&gt;InsertTabPage(tp, index);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void InsertTabPage(TabPage tabpage, int index)&lt;br /&gt;{&lt;br /&gt;if (index &amp;lt; 0 || index &amp;gt; tabControl1.TabCount)&lt;br /&gt;throw new ArgumentException("Index out of Range.");&lt;br /&gt;tabControl1.TabPages.Add(tabpage);&lt;br /&gt;if (index &amp;lt; tabControl1.TabCount - 1)&lt;br /&gt;do &lt;br /&gt;{&lt;br /&gt;SwapTabPages(tabpage, (tabControl1.TabPages[tabControl1.TabPages.IndexOf(tabpage) - 1]));&lt;br /&gt;}&lt;br /&gt;while (tabControl1.TabPages.IndexOf(tabpage) != index);&lt;br /&gt;tabControl1.SelectedTab = tabpage;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void SwapTabPages(TabPage tp1, TabPage tp2)&lt;br /&gt;{&lt;br /&gt;if (tabControl1.TabPages.Contains(tp1) == false || tabControl1.TabPages.Contains(tp2) == false)&lt;br /&gt;throw new ArgumentException("TabPages must be in the TabControls TabPageCollection.");&lt;br /&gt;&lt;br /&gt;int Index1 = tabControl1.TabPages.IndexOf(tp1);&lt;br /&gt;int Index2 = tabControl1.TabPages.IndexOf(tp2);&lt;br /&gt;tabControl1.TabPages[Index1] = tp2;&lt;br /&gt;tabControl1.TabPages[Index2] = tp1;&lt;br /&gt;//Uncomment the following section to overcome bugs in the Compact Framework&lt;br /&gt;//tabControl1.SelectedIndex = tabControl1.SelectedIndex; &lt;br /&gt;//string tp1Text, tp2Text;&lt;br /&gt;//tp1Text = tp1.Text;&lt;br /&gt;//tp2Text = tp2.Text;&lt;br /&gt;//tp1.Text=tp2Text;&lt;br /&gt;//tp2.Text=tp1Text;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-779224966138368193?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/779224966138368193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/show-hide-tabpages-in-tabcontrol.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/779224966138368193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/779224966138368193'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/show-hide-tabpages-in-tabcontrol.html' title='Show Hide Tabpages in Tabcontrol'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-1010323011729166028</id><published>2011-07-21T10:19:00.000-07:00</published><updated>2011-07-21T10:19:39.509-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programing world'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='TabControl'/><title type='text'>Create Custom  Design for A Tab Control</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;script language="javascript" type="text/javascript"&gt;function showHideById(id){var el = document.getElementById(id);if(el.style.display == 'none'){el.style.display = ''; }else{el.style.display = 'none'; }}&lt;/script&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wKJA1kERlhg/TihdNqV2UCI/AAAAAAAAAQk/3q_oQUduGg8/s1600/Custom+Tab+Control+VB+net+Csharp+Examples.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Custom  Design for A Tab Control" border="0" height="220" src="http://1.bp.blogspot.com/-wKJA1kERlhg/TihdNqV2UCI/AAAAAAAAAQk/3q_oQUduGg8/s400/Custom+Tab+Control+VB+net+Csharp+Examples.png" title="Custom  Design for A Tab Control" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A little more work involved here than in the previous case,  but definately worth it. Add a new UserControl to your project and  replace the code with that shown below.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;As you can see we have made the  BackColor property of the TabControl Visible in the Designer and put a  custom background behind Transparent Tabpages. This control has been updated to incorporate a modified version of the  SelectedIndexChanging event in code examples by Matt Hinz and &lt;a href="http://www.onteorasoftware.com/"&gt;Ken Tucker&lt;/a&gt;. The project needs a custom designer to get the Design time painting to  behave properly, but that's something for a later project. You'll find TabControlEx on my Controls page with all the work already  done.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;TabControl First Edition&lt;/h3&gt;&lt;b&gt;VB net Sample:&lt;/b&gt;&lt;br /&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Imports System.ComponentModel&lt;br /&gt;Imports System.Runtime.InteropServices&lt;br /&gt;Imports System.Reflection&lt;br /&gt;Public Class TabControl&lt;br /&gt;  Inherits System.Windows.Forms.TabControl&lt;br /&gt;#Region " Windows Form Designer generated code "&lt;br /&gt;  Public Sub New()&lt;br /&gt;    MyBase.New()&lt;br /&gt;    'This call is required by the Windows Form Designer.&lt;br /&gt;    InitializeComponent()&lt;br /&gt;    'Add any initialization after the InitializeComponent() call&lt;br /&gt;    setstyle(ControlStyles.AllPaintingInWmPaint Or _&lt;br /&gt;      ControlStyles.DoubleBuffer Or _&lt;br /&gt;      ControlStyles.ResizeRedraw Or _&lt;br /&gt;      ControlStyles.UserPaint, True)&lt;br /&gt;  End Sub&lt;br /&gt;  'UserControl1 overrides dispose to clean up the component list.&lt;br /&gt;  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;    If disposing Then&lt;br /&gt;    If Not (components Is Nothing) Then&lt;br /&gt;      components.Dispose()&lt;br /&gt;    End If&lt;br /&gt;    End If&lt;br /&gt;    MyBase.Dispose(disposing)&lt;br /&gt;  End Sub&lt;br /&gt;  'Required by the Windows Form Designer&lt;br /&gt;  Private components As System.ComponentModel.IContainer&lt;br /&gt;  'NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;  'It can be modified using the Windows Form Designer.  &lt;br /&gt;  'Do not modify it using the code editor.&lt;br /&gt;  &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; Private Sub InitializeComponent()&lt;br /&gt;    components = New System.ComponentModel.Container&lt;br /&gt;  End Sub&lt;br /&gt;#End Region&lt;br /&gt;#Region " InterOP "&lt;br /&gt;  &amp;lt;StructLayout(LayoutKind.Sequential)&amp;gt; _&lt;br /&gt;  Private Structure NMHDR&lt;br /&gt;    Public HWND As Int32&lt;br /&gt;    Public idFrom As Int32&lt;br /&gt;    Public code As Int32&lt;br /&gt;    Public Overloads Function ToString() As String&lt;br /&gt;    Return String.Format("Hwnd: {0}, ControlID: {1}, Code: {2}", HWND, idFrom, code)&lt;br /&gt;    End Function&lt;br /&gt;  End Structure&lt;br /&gt;  Private Const TCN_FIRST As Int32 = &amp;amp;HFFFFFFFFFFFFFDDA&amp;amp;&lt;br /&gt;  Private Const TCN_SELCHANGING As Int32 = (TCN_FIRST - 2)&lt;br /&gt;  Private Const WM_USER As Int32 = &amp;amp;H400&amp;amp;&lt;br /&gt;  Private Const WM_NOTIFY As Int32 = &amp;amp;H4E&amp;amp;&lt;br /&gt;  Private Const WM_REFLECT As Int32 = WM_USER + &amp;amp;H1C00&amp;amp;&lt;br /&gt;#End Region&lt;br /&gt;#Region " BackColor Manipulation "&lt;br /&gt;  'As well as exposing the property to the Designer we want it to behave just like any other &lt;br /&gt;  'controls BackColor property so we need some clever manipulation.&lt;br /&gt;  Private m_Backcolor As Color = Color.Empty&lt;br /&gt;  &amp;lt;Browsable(True), _&lt;br /&gt;  Description("The background color used to display text and graphics in a control.")&amp;gt; _&lt;br /&gt;  Public Overrides Property BackColor() As Color&lt;br /&gt;    Get&lt;br /&gt;    If m_Backcolor.Equals(Color.Empty) Then&lt;br /&gt;      If Parent Is Nothing Then&lt;br /&gt;        Return Control.DefaultBackColor&lt;br /&gt;      Else&lt;br /&gt;        Return Parent.BackColor&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    Return m_Backcolor&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal Value As Color)&lt;br /&gt;    If m_Backcolor.Equals(Value) Then Return&lt;br /&gt;    m_Backcolor = Value&lt;br /&gt;    Invalidate()&lt;br /&gt;    'Let the Tabpages know that the backcolor has changed.&lt;br /&gt;    MyBase.OnBackColorChanged(EventArgs.Empty)&lt;br /&gt;    End Set&lt;br /&gt;  End Property&lt;br /&gt;  Public Function ShouldSerializeBackColor() As Boolean&lt;br /&gt;    Return Not m_Backcolor.Equals(Color.Empty)&lt;br /&gt;  End Function&lt;br /&gt;  Public Overrides Sub ResetBackColor()&lt;br /&gt;    m_Backcolor = Color.Empty&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;#End Region&lt;br /&gt;  Protected Overrides Sub OnParentBackColorChanged(ByVal e As System.EventArgs)&lt;br /&gt;    MyBase.OnParentBackColorChanged(e)&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Protected Overrides Sub OnSelectedIndexChanged(ByVal e As System.EventArgs)&lt;br /&gt;    MyBase.OnSelectedIndexChanged(e)&lt;br /&gt;    Invalidate()&lt;br /&gt;  End Sub&lt;br /&gt;  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)&lt;br /&gt;    MyBase.OnPaint(e)&lt;br /&gt;    e.Graphics.Clear(BackColor)&lt;br /&gt;    Dim r As Rectangle = Me.ClientRectangle&lt;br /&gt;    If TabCount &amp;lt;= 0 Then Return&lt;br /&gt;    'Draw a custom background for Transparent TabPages&lt;br /&gt;    r = SelectedTab.Bounds&lt;br /&gt;    Dim sf As New StringFormat&lt;br /&gt;    sf.Alignment = StringAlignment.Center&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center&lt;br /&gt;    Dim DrawFont As New Font(Font.FontFamily, 24, FontStyle.Regular, GraphicsUnit.Pixel)&lt;br /&gt;    ControlPaint.DrawStringDisabled(e.Graphics, "Micks Ownerdraw TabControl", DrawFont, BackColor, RectangleF.op_Implicit(r), sf)&lt;br /&gt;    DrawFont.Dispose()&lt;br /&gt;    'Draw a border around TabPage&lt;br /&gt;    r.Inflate(3, 3)&lt;br /&gt;    Dim tp As TabPage = TabPages(SelectedIndex)&lt;br /&gt;    Dim PaintBrush As New SolidBrush(tp.BackColor)&lt;br /&gt;    e.Graphics.FillRectangle(PaintBrush, r)&lt;br /&gt;    ControlPaint.DrawBorder(e.Graphics, r, PaintBrush.Color, ButtonBorderStyle.Outset)&lt;br /&gt;    'Draw the Tabs&lt;br /&gt;    For index As Integer = 0 To TabCount - 1&lt;br /&gt;    tp = TabPages(index)&lt;br /&gt;    r = GetTabRect(index)&lt;br /&gt;    Dim bs As ButtonBorderStyle = ButtonBorderStyle.Outset&lt;br /&gt;    If index = SelectedIndex Then bs = ButtonBorderStyle.Inset&lt;br /&gt;    PaintBrush.Color = tp.BackColor&lt;br /&gt;    e.Graphics.FillRectangle(PaintBrush, r)&lt;br /&gt;    ControlPaint.DrawBorder(e.Graphics, r, PaintBrush.Color, bs)&lt;br /&gt;    PaintBrush.Color = tp.ForeColor&lt;br /&gt;    'Set up rotation for left and right aligned tabs&lt;br /&gt;    If Alignment = TabAlignment.Left Or Alignment = TabAlignment.Right Then&lt;br /&gt;      Dim RotateAngle As Single = 90&lt;br /&gt;      If Alignment = TabAlignment.Left Then RotateAngle = 270&lt;br /&gt;      Dim cp As New PointF(r.Left + (r.Width \ 2), r.Top + (r.Height \ 2))&lt;br /&gt;      e.Graphics.TranslateTransform(cp.X, cp.Y)&lt;br /&gt;      e.Graphics.RotateTransform(RotateAngle)&lt;br /&gt;      r = New Rectangle(-(r.Height \ 2), -(r.Width \ 2), r.Height, r.Width)&lt;br /&gt;    End If&lt;br /&gt;    'Draw the Tab Text&lt;br /&gt;    If tp.Enabled Then&lt;br /&gt;      e.Graphics.DrawString(tp.Text, Font, PaintBrush, RectangleF.op_Implicit(r), sf)&lt;br /&gt;    Else&lt;br /&gt;      ControlPaint.DrawStringDisabled(e.Graphics, tp.Text, Font, tp.BackColor, RectangleF.op_Implicit(r), sf)&lt;br /&gt;    End If&lt;br /&gt;    e.Graphics.ResetTransform()&lt;br /&gt;    Next&lt;br /&gt;    PaintBrush.Dispose()&lt;br /&gt;  End Sub&lt;br /&gt;  &amp;lt;Description("Occurs as a tab is being changed.")&amp;gt; _&lt;br /&gt;  Public Event SelectedIndexChanging As SelectedTabPageChangeEventHandler&lt;br /&gt;  Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;br /&gt;    If m.Msg = (WM_REFLECT + WM_NOTIFY) Then&lt;br /&gt;    Dim hdr As NMHDR = DirectCast(Marshal.PtrToStructure(m.LParam, GetType(NMHDR)), NMHDR)&lt;br /&gt;    If hdr.code = TCN_SELCHANGING Then&lt;br /&gt;      Dim tp As TabPage = TestTab(Me.PointToClient(Cursor.Position))&lt;br /&gt;      If Not tp Is Nothing Then&lt;br /&gt;        Dim e As New TabPageChangeEventArgs(Me.SelectedTab, tp)&lt;br /&gt;        RaiseEvent SelectedIndexChanging(Me, e)&lt;br /&gt;        If e.Cancel OrElse tp.Enabled = False Then&lt;br /&gt;        m.Result = New IntPtr(1)&lt;br /&gt;        Return&lt;br /&gt;        End If&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    End If&lt;br /&gt;    MyBase.WndProc(m)&lt;br /&gt;  End Sub&lt;br /&gt;  Private Function TestTab(ByVal pt As Point) As TabPage&lt;br /&gt;    For index As Integer = 0 To TabCount - 1&lt;br /&gt;    If GetTabRect(index).Contains(pt.X, pt.Y) Then&lt;br /&gt;      Return TabPages(index)&lt;br /&gt;    End If&lt;br /&gt;    Next&lt;br /&gt;    Return Nothing&lt;br /&gt;  End Function&lt;br /&gt;End Class&lt;br /&gt;#Region " EventArgs Class's "&lt;br /&gt;Public Class TabPageChangeEventArgs&lt;br /&gt;  Inherits EventArgs&lt;br /&gt;  Private _Selected As TabPage&lt;br /&gt;  Private _PreSelected As TabPage&lt;br /&gt;  Public Cancel As Boolean = False&lt;br /&gt;  Public ReadOnly Property CurrentTab() As TabPage&lt;br /&gt;    Get&lt;br /&gt;    Return _Selected&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Public ReadOnly Property NextTab() As TabPage&lt;br /&gt;    Get&lt;br /&gt;    Return _PreSelected&lt;br /&gt;    End Get&lt;br /&gt;  End Property&lt;br /&gt;  Public Sub New(ByVal CurrentTab As TabPage, ByVal NextTab As TabPage)&lt;br /&gt;    _Selected = CurrentTab&lt;br /&gt;    _PreSelected = NextTab&lt;br /&gt;  End Sub&lt;br /&gt;End Class&lt;br /&gt;Public Delegate Sub SelectedTabPageChangeEventHandler(ByVal sender As Object, ByVal e As TabPageChangeEventArgs)&lt;br /&gt;#End Region&lt;br /&gt;        &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;b&gt;Csharp Sample:&lt;/b&gt;&lt;br /&gt;&lt;button onclick="showHideById('CScode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CScode" style="border: solid 1px blue; display: none; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;namespace Dotnetrix_Samples&lt;br /&gt;{&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Summary description for TabControl.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  public class TabControl : System.Windows.Forms.TabControl&lt;br /&gt;  {&lt;br /&gt;    /// &amp;lt;summary&amp;gt; &lt;br /&gt;    /// Required designer variable.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private System.ComponentModel.Container components = null;&lt;br /&gt;    public TabControl()&lt;br /&gt;    {&lt;br /&gt;    // This call is required by the Windows.Forms Form Designer.&lt;br /&gt;    InitializeComponent();&lt;br /&gt;    // TODO: Add any initialization after the InitializeComponent call&lt;br /&gt;    SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /// &amp;lt;summary&amp;gt; &lt;br /&gt;    /// Clean up any resources being used.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    protected override void Dispose( bool disposing )&lt;br /&gt;    {&lt;br /&gt;    if( disposing )&lt;br /&gt;    {&lt;br /&gt;      if(components != null)&lt;br /&gt;      {&lt;br /&gt;        components.Dispose();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    base.Dispose( disposing );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #region Component Designer generated code&lt;br /&gt;    /// &amp;lt;summary&amp;gt; &lt;br /&gt;    /// Required method for Designer support - do not modify &lt;br /&gt;    /// the contents of this method with the code editor.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private void InitializeComponent()&lt;br /&gt;    {&lt;br /&gt;    components = new System.ComponentModel.Container();&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;    #region Interop&lt;br /&gt;    [StructLayout(LayoutKind.Sequential)]&lt;br /&gt;    private struct NMHDR&lt;br /&gt;    {&lt;br /&gt;    public IntPtr HWND;&lt;br /&gt;    public uint idFrom;&lt;br /&gt;    public int code;&lt;br /&gt;    public override String ToString()&lt;br /&gt;    {&lt;br /&gt;      return String.Format("Hwnd: {0}, ControlID: {1}, Code: {2}", HWND, idFrom, code);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private const int TCN_FIRST = 0 - 550;       &lt;br /&gt;    private const int TCN_SELCHANGING = (TCN_FIRST - 2);&lt;br /&gt;    &lt;br /&gt;    private const int WM_USER = 0x400;&lt;br /&gt;    private const int WM_NOTIFY = 0x4E;&lt;br /&gt;    private const int WM_REFLECT = WM_USER + 0x1C00;&lt;br /&gt;    &lt;br /&gt;    #endregion&lt;br /&gt;    #region BackColor Manipulation&lt;br /&gt;    //As well as exposing the property to the Designer we want it to behave just like any other &lt;br /&gt;    //controls BackColor property so we need some clever manipulation.&lt;br /&gt;    private Color m_Backcolor = Color.Empty;&lt;br /&gt;    [Browsable(true),Description("The background color used to display text and graphics in a control.")]&lt;br /&gt;    public override Color BackColor&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      if (m_Backcolor.Equals(Color.Empty))&lt;br /&gt;      {&lt;br /&gt;        if (Parent == null)&lt;br /&gt;        return Control.DefaultBackColor;&lt;br /&gt;        else&lt;br /&gt;        return Parent.BackColor;&lt;br /&gt;      }&lt;br /&gt;      return m_Backcolor;&lt;br /&gt;    }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (m_Backcolor.Equals(value)) return;&lt;br /&gt;      m_Backcolor = value;&lt;br /&gt;      Invalidate();&lt;br /&gt;      //Let the Tabpages know that the backcolor has changed.&lt;br /&gt;      base.OnBackColorChanged(EventArgs.Empty);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    public bool ShouldSerializeBackColor()&lt;br /&gt;    {&lt;br /&gt;    return !m_Backcolor.Equals(Color.Empty);&lt;br /&gt;    }&lt;br /&gt;    public override void ResetBackColor()&lt;br /&gt;    {&lt;br /&gt;    m_Backcolor = Color.Empty;&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;    protected override void OnParentBackColorChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnParentBackColorChanged (e);&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected override void OnSelectedIndexChanged(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnSelectedIndexChanged (e);&lt;br /&gt;    Invalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected override void OnPaint(PaintEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnPaint (e);&lt;br /&gt;    e.Graphics.Clear(BackColor);&lt;br /&gt;    Rectangle r = ClientRectangle;&lt;br /&gt;    if (TabCount &amp;lt;= 0) return;&lt;br /&gt;    //Draw a custom background for Transparent TabPages&lt;br /&gt;    r = SelectedTab.Bounds;&lt;br /&gt;    StringFormat sf = new StringFormat();&lt;br /&gt;    sf.Alignment = StringAlignment.Center;&lt;br /&gt;    sf.LineAlignment = StringAlignment.Center;&lt;br /&gt;    Font DrawFont = new Font(Font.FontFamily, 24, FontStyle.Regular, GraphicsUnit.Pixel);&lt;br /&gt;    ControlPaint.DrawStringDisabled(e.Graphics, "Micks Ownerdraw TabControl", DrawFont, BackColor, (RectangleF)r, sf);&lt;br /&gt;    DrawFont.Dispose();&lt;br /&gt;    //Draw a border around TabPage&lt;br /&gt;    r.Inflate(3, 3);&lt;br /&gt;    TabPage tp = TabPages[SelectedIndex];&lt;br /&gt;    SolidBrush PaintBrush = new SolidBrush(tp.BackColor);&lt;br /&gt;    e.Graphics.FillRectangle(PaintBrush, r);&lt;br /&gt;    ControlPaint.DrawBorder(e.Graphics, r, PaintBrush.Color, ButtonBorderStyle.Outset);&lt;br /&gt;    //Draw the Tabs&lt;br /&gt;    for (int index = 0; index &amp;lt;= TabCount - 1; index++)&lt;br /&gt;    {&lt;br /&gt;      tp = TabPages[index];&lt;br /&gt;      r = GetTabRect(index);&lt;br /&gt;      ButtonBorderStyle bs = ButtonBorderStyle.Outset;&lt;br /&gt;      if (index == SelectedIndex) bs = ButtonBorderStyle.Inset;&lt;br /&gt;      PaintBrush.Color = tp.BackColor;&lt;br /&gt;      e.Graphics.FillRectangle(PaintBrush, r);&lt;br /&gt;      ControlPaint.DrawBorder(e.Graphics, r, PaintBrush.Color, bs);&lt;br /&gt;      PaintBrush.Color = tp.ForeColor;&lt;br /&gt;      //Set up rotation for left and right aligned tabs&lt;br /&gt;      if (Alignment == TabAlignment.Left || Alignment == TabAlignment.Right)&lt;br /&gt;      {&lt;br /&gt;        float RotateAngle = 90;&lt;br /&gt;        if (Alignment == TabAlignment.Left) RotateAngle = 270;&lt;br /&gt;        PointF cp = new PointF(r.Left + (r.Width &amp;gt;&amp;gt; 1), r.Top + (r.Height &amp;gt;&amp;gt; 1));&lt;br /&gt;        e.Graphics.TranslateTransform(cp.X, cp.Y);&lt;br /&gt;        e.Graphics.RotateTransform(RotateAngle);&lt;br /&gt;        r = new Rectangle(-(r.Height &amp;gt;&amp;gt; 1), -(r.Width &amp;gt;&amp;gt; 1), r.Height, r.Width);&lt;br /&gt;      }&lt;br /&gt;      //Draw the Tab Text&lt;br /&gt;      if (tp.Enabled)&lt;br /&gt;        e.Graphics.DrawString(tp.Text, Font, PaintBrush, (RectangleF)r, sf);&lt;br /&gt;      else&lt;br /&gt;        ControlPaint.DrawStringDisabled(e.Graphics, tp.Text, Font, tp.BackColor, (RectangleF)r, sf);&lt;br /&gt;      &lt;br /&gt;      e.Graphics.ResetTransform();&lt;br /&gt;    }&lt;br /&gt;    PaintBrush.Dispose();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [Description("Occurs as a tab is being changed.")]&lt;br /&gt;    public event SelectedTabPageChangeEventHandler SelectedIndexChanging;&lt;br /&gt;    protected override void WndProc(ref Message m)&lt;br /&gt;    {&lt;br /&gt;    if (m.Msg == (WM_REFLECT + WM_NOTIFY))&lt;br /&gt;    {&lt;br /&gt;      NMHDR hdr = (NMHDR)(Marshal.PtrToStructure(m.LParam, typeof(NMHDR)));&lt;br /&gt;      if (hdr.code == TCN_SELCHANGING)&lt;br /&gt;      {&lt;br /&gt;        TabPage tp = TestTab(PointToClient(Cursor.Position));&lt;br /&gt;        if (tp != null)&lt;br /&gt;        {&lt;br /&gt;        TabPageChangeEventArgs e = new TabPageChangeEventArgs(SelectedTab, tp);&lt;br /&gt;        if (SelectedIndexChanging != null)&lt;br /&gt;          SelectedIndexChanging(this, e);&lt;br /&gt;        if (e.Cancel || tp.Enabled == false)&lt;br /&gt;        {&lt;br /&gt;          m.Result = new IntPtr(1);&lt;br /&gt;          return;&lt;br /&gt;        }&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    base.WndProc (ref m);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private TabPage TestTab(Point pt)&lt;br /&gt;    {&lt;br /&gt;    for (int index = 0; index &amp;lt;= TabCount - 1; index++)&lt;br /&gt;    {&lt;br /&gt;      if (GetTabRect(index).Contains(pt.X, pt.Y))&lt;br /&gt;        return TabPages[index];&lt;br /&gt;    }&lt;br /&gt;    return null;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public class TabPageChangeEventArgs : EventArgs&lt;br /&gt;  {&lt;br /&gt;    private TabPage _Selected = null;&lt;br /&gt;    private TabPage _PreSelected = null;&lt;br /&gt;    public bool Cancel = false;&lt;br /&gt;    public TabPage CurrentTab&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      return _Selected;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public  TabPage NextTab&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      return _PreSelected;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public TabPageChangeEventArgs(TabPage CurrentTab, TabPage NextTab)&lt;br /&gt;    {&lt;br /&gt;    _Selected = CurrentTab;&lt;br /&gt;    _PreSelected = NextTab;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public delegate void SelectedTabPageChangeEventHandler(Object sender, TabPageChangeEventArgs e);&lt;br /&gt;}&lt;br /&gt;        &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;TabControl Second Edition&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/tabs/NewCustomTabControl/NewCustomTabControl.zip"&gt;Download C# and VB.Net Demo Source Code - 181.9 KB&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/tabs/NewCustomTabControl/NewCustomTabControlC__.zip"&gt;Download C++ Dll Source Code - 2.03 MB &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/tabs/NewCustomTabControl/NewCustomTabControlAssembly.zip"&gt;Download Compiled CustomTabControl Assembly - 18.33 KB &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;For more complete examples see the following articles on codeproject:&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/dotnet/CustomTabControl.aspx"&gt;Painting Your Own Tabs - First Edition&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/tabs/NewCustomTabControl.aspx"&gt;Painting Your Own Tabs - Second Edition&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-1010323011729166028?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/1010323011729166028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/create-custom-design-for-tab-control.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1010323011729166028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/1010323011729166028'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/create-custom-design-for-tab-control.html' title='Create Custom  Design for A Tab Control'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-wKJA1kERlhg/TihdNqV2UCI/AAAAAAAAAQk/3q_oQUduGg8/s72-c/Custom+Tab+Control+VB+net+Csharp+Examples.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-2091189206826538512</id><published>2011-07-21T08:33:00.000-07:00</published><updated>2011-07-21T08:37:48.071-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.net'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='TabControl'/><title type='text'>Tab control using custom Tabpages</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;script language="javascript" type="text/javascript"&gt; &lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" type="text/javascript"&gt;function showHideById(id){var el = document.getElementById(id);if(el.style.display == 'none'){el.style.display = ''; }else{el.style.display = 'none'; }}&lt;/script&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-63EWuZPJ010/TihGMk5TL1I/AAAAAAAAAQg/OrworZR2q4w/s1600/Vb+net+Csharp+Tabcontrol+Custom+Tabpages.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Vb net Csharp Tabcontrol Custom Tabpages" border="0" src="http://3.bp.blogspot.com/-63EWuZPJ010/TihGMk5TL1I/AAAAAAAAAQg/OrworZR2q4w/s1600/Vb+net+Csharp+Tabcontrol+Custom+Tabpages.png" title="Vb net Csharp Tabcontrol Custom Tabpages" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This was one of the first projects I tackled in dotnet. The object was to have the tabpages support WindowsXP Visual Style. Adding visual style to an inherited TabPage was simple and after a few attempts I got the TabControl to accept the custom Tabpages via the Collection Editor.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Well since then I have learned a lot and I decided that I would rewrite the control. My goal this time was to get the DesignerVerbs to add the customised Tabpages as well as add an Insert verb. This turned out to be quite a challenge, since the TabControl Designer would not detect mouse clicks on any part of the control that was not a TabPage or TabItem. When I finally found the solution to this problem, as is usually the case, it was very simple to overcome. While I was at it I added an OnselectedIndexChanging event so that Tabpage changes may be cancelled, and a HotTab variable so you can check which tabitem the cursor is currently over. It would have been nice to add Mnemonic support, but that would involve taking full responsibility for painting the TabControl. If I'm going to do this then I may as well write the control from scratch.&lt;br /&gt;The Source Code available both in VB net and CSharp, you can try this:&lt;br /&gt;&lt;h3&gt;VB net Sample:&lt;/h3&gt;&lt;button onclick="showHideById('VBcode')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="VBcode" style="display:none; border: solid 1px blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;Imports System.ComponentModel&lt;br /&gt;Imports System.Drawing.Design&lt;br /&gt;Imports System.ComponentModel.Design&lt;br /&gt;Imports System.Runtime.InteropServices&lt;br /&gt;Namespace Controls&lt;br /&gt;#Region " TabControlEx Class "&lt;br /&gt;  &amp;lt;ToolboxBitmap(GetType(System.Windows.Forms.TabControl)), _&lt;br /&gt;  Designer(GetType(Designers.TabControlExDesigner))&amp;gt; _&lt;br /&gt;  Public Class TabControlEx&lt;br /&gt;    Inherits System.Windows.Forms.TabControl&lt;br /&gt;    Public Event SelectedIndexChanging As TabControlExEventHandler&lt;br /&gt;    Public HotTab As TabPage = Nothing&lt;br /&gt;#Region " Windows Form Designer generated code "&lt;br /&gt;    Public Sub New()&lt;br /&gt;    MyBase.New()&lt;br /&gt;    'This call is required by the Windows Form Designer.&lt;br /&gt;    InitializeComponent()&lt;br /&gt;    'Add any initialization after the InitializeComponent() call&lt;br /&gt;    End Sub&lt;br /&gt;    'UserControl1 overrides dispose to clean up the component list.&lt;br /&gt;    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;    If disposing Then&lt;br /&gt;      If Not (components Is Nothing) Then&lt;br /&gt;        components.Dispose()&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    MyBase.Dispose(disposing)&lt;br /&gt;    End Sub&lt;br /&gt;    'Required by the Windows Form Designer&lt;br /&gt;    Private components As System.ComponentModel.IContainer&lt;br /&gt;    'NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;    'It can be modified using the Windows Form Designer.  &lt;br /&gt;    'Do not modify it using the code editor.&lt;br /&gt;    &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; _&lt;br /&gt;    Private Sub InitializeComponent()&lt;br /&gt;    components = New System.ComponentModel.Container&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;#Region " Properties "&lt;br /&gt;    &amp;lt;Editor(GetType(TabpageExCollectionEditor), GetType(UITypeEditor))&amp;gt; _&lt;br /&gt;    Public Shadows ReadOnly Property TabPages() As TabPageCollection&lt;br /&gt;    Get&lt;br /&gt;      Return MyBase.TabPages&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;#End Region&lt;br /&gt;#Region " TabpageExCollectionEditor "&lt;br /&gt;    Friend Class TabpageExCollectionEditor&lt;br /&gt;    Inherits CollectionEditor&lt;br /&gt;    Public Sub New(ByVal type As System.Type)&lt;br /&gt;      MyBase.new(type)&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Function CreateCollectionItemType() As System.Type&lt;br /&gt;      Return GetType(TabPageEx)&lt;br /&gt;    End Function&lt;br /&gt;    End Class&lt;br /&gt;#End Region&lt;br /&gt;#Region " Interop for SelectedIndexChanging event "&lt;br /&gt;    &amp;lt;StructLayout(LayoutKind.Sequential)&amp;gt; _&lt;br /&gt;    Private Structure NMHDR&lt;br /&gt;    Public HWND As Int32&lt;br /&gt;    Public idFrom As Int32&lt;br /&gt;    Public code As Int32&lt;br /&gt;    Public Overloads Function ToString() As String&lt;br /&gt;      Return String.Format("Hwnd: {0}, ControlID: {1}, Code: {2}", HWND, idFrom, code)&lt;br /&gt;    End Function&lt;br /&gt;    End Structure&lt;br /&gt;    Private Const TCN_FIRST As Int32 = &amp;amp;HFFFFFFFFFFFFFDDA&amp;amp;&lt;br /&gt;    Private Const TCN_SELCHANGING As Int32 = (TCN_FIRST - 2)&lt;br /&gt;    Private Const WM_USER As Int32 = &amp;amp;H400&amp;amp;&lt;br /&gt;    Private Const WM_NOTIFY As Int32 = &amp;amp;H4E&amp;amp;&lt;br /&gt;    Private Const WM_REFLECT As Int32 = WM_USER + &amp;amp;H1C00&amp;amp;&lt;br /&gt;#End Region&lt;br /&gt;#Region " SelectedIndexChanging event Implementation "&lt;br /&gt;    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;br /&gt;    If m.Msg = (WM_REFLECT + WM_NOTIFY) Then&lt;br /&gt;      Dim hdr As NMHDR = DirectCast(Marshal.PtrToStructure(m.LParam, GetType(NMHDR)), NMHDR)&lt;br /&gt;      If hdr.code = TCN_SELCHANGING Then&lt;br /&gt;        If Not HotTab Is Nothing Then&lt;br /&gt;        Dim e As New TabControlExEventArgs(HotTab, Me.Controls.IndexOf(HotTab))&lt;br /&gt;        RaiseEvent SelectedIndexChanging(Me, e)&lt;br /&gt;        If e.Cancel OrElse HotTab.Enabled = False Then&lt;br /&gt;          m.Result = New IntPtr(1)&lt;br /&gt;          Return&lt;br /&gt;        End If&lt;br /&gt;        End If&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    MyBase.WndProc(m)&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;#Region " HotTab Immplementation "&lt;br /&gt;    Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)&lt;br /&gt;    MyBase.OnMouseMove(e)&lt;br /&gt;    HotTab = TestTab(New Point(e.X, e.Y))&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;#Region " Custom Methods "&lt;br /&gt;    Public Sub InsertTabPage(ByVal [tabpage] As TabPage, ByVal [index] As Integer)&lt;br /&gt;    If [index] &amp;lt; 0 Or [index] &amp;gt; TabCount Then&lt;br /&gt;      Throw New ArgumentException("Index out of Range.")&lt;br /&gt;    End If&lt;br /&gt;    TabPages.Add([tabpage])&lt;br /&gt;    If [index] &amp;lt; TabCount - 1 Then&lt;br /&gt;      Do&lt;br /&gt;        SwapTabPages([tabpage], (TabPages(TabPages.IndexOf([tabpage]) - 1)))&lt;br /&gt;      Loop Until TabPages.IndexOf([tabpage]) = [index]&lt;br /&gt;    End If&lt;br /&gt;    SelectedTab = [tabpage]&lt;br /&gt;    End Sub&lt;br /&gt;    Public Sub SwapTabPages(ByVal tp1 As TabPage, ByVal tp2 As TabPage)&lt;br /&gt;    If TabPages.Contains(tp1) = False Or TabPages.Contains(tp2) = False Then&lt;br /&gt;      Throw New ArgumentException("TabPages must be in the TabCotrols TabPageCollection.")&lt;br /&gt;    End If&lt;br /&gt;    Dim Index1 As Integer = TabPages.IndexOf(tp1)&lt;br /&gt;    Dim Index2 As Integer = TabPages.IndexOf(tp2)&lt;br /&gt;    TabPages(Index1) = tp2&lt;br /&gt;    TabPages(Index2) = tp1&lt;br /&gt;    End Sub&lt;br /&gt;    Private Function TestTab(ByVal pt As Point) As TabPage&lt;br /&gt;    For index As Integer = 0 To TabCount - 1&lt;br /&gt;      If GetTabRect(index).Contains(pt.X, pt.Y) Then&lt;br /&gt;        Return TabPages(index)&lt;br /&gt;      End If&lt;br /&gt;    Next&lt;br /&gt;    Return Nothing&lt;br /&gt;    End Function&lt;br /&gt;#End Region&lt;br /&gt;  End Class&lt;br /&gt;#Region " SelectedIndexChanging EventArgs Class/Delegate "&lt;br /&gt;  Public Class TabControlExEventArgs&lt;br /&gt;    Inherits EventArgs&lt;br /&gt;    Private m_TabPage As TabPage = Nothing&lt;br /&gt;    Private m_TabPageIndex As Integer = -1&lt;br /&gt;    Public Cancel As Boolean = False&lt;br /&gt;    Public ReadOnly Property [TabPage]() As TabPage&lt;br /&gt;    Get&lt;br /&gt;      Return m_TabPage&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;    Public ReadOnly Property [TabPageIndex]() As Integer&lt;br /&gt;    Get&lt;br /&gt;      Return m_TabPageIndex&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;    Public Sub New(ByVal [TabPage] As TabPage, ByVal [TabPageIndex] As Integer)&lt;br /&gt;    m_TabPage = [TabPage]&lt;br /&gt;    m_TabPageIndex = [TabPageIndex]&lt;br /&gt;    End Sub&lt;br /&gt;  End Class&lt;br /&gt;  Public Delegate Sub TabControlExEventHandler(ByVal sender As Object, ByVal e As TabControlExEventArgs)&lt;br /&gt;#End Region&lt;br /&gt;#End Region&lt;br /&gt;#Region " TabPageEx Class "&lt;br /&gt;  &amp;lt;Designer(GetType(System.Windows.Forms.Design.ScrollableControlDesigner))&amp;gt; _&lt;br /&gt;  Public Class TabPageEx&lt;br /&gt;    Inherits TabPage&lt;br /&gt;#Region " API Declares "&lt;br /&gt;    &amp;lt;DllImport("Comctl32.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;    Private Overloads Shared Function DllGetVersion(ByRef pdvi As DLLVERSIONINFO) As Integer&lt;br /&gt;    End Function&lt;br /&gt;    &amp;lt;DllImport("uxtheme.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;    Private Overloads Shared Function IsAppThemed() As Boolean&lt;br /&gt;    End Function&lt;br /&gt;    &amp;lt;DllImport("uxtheme.dll", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Unicode)&amp;gt; _&lt;br /&gt;    Private Overloads Shared Function OpenThemeData(ByVal hwnd As IntPtr, ByVal pszClassList As String) As IntPtr&lt;br /&gt;    End Function&lt;br /&gt;    &amp;lt;DllImport("uxtheme.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;    Private Overloads Shared Function GetThemePartSize(ByVal hTheme As IntPtr, ByVal hdc As IntPtr, ByVal iPartId As Integer, ByVal iStateId As Integer, ByRef prc As Rectangle, ByVal eSize As THEMESIZE, ByRef psz As Size) As Integer&lt;br /&gt;    End Function&lt;br /&gt;    &amp;lt;DllImport("uxtheme.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;    Private Overloads Shared Function DrawThemeBackground(ByVal hTheme As IntPtr, ByVal hdc As IntPtr, ByVal iPartId As Integer, ByVal iStateId As Integer, ByRef pRect As Rectangle, ByVal pClipRect As IntPtr) As Integer&lt;br /&gt;    End Function&lt;br /&gt;    &amp;lt;DllImport("uxtheme.dll", CallingConvention:=CallingConvention.Cdecl)&amp;gt; _&lt;br /&gt;    Private Overloads Shared Function CloseThemeData(ByVal htheme As IntPtr) As Integer&lt;br /&gt;    End Function&lt;br /&gt;    Private Structure DLLVERSIONINFO&lt;br /&gt;    Friend cbSize As Integer&lt;br /&gt;    Friend dwMajorVersion As Integer&lt;br /&gt;    Friend dwMinorVersion As Integer&lt;br /&gt;    Friend dwBuildNumber As Integer&lt;br /&gt;    Friend dwPlatformID As Integer&lt;br /&gt;    Public Sub New(ByVal ctrl As Control)&lt;br /&gt;      cbSize = Marshal.SizeOf(GetType(DLLVERSIONINFO))&lt;br /&gt;    End Sub&lt;br /&gt;    End Structure&lt;br /&gt;    Private Enum THEMESIZE As Integer&lt;br /&gt;    TS_MIN&lt;br /&gt;    TS_TRUE&lt;br /&gt;    TS_DRAW&lt;br /&gt;    End Enum&lt;br /&gt;    Private Const TABP_BODY As Integer = 10&lt;br /&gt;    Private Const WM_THEMECHANGED As Integer = &amp;amp;H31A&lt;br /&gt;#End Region&lt;br /&gt;#Region " Properties "&lt;br /&gt;    Private bStyled As Boolean = True&lt;br /&gt;    Private m_Brush As Brush&lt;br /&gt;    Private ReadOnly Property AppIsXPThemed() As Boolean&lt;br /&gt;    'IsAppThemed will return True if the App is not using visual &lt;br /&gt;    'Styles but It's TitleBar is drawn with Visual Style(i.e. a&lt;br /&gt;    'manifest resource has not been supplied). To overcome this&lt;br /&gt;    'problem we must also check which version of ComCtl32.dll is&lt;br /&gt;    'being used. Since ComCtl32.dll version 6 is exclusive to&lt;br /&gt;    'WindowsXP, we do not need to check the OSVersion.&lt;br /&gt;    Get&lt;br /&gt;      Dim dllVer As New DLLVERSIONINFO(Me)&lt;br /&gt;      DllGetVersion(dllVer)&lt;br /&gt;      If dllVer.dwMajorVersion &amp;gt;= 6 Then Return IsAppThemed()&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;    &amp;lt;Category("Appearance"), _&lt;br /&gt;    Description("Enables/Disables Visual Styles on the TabPage. Valid only in WidowsXP."), _&lt;br /&gt;    DefaultValue(True)&amp;gt; _&lt;br /&gt;    Public Property EnableVisualStyles() As Boolean&lt;br /&gt;    Get&lt;br /&gt;      Return bStyled&lt;br /&gt;    End Get&lt;br /&gt;    Set(ByVal Value As Boolean)&lt;br /&gt;      If bStyled = Value Then Return&lt;br /&gt;      bStyled = Value&lt;br /&gt;      Invalidate(True)&lt;br /&gt;    End Set&lt;br /&gt;    End Property&lt;br /&gt;#End Region&lt;br /&gt;#Region " Windows Form Designer generated code "&lt;br /&gt;    Public Sub New()&lt;br /&gt;    MyBase.New()&lt;br /&gt;    'This call is required by the Windows Form Designer.&lt;br /&gt;    InitializeComponent()&lt;br /&gt;    'Add any initialization after the InitializeComponent() call&lt;br /&gt;    End Sub&lt;br /&gt;    Public Sub New(ByVal Text As String)&lt;br /&gt;    MyBase.New()&lt;br /&gt;    MyBase.Text = Text&lt;br /&gt;    End Sub&lt;br /&gt;    'UserControl1 overrides dispose to clean up the component list.&lt;br /&gt;    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)&lt;br /&gt;    If disposing Then&lt;br /&gt;      If Not (components Is Nothing) Then&lt;br /&gt;        components.Dispose()&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    MyBase.Dispose(disposing)&lt;br /&gt;    End Sub&lt;br /&gt;    'Required by the Windows Form Designer&lt;br /&gt;    Private components As System.ComponentModel.IContainer&lt;br /&gt;    'NOTE: The following procedure is required by the Windows Form Designer&lt;br /&gt;    'It can be modified using the Windows Form Designer.  &lt;br /&gt;    'Do not modify it using the code editor.&lt;br /&gt;    &amp;lt;System.Diagnostics.DebuggerStepThrough()&amp;gt; _&lt;br /&gt;    Private Sub InitializeComponent()&lt;br /&gt;    components = New System.ComponentModel.Container&lt;br /&gt;    End Sub&lt;br /&gt;#End Region&lt;br /&gt;    Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)&lt;br /&gt;    If EnableVisualStyles And AppIsXPThemed Then&lt;br /&gt;      If m_Brush Is Nothing Then SetTabBrush()&lt;br /&gt;      'Paint the TabPage with our Brush.&lt;br /&gt;      pevent.Graphics.FillRectangle(m_Brush, Me.ClientRectangle)&lt;br /&gt;    Else&lt;br /&gt;      'Call the default Paint Event.&lt;br /&gt;      MyBase.OnPaintBackground(pevent)&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Private Sub SetTabBrush()&lt;br /&gt;    Dim hdc As IntPtr&lt;br /&gt;    Dim hTheme As IntPtr&lt;br /&gt;    Dim sz As Size&lt;br /&gt;    Dim bmp As Bitmap&lt;br /&gt;    Dim lColor As Integer&lt;br /&gt;    Dim h As Integer = Height&lt;br /&gt;    'Open the theme data for the Tab Class. &lt;br /&gt;    hTheme = OpenThemeData(Handle, "TAB")&lt;br /&gt;    'Get the size of the Active Theme's TabPage Bitmap.&lt;br /&gt;    GetThemePartSize(hTheme, IntPtr.Zero, TABP_BODY, 0, DisplayRectangle, THEMESIZE.TS_TRUE, sz)&lt;br /&gt;    'If the TabPage is taller than the bitmap then we'll get a&lt;br /&gt;    'nasty block efect so we'll check for that and correct.&lt;br /&gt;    If h &amp;gt; sz.Height Then sz.Height = h&lt;br /&gt;    'Create a new bitmap of the correct size.&lt;br /&gt;    bmp = New Bitmap(sz.Width, sz.Height)&lt;br /&gt;    'Create a Graphics object from our bitmap so we can &lt;br /&gt;    'draw to it.&lt;br /&gt;    Dim g As Graphics = Graphics.FromImage(bmp)&lt;br /&gt;    'Get the handle to the Graphics Object's DC for API usage.&lt;br /&gt;    hdc = g.GetHdc 'Hidden member of Graphics&lt;br /&gt;    Dim bmpRect As New Rectangle(0, 0, sz.Width, sz.Height)&lt;br /&gt;    'Draw to the Bitmaps Graphics Object.&lt;br /&gt;    DrawThemeBackground(hTheme, hdc, TABP_BODY, 0, bmpRect, IntPtr.Zero)&lt;br /&gt;    'Release the DC to Windows.&lt;br /&gt;    g.ReleaseHdc(hdc) 'Hidden member of Graphics&lt;br /&gt;    'Close the theme data for the Tab Class.&lt;br /&gt;    CloseThemeData(hTheme)&lt;br /&gt;    'Create a BitmapBrush.&lt;br /&gt;    m_Brush = New TextureBrush(bmp)&lt;br /&gt;    'Clean Up&lt;br /&gt;    bmp.Dispose()&lt;br /&gt;    g.Dispose()&lt;br /&gt;    End Sub&lt;br /&gt;    Private Sub TabpageEx_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Disposed&lt;br /&gt;    'Get rid of the brush if we created one.&lt;br /&gt;    If Not m_Brush Is Nothing Then&lt;br /&gt;      m_Brush.Dispose()&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub OnResize(ByVal eventargs As System.EventArgs)&lt;br /&gt;    MyBase.OnResize(eventargs)&lt;br /&gt;    If AppIsXPThemed Then SetTabBrush()&lt;br /&gt;    End Sub&lt;br /&gt;    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)&lt;br /&gt;    MyBase.WndProc(m)&lt;br /&gt;    If m.Msg = WM_THEMECHANGED Then&lt;br /&gt;      SetTabBrush()&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    ''Have to take responsibility for drawing TabItems for this method to be useful.&lt;br /&gt;    'Protected Overrides Function ProcessMnemonic(ByVal charCode As Char) As Boolean&lt;br /&gt;    '  If IsMnemonic(charCode, Text) Then&lt;br /&gt;    '    DirectCast(Parent, TabControl).SelectedTab = Me&lt;br /&gt;    '    Return True&lt;br /&gt;    '  End If&lt;br /&gt;    '  Return False&lt;br /&gt;    'End Function&lt;br /&gt;  End Class&lt;br /&gt;#End Region&lt;br /&gt;End Namespace&lt;br /&gt;Namespace Designers&lt;br /&gt;  Friend Class TabControlExDesigner&lt;br /&gt;    Inherits System.Windows.Forms.Design.ParentControlDesigner&lt;br /&gt;#Region " Private Instance Variables "&lt;br /&gt;    Private m_verbs As DesignerVerbCollection = New DesignerVerbCollection&lt;br /&gt;    Private m_DesignerHost As IDesignerHost&lt;br /&gt;    Private m_SelectionService As ISelectionService&lt;br /&gt;#End Region&lt;br /&gt;    Public Sub New()&lt;br /&gt;    MyBase.New()&lt;br /&gt;    Dim verb1 As New DesignerVerb("Add Tab", AddressOf OnAddPage)&lt;br /&gt;    Dim verb2 As New DesignerVerb("Insert Tab", AddressOf OnInsertPage)&lt;br /&gt;    Dim verb3 As New DesignerVerb("Remove Tab", AddressOf OnRemovePage)&lt;br /&gt;    m_verbs.AddRange(New DesignerVerb() {verb1, verb2, verb3})&lt;br /&gt;    End Sub&lt;br /&gt;#Region " Properties "&lt;br /&gt;    Public Overrides ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection&lt;br /&gt;    Get&lt;br /&gt;      If m_verbs.Count = 3 Then&lt;br /&gt;        Dim MyControl As Controls.TabControlEx = CType(Me.Control, Controls.TabControlEx)&lt;br /&gt;        If MyControl.TabCount &amp;gt; 0 Then&lt;br /&gt;        m_verbs(1).Enabled = True&lt;br /&gt;        m_verbs(2).Enabled = True&lt;br /&gt;        Else&lt;br /&gt;        m_verbs(1).Enabled = False&lt;br /&gt;        m_verbs(2).Enabled = False&lt;br /&gt;        End If&lt;br /&gt;      End If&lt;br /&gt;      Return m_verbs&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;    Public ReadOnly Property DesignerHost() As IDesignerHost&lt;br /&gt;    Get&lt;br /&gt;      If m_DesignerHost Is Nothing Then&lt;br /&gt;        m_DesignerHost = DirectCast(GetService(GetType(IDesignerHost)), IDesignerHost)&lt;br /&gt;      End If&lt;br /&gt;      Return m_DesignerHost&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;    Public ReadOnly Property SelectionService() As ISelectionService&lt;br /&gt;    Get&lt;br /&gt;      If m_SelectionService Is Nothing Then&lt;br /&gt;        m_SelectionService = DirectCast(getservice(GetType(ISelectionService)), ISelectionService)&lt;br /&gt;      End If&lt;br /&gt;      Return m_SelectionService&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;#End Region&lt;br /&gt;    Sub OnAddPage(ByVal sender As Object, ByVal e As EventArgs)&lt;br /&gt;    Dim ParentControl As Controls.TabControlEx = DirectCast(Control, Controls.TabControlEx)&lt;br /&gt;    Dim oldTabs As Control.ControlCollection = ParentControl.Controls&lt;br /&gt;    RaiseComponentChanging(TypeDescriptor.GetProperties(ParentControl)("TabPages"))&lt;br /&gt;    Dim P As Controls.TabPageEx = DirectCast(DesignerHost.CreateComponent(GetType(Controls.TabPageEx)), Controls.TabPageEx)&lt;br /&gt;    P.Text = P.Name&lt;br /&gt;    ParentControl.TabPages.Add(P)&lt;br /&gt;    RaiseComponentChanged(TypeDescriptor.GetProperties(ParentControl)("TabPages"), oldTabs, ParentControl.TabPages)&lt;br /&gt;    ParentControl.SelectedTab = P&lt;br /&gt;    SetVerbs()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub OnInsertPage(ByVal sender As Object, ByVal e As EventArgs)&lt;br /&gt;    Dim ParentControl As Controls.TabControlEx = DirectCast(Control, Controls.TabControlEx)&lt;br /&gt;    Dim oldTabs As Control.ControlCollection = ParentControl.Controls&lt;br /&gt;    Dim Index As Integer = ParentControl.SelectedIndex&lt;br /&gt;    RaiseComponentChanging(TypeDescriptor.GetProperties(ParentControl)("TabPages"))&lt;br /&gt;    Dim P As Controls.TabPageEx = DirectCast(DesignerHost.CreateComponent(GetType(Controls.TabPageEx)), Controls.TabPageEx)&lt;br /&gt;    P.Text = P.Name&lt;br /&gt;    Dim tpc(ParentControl.TabCount) As TabPage&lt;br /&gt;    'Starting at our Insert Position, store and remove all the tabpages.&lt;br /&gt;    For i As Integer = Index To ParentControl.TabCount - 1&lt;br /&gt;      tpc(i) = ParentControl.TabPages(Index)&lt;br /&gt;      ParentControl.TabPages.Remove(ParentControl.TabPages(Index))&lt;br /&gt;    Next&lt;br /&gt;    'add the tabpage to be inserted.&lt;br /&gt;    ParentControl.TabPages.Add(P)&lt;br /&gt;    'then re-add the original tabpages.&lt;br /&gt;    For i As Integer = Index To UBound(tpc) - 1&lt;br /&gt;      ParentControl.TabPages.Add(tpc(i))&lt;br /&gt;    Next&lt;br /&gt;    RaiseComponentChanged(TypeDescriptor.GetProperties(ParentControl)("TabPages"), oldTabs, ParentControl.TabPages)&lt;br /&gt;    ParentControl.SelectedTab = P&lt;br /&gt;    SetVerbs()&lt;br /&gt;    End Sub&lt;br /&gt;    Sub OnRemovePage(ByVal sender As Object, ByVal e As EventArgs)&lt;br /&gt;    Dim ParentControl As Controls.TabControlEx = DirectCast(Control, Controls.TabControlEx)&lt;br /&gt;    Dim oldTabs As Control.ControlCollection = ParentControl.Controls&lt;br /&gt;    If ParentControl.SelectedIndex &amp;lt; 0 Then Return&lt;br /&gt;    RaiseComponentChanging(TypeDescriptor.GetProperties(ParentControl)("TabPages"))&lt;br /&gt;    DesignerHost.DestroyComponent(ParentControl.TabPages(ParentControl.SelectedIndex))&lt;br /&gt;    RaiseComponentChanged(TypeDescriptor.GetProperties(ParentControl)("TabPages"), oldTabs, ParentControl.TabPages)&lt;br /&gt;    SelectionService.SetSelectedComponents(New IComponent() {ParentControl}, SelectionTypes.Normal)&lt;br /&gt;    SetVerbs()&lt;br /&gt;    End Sub&lt;br /&gt;    Private Sub SetVerbs()&lt;br /&gt;    Dim ParentControl As Controls.TabControlEx = DirectCast(Control, Controls.TabControlEx)&lt;br /&gt;    Select Case ParentControl.TabPages.Count&lt;br /&gt;      Case 0&lt;br /&gt;        Verbs(1).Enabled = False&lt;br /&gt;        Verbs(2).Enabled = False&lt;br /&gt;      Case 1&lt;br /&gt;        Verbs(1).Enabled = False&lt;br /&gt;        Verbs(2).Enabled = True&lt;br /&gt;      Case Else&lt;br /&gt;        Verbs(1).Enabled = True&lt;br /&gt;        Verbs(2).Enabled = True&lt;br /&gt;    End Select&lt;br /&gt;    End Sub&lt;br /&gt;    Private Const WM_NCHITTEST As Integer = &amp;amp;H84&lt;br /&gt;    Private Const HTTRANSPARENT As Integer = -1&lt;br /&gt;    Private Const HTCLIENT As Integer = 1&lt;br /&gt;    Protected Overrides Sub WndProc(ByRef m As Message)&lt;br /&gt;    MyBase.WndProc(m)&lt;br /&gt;    If m.Msg = WM_NCHITTEST Then&lt;br /&gt;      'select tabcontrol when Tabcontrol clicked outside of TabItem.&lt;br /&gt;      If m.Result.ToInt32 = HTTRANSPARENT Then&lt;br /&gt;        m.Result = IntPtr.op_Explicit(HTCLIENT)&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    End Sub&lt;br /&gt;    Private Enum TabControlHitTest&lt;br /&gt;    TCHT_NOWHERE = 1&lt;br /&gt;    TCHT_ONITEMICON = 2&lt;br /&gt;    TCHT_ONITEMLABEL = 4&lt;br /&gt;    TCHT_ONITEM = TCHT_ONITEMICON Or TCHT_ONITEMLABEL&lt;br /&gt;    End Enum&lt;br /&gt;    Private Const TCM_HITTEST As Int32 = &amp;amp;H130D&lt;br /&gt;    Private Structure TCHITTESTINFO&lt;br /&gt;    Public pt As Point&lt;br /&gt;    Public flags As TabControlHitTest&lt;br /&gt;    End Structure&lt;br /&gt;    Protected Overrides Function GetHitTest(ByVal point As System.Drawing.Point) As Boolean&lt;br /&gt;    If (Me.SelectionService.PrimarySelection Is Me.Control) Then&lt;br /&gt;      Dim hti As New TCHITTESTINFO&lt;br /&gt;      hti.pt = Me.Control.PointToClient(point)&lt;br /&gt;      Dim m As New Message&lt;br /&gt;      m.HWnd = Me.Control.Handle&lt;br /&gt;      m.Msg = TCM_HITTEST&lt;br /&gt;      Dim lparam As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(hti))&lt;br /&gt;      Marshal.StructureToPtr(hti, lparam, False)&lt;br /&gt;      m.LParam = lparam&lt;br /&gt;      MyBase.WndProc(m)&lt;br /&gt;      Marshal.FreeHGlobal(lparam)&lt;br /&gt;      If m.Result.ToInt32 &amp;lt;&amp;gt; -1 Then&lt;br /&gt;        Return hti.flags &amp;lt;&amp;gt; TabControlHitTest.TCHT_NOWHERE&lt;br /&gt;      End If&lt;br /&gt;    End If&lt;br /&gt;    Return False&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Protected Overrides Sub OnPaintAdornments(ByVal pe As System.Windows.Forms.PaintEventArgs)&lt;br /&gt;    'Don't want DrawGrid dots.&lt;br /&gt;    End Sub&lt;br /&gt;    'Fix the AllSizable selectiorule on DockStyle.Fill&lt;br /&gt;    Public Overrides ReadOnly Property SelectionRules() As System.Windows.Forms.Design.SelectionRules&lt;br /&gt;    Get&lt;br /&gt;      If Me.Control.Dock = DockStyle.Fill Then&lt;br /&gt;        Return System.Windows.Forms.Design.SelectionRules.Visible&lt;br /&gt;      End If&lt;br /&gt;      Return MyBase.SelectionRules&lt;br /&gt;    End Get&lt;br /&gt;    End Property&lt;br /&gt;  End Class&lt;br /&gt;End Namespace&lt;br /&gt;     &lt;/pre&gt;&lt;/div&gt;&lt;hr /&gt;&lt;h3&gt;Csharp Sample:&lt;/h3&gt;&lt;button onclick="showHideById('CSharp')"&gt;Show/Hide&lt;/button&gt;&lt;br /&gt;&lt;div id="CSharp" style="display:none; border: solid 1px blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; margin: 3px; overflow: scroll;"&gt;&lt;pre style="overflow: scroll; width: 100%;"&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Drawing.Design;&lt;br /&gt;using System.ComponentModel.Design;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;namespace Dotnetrix_Samples&lt;br /&gt;{&lt;br /&gt;  #region TabControlEx Class&lt;br /&gt;  /// &amp;lt;summary&amp;gt;&lt;br /&gt;  /// Summary description for TabControlEx.&lt;br /&gt;  /// &amp;lt;/summary&amp;gt;&lt;br /&gt;  [ToolboxBitmap(typeof(System.Windows.Forms.TabControl)),&lt;br /&gt;  Designer(typeof(Designers.TabControlExDesigner))]&lt;br /&gt;  public class TabControlEx : System.Windows.Forms.TabControl&lt;br /&gt;  {&lt;br /&gt;    /// &amp;lt;summary&amp;gt; &lt;br /&gt;    /// Required designer variable.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private System.ComponentModel.Container components = null;&lt;br /&gt;    public TabControlEx()&lt;br /&gt;    {&lt;br /&gt;    // This call is required by the Windows.Forms Form Designer.&lt;br /&gt;    InitializeComponent();&lt;br /&gt;    // TODO: Add any initialization after the InitializeComponent call&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /// &amp;lt;summary&amp;gt; &lt;br /&gt;    /// Clean up any resources being used.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    protected override void Dispose( bool disposing )&lt;br /&gt;    {&lt;br /&gt;    if( disposing )&lt;br /&gt;    {&lt;br /&gt;      if(components != null)&lt;br /&gt;      {&lt;br /&gt;        components.Dispose();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    base.Dispose( disposing );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public event TabControlExEventHandler SelectedIndexChanging;&lt;br /&gt;    public TabPage HotTab = null;&lt;br /&gt;    #region Component Designer generated code&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Required method for Designer support - do not modify &lt;br /&gt;    /// the contents of this method with the code editor.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private void InitializeComponent()&lt;br /&gt;    {&lt;br /&gt;    components = new System.ComponentModel.Container();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;    #region Properties&lt;br /&gt;    [Editor(typeof(TabpageExCollectionEditor), typeof(UITypeEditor))]&lt;br /&gt;    public new TabPageCollection TabPages&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      return base.TabPages;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    #endregion&lt;br /&gt;    #region TabpageExCollectionEditor&lt;br /&gt;    internal class TabpageExCollectionEditor : CollectionEditor&lt;br /&gt;    {&lt;br /&gt;    public TabpageExCollectionEditor(System.Type type): base(type)&lt;br /&gt;    {&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    protected override Type CreateCollectionItemType()&lt;br /&gt;    {&lt;br /&gt;      return typeof(TabPageEx);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    #endregion&lt;br /&gt;    #region Interop for SelectedIndexChanging event &lt;br /&gt;    [StructLayout(LayoutKind.Sequential)]&lt;br /&gt;    private struct NMHDR&lt;br /&gt;    {&lt;br /&gt;    public IntPtr HWND;&lt;br /&gt;    public uint idFrom;&lt;br /&gt;    public int code;&lt;br /&gt;    public override String ToString()&lt;br /&gt;    {&lt;br /&gt;      return String.Format("Hwnd: {0}, ControlID: {1}, Code: {2}", HWND, idFrom, code);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private const int TCN_FIRST = 0 - 550;       &lt;br /&gt;    private const int TCN_SELCHANGING = (TCN_FIRST - 2);&lt;br /&gt;    &lt;br /&gt;    private const int WM_USER = 0x400;&lt;br /&gt;    private const int WM_NOTIFY = 0x4E;&lt;br /&gt;    private const int WM_REFLECT = WM_USER + 0x1C00;&lt;br /&gt;    &lt;br /&gt;    #endregion&lt;br /&gt;    #region SelectedIndexChanging event Implementation&lt;br /&gt;  &lt;br /&gt;    protected override void WndProc(ref Message m)&lt;br /&gt;    {&lt;br /&gt;    if (m.Msg == (WM_REFLECT + WM_NOTIFY))&lt;br /&gt;    {&lt;br /&gt;      NMHDR hdr = (NMHDR)(Marshal.PtrToStructure(m.LParam, typeof(NMHDR)));&lt;br /&gt;      if (hdr.code == TCN_SELCHANGING)&lt;br /&gt;      {&lt;br /&gt;        if (HotTab != null)&lt;br /&gt;        {&lt;br /&gt;        TabControlExEventArgs e = new TabControlExEventArgs(HotTab, Controls.IndexOf(HotTab));&lt;br /&gt;        if (SelectedIndexChanging != null)&lt;br /&gt;          SelectedIndexChanging(this, e);&lt;br /&gt;        if (e.Cancel || !HotTab.Enabled)&lt;br /&gt;        {&lt;br /&gt;          m.Result = new IntPtr(1);&lt;br /&gt;          return;&lt;br /&gt;        }&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    base.WndProc (ref m);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;    #region HotTab Immplementation&lt;br /&gt;    protected override void OnMouseMove(MouseEventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnMouseMove (e);&lt;br /&gt;    HotTab = TestTab(new Point(e.X, e.Y));&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    #endregion&lt;br /&gt;    #region Custom Methods&lt;br /&gt;    public void InsertTabPage(TabPage tabpage, int index)&lt;br /&gt;    {&lt;br /&gt;    if (index &amp;lt; 0 || index &amp;gt; TabCount)&lt;br /&gt;      throw new ArgumentException("Index out of Range.");&lt;br /&gt;    &lt;br /&gt;    TabPages.Add(tabpage);&lt;br /&gt;    &lt;br /&gt;    if (index &amp;lt; TabCount - 1)&lt;br /&gt;    {&lt;br /&gt;      do&lt;br /&gt;        SwapTabPages(tabpage, (TabPages[TabPages.IndexOf(tabpage) - 1]));&lt;br /&gt;      while (TabPages.IndexOf(tabpage) != index);&lt;br /&gt;    }&lt;br /&gt;    SelectedTab = tabpage;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void SwapTabPages(TabPage tp1, TabPage tp2)&lt;br /&gt;    {&lt;br /&gt;    if (!TabPages.Contains(tp1) || !TabPages.Contains(tp2) )&lt;br /&gt;      throw new ArgumentException("TabPages must be in the TabCotrols TabPageCollection.");&lt;br /&gt;    int Index1 = TabPages.IndexOf(tp1);&lt;br /&gt;    int Index2 = TabPages.IndexOf(tp2);&lt;br /&gt;    TabPages[Index1] = tp2;&lt;br /&gt;    TabPages[Index2] = tp1;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private TabPage TestTab(Point pt)&lt;br /&gt;    {&lt;br /&gt;    for (int index = 0; index &amp;lt;= TabCount - 1; index++)&lt;br /&gt;    {&lt;br /&gt;      if (GetTabRect(index).Contains(pt.X, pt.Y))&lt;br /&gt;        return TabPages[index];&lt;br /&gt;    }&lt;br /&gt;    return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;  }&lt;br /&gt;  #region SelectedIndexChanging EventArgs Class/Delegate&lt;br /&gt;  public class TabControlExEventArgs : EventArgs&lt;br /&gt;  {&lt;br /&gt;    private TabPage m_TabPage = null;&lt;br /&gt;    private int m_TabPageIndex = -1;&lt;br /&gt;    public bool Cancel = false;&lt;br /&gt;    &lt;br /&gt;    public TabPage tabPage&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      return m_TabPage;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public  int TabPageIndex&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      return m_TabPageIndex;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public  TabControlExEventArgs(TabPage tabPage, int TabPageIndex)&lt;br /&gt;    {&lt;br /&gt;    m_TabPage = tabPage;&lt;br /&gt;    m_TabPageIndex = TabPageIndex;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public delegate void TabControlExEventHandler(Object sender, TabControlExEventArgs e);&lt;br /&gt;  #endregion&lt;br /&gt;  #endregion&lt;br /&gt;  #region TabPageEx Class&lt;br /&gt;  [Designer(typeof(System.Windows.Forms.Design.ScrollableControlDesigner))]&lt;br /&gt;  public class TabPageEx : TabPage&lt;br /&gt;  {&lt;br /&gt;    #region API Declares&lt;br /&gt;    [DllImport("Comctl32.dll", CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;    private static extern int DllGetVersion(ref DLLVERSIONINFO pdvi);&lt;br /&gt;    [DllImport("uxtheme.dll", CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;    private static extern bool IsAppThemed();&lt;br /&gt;    [DllImport("uxtheme.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Unicode)]&lt;br /&gt;    private static extern IntPtr OpenThemeData(IntPtr hwnd, String pszClassList);&lt;br /&gt;    [DllImport("uxtheme.dll", CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;    private static extern int GetThemePartSize(IntPtr hTheme, IntPtr hdc, int iPartId, int iStateId, ref Rectangle prc, THEMESIZE eSize, ref Size psz);&lt;br /&gt;    [DllImport("uxtheme.dll", CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;    private static extern int DrawThemeBackground(IntPtr hTheme, IntPtr hdc, int iPartId, int iStateId, ref Rectangle pRect, IntPtr pClipRect);&lt;br /&gt;    [DllImport("uxtheme.dll", CallingConvention=CallingConvention.Cdecl)]&lt;br /&gt;    private static extern int CloseThemeData(IntPtr htheme);&lt;br /&gt;    private struct DLLVERSIONINFO&lt;br /&gt;    {&lt;br /&gt;    public int cbSize;&lt;br /&gt;    public int dwMajorVersion;&lt;br /&gt;    public int dwMinorVersion;&lt;br /&gt;    public int dwBuildNumber;&lt;br /&gt;    public int dwPlatformID;&lt;br /&gt;    public DLLVERSIONINFO(Control ctrl)&lt;br /&gt;    {&lt;br /&gt;      cbSize = Marshal.SizeOf(typeof(DLLVERSIONINFO));&lt;br /&gt;      dwMajorVersion = 0;&lt;br /&gt;      dwMinorVersion = 0;&lt;br /&gt;      dwBuildNumber = 0;&lt;br /&gt;      dwPlatformID = 0;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private enum THEMESIZE&lt;br /&gt;    {&lt;br /&gt;    TS_MIN,&lt;br /&gt;    TS_TRUE,&lt;br /&gt;    TS_DRAW&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private const int TABP_BODY = 10;&lt;br /&gt;    private const int WM_THEMECHANGED= 0x31A;&lt;br /&gt;    &lt;br /&gt;    #endregion&lt;br /&gt;    #region Properties&lt;br /&gt;    private bool bStyled = true;&lt;br /&gt;    private Brush m_Brush;&lt;br /&gt;    private bool AppIsXPThemed&lt;br /&gt;    {&lt;br /&gt;    //IsAppThemed will return True if the App is not using visual&lt;br /&gt;    //Styles but It's TitleBar is drawn with Visual Style(i.e. a&lt;br /&gt;    //manifest resource has not been supplied). To overcome this&lt;br /&gt;    //problem we must also check which version of ComCtl32.dll is&lt;br /&gt;    //being used. Since ComCtl32.dll version 6 is exclusive to&lt;br /&gt;    //WindowsXP, we do not need to check the OSVersion.&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      DLLVERSIONINFO dllVer = new DLLVERSIONINFO(this);&lt;br /&gt;      DllGetVersion(ref dllVer);&lt;br /&gt;      if (dllVer.dwMajorVersion &amp;gt;= 6) return IsAppThemed();&lt;br /&gt;      return false;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [Category("Appearance")]&lt;br /&gt;    [Description("Enables/Disables Visual Styles on the TabPage. Valid only in WidowsXP.")]&lt;br /&gt;    [DefaultValue(true)]&lt;br /&gt;    public bool EnableVisualStyles&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      return bStyled;&lt;br /&gt;    }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;      if (bStyled == value) return;&lt;br /&gt;      bStyled = value;&lt;br /&gt;      Invalidate(true);&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;    /// Required designer variable.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private System.ComponentModel.Container components = null;&lt;br /&gt;    public TabPageEx()&lt;br /&gt;    {&lt;br /&gt;    // This call is required by the Windows.Forms Form Designer.&lt;br /&gt;    InitializeComponent();&lt;br /&gt;    // TODO: Add any initialization after the InitializeComponent call&lt;br /&gt;    }&lt;br /&gt;    public TabPageEx(String Text) : base()&lt;br /&gt;    {&lt;br /&gt;    base.Text = Text;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /// &amp;lt;summary&amp;gt; &lt;br /&gt;    /// Clean up any resources being used.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    protected override void Dispose( bool disposing )&lt;br /&gt;    {&lt;br /&gt;    if( disposing )&lt;br /&gt;    {&lt;br /&gt;      if(components != null)&lt;br /&gt;      {&lt;br /&gt;        components.Dispose();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    base.Dispose( disposing );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #region Component Designer generated code&lt;br /&gt;    /// &amp;lt;summary&amp;gt; &lt;br /&gt;    /// Required method for Designer support - do not modify &lt;br /&gt;    /// the contents of this method with the code editor.&lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;    private void InitializeComponent()&lt;br /&gt;    {&lt;br /&gt;    components = new System.ComponentModel.Container();&lt;br /&gt;    this.Disposed += new EventHandler(TabpageEx_Disposed);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;    protected override void OnPaintBackground(PaintEventArgs pevent)&lt;br /&gt;    {&lt;br /&gt;    if (EnableVisualStyles &amp;amp;&amp;amp; AppIsXPThemed)&lt;br /&gt;    {&lt;br /&gt;      if (m_Brush == null) SetTabBrush();&lt;br /&gt;      //Paint the TabPage with our Brush.&lt;br /&gt;      pevent.Graphics.FillRectangle(m_Brush, ClientRectangle);&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;      //Call the default Paint Event.&lt;br /&gt;    base.OnPaintBackground (pevent);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void SetTabBrush()&lt;br /&gt;    {&lt;br /&gt;    IntPtr hdc;&lt;br /&gt;    IntPtr hTheme;&lt;br /&gt;    Size sz = new Size(0,0); &lt;br /&gt;    Bitmap bmp;&lt;br /&gt;    int h = Height;&lt;br /&gt;    //Open the theme data for the Tab Class.&lt;br /&gt;    hTheme = OpenThemeData(Handle, "TAB");&lt;br /&gt;    //Get the size of the Active Theme's TabPage Bitmap.&lt;br /&gt;    Rectangle displayrect = DisplayRectangle;&lt;br /&gt;    GetThemePartSize(hTheme, IntPtr.Zero, TABP_BODY, 0, ref displayrect, THEMESIZE.TS_TRUE, ref sz);&lt;br /&gt;    //If the TabPage is taller than the bitmap then we'll get a&lt;br /&gt;    //nasty block efect so we'll check for that and correct.&lt;br /&gt;    if (h &amp;gt; sz.Height) sz.Height = h;&lt;br /&gt;    //Create a new bitmap of the correct size.&lt;br /&gt;    bmp = new Bitmap(sz.Width, sz.Height);&lt;br /&gt;    //Create a Graphics object from our bitmap so we can&lt;br /&gt;    //draw to it.&lt;br /&gt;    Graphics g = Graphics.FromImage(bmp);&lt;br /&gt;    //Get the handle to the Graphics Object's DC for API usage.&lt;br /&gt;    hdc = g.GetHdc(); //Hidden member of Graphics&lt;br /&gt;    Rectangle bmpRect = new Rectangle(0, 0, sz.Width, sz.Height);&lt;br /&gt;    //Draw to the Bitmaps Graphics Object.&lt;br /&gt;    DrawThemeBackground(hTheme, hdc, TABP_BODY, 0,ref bmpRect, IntPtr.Zero);&lt;br /&gt;    //Release the DC to Windows.&lt;br /&gt;    g.ReleaseHdc(hdc); //Hidden member of Graphics&lt;br /&gt;    //Close the theme data for the Tab Class.&lt;br /&gt;    CloseThemeData(hTheme);&lt;br /&gt;    //Create a BitmapBrush.&lt;br /&gt;    m_Brush = new TextureBrush(bmp);&lt;br /&gt;    //Clean Up&lt;br /&gt;    bmp.Dispose();&lt;br /&gt;    g.Dispose();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void TabpageEx_Disposed(Object sender, System.EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    //Get rid of the brush if we created one.&lt;br /&gt;    if (m_Brush != null) m_Brush.Dispose();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected override void OnResize(EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    base.OnResize (e);&lt;br /&gt;    if (AppIsXPThemed) SetTabBrush();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected override void WndProc(ref Message m)&lt;br /&gt;    {&lt;br /&gt;    base.WndProc (ref m);&lt;br /&gt;    if (m.Msg == WM_THEMECHANGED)&lt;br /&gt;      SetTabBrush();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //Have to take responsibility for drawing TabItems for this method to be useful.&lt;br /&gt;    //Protected Overrides Function ProcessMnemonic(ByVal charCode As Char) As Boolean&lt;br /&gt;    //  If IsMnemonic(charCode, Text) Then&lt;br /&gt;    //    DirectCast(Parent, TabControl).SelectedTab = Me&lt;br /&gt;    //    Return True&lt;br /&gt;    //  End If&lt;br /&gt;    //  Return False&lt;br /&gt;    //End Function&lt;br /&gt;  }&lt;br /&gt;  #endregion&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;namespace Designers&lt;br /&gt;{&lt;br /&gt;  internal class TabControlExDesigner : System.Windows.Forms.Design.ParentControlDesigner&lt;br /&gt;  {&lt;br /&gt;    #region Private Instance Variables&lt;br /&gt;    private DesignerVerbCollection m_verbs = new DesignerVerbCollection();&lt;br /&gt;    private IDesignerHost m_DesignerHost;&lt;br /&gt;    private ISelectionService m_SelectionService;&lt;br /&gt;    &lt;br /&gt;    #endregion&lt;br /&gt;    public TabControlExDesigner():base()&lt;br /&gt;    {&lt;br /&gt;    DesignerVerb verb1 = new DesignerVerb("Add Tab", new EventHandler(OnAddPage));&lt;br /&gt;    DesignerVerb verb2 = new DesignerVerb("Insert Tab", new EventHandler(OnInsertPage));&lt;br /&gt;    DesignerVerb verb3 = new DesignerVerb("Remove Tab", new EventHandler(OnRemovePage));&lt;br /&gt;    m_verbs.AddRange(new DesignerVerb[] {verb1, verb2, verb3});&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #region Properties&lt;br /&gt;    public override DesignerVerbCollection Verbs&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      if (m_verbs.Count == 3)&lt;br /&gt;      {&lt;br /&gt;        Dotnetrix_Samples.TabControlEx MyControl = (Dotnetrix_Samples.TabControlEx)Control;&lt;br /&gt;        if (MyControl.TabCount &amp;gt; 0 )&lt;br /&gt;        {&lt;br /&gt;        m_verbs[1].Enabled = true;&lt;br /&gt;        m_verbs[2].Enabled = true;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;        m_verbs[1].Enabled = false;&lt;br /&gt;        m_verbs[2].Enabled = false;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      return m_verbs;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public IDesignerHost DesignerHost&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      if (m_DesignerHost == null)&lt;br /&gt;        m_DesignerHost = (IDesignerHost)(GetService(typeof(IDesignerHost)));&lt;br /&gt;      return m_DesignerHost;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public ISelectionService SelectionService&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      if (m_SelectionService == null)&lt;br /&gt;        m_SelectionService = (ISelectionService)(this.GetService(typeof(ISelectionService)));&lt;br /&gt;      return m_SelectionService;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;    void OnAddPage(Object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    Dotnetrix_Samples.TabControlEx ParentControl = (Dotnetrix_Samples.TabControlEx)Control;&lt;br /&gt;    Control.ControlCollection oldTabs = ParentControl.Controls;&lt;br /&gt;    &lt;br /&gt;    RaiseComponentChanging(TypeDescriptor.GetProperties(ParentControl)["TabPages"]);&lt;br /&gt;    &lt;br /&gt;    Dotnetrix_Samples.TabPageEx P = (Dotnetrix_Samples.TabPageEx)(DesignerHost.CreateComponent(typeof(Dotnetrix_Samples.TabPageEx)));&lt;br /&gt;    P.Text = P.Name;&lt;br /&gt;    ParentControl.TabPages.Add(P);&lt;br /&gt;    &lt;br /&gt;    RaiseComponentChanged(TypeDescriptor.GetProperties(ParentControl)["TabPages"], oldTabs, ParentControl.TabPages);&lt;br /&gt;    ParentControl.SelectedTab = P;&lt;br /&gt;    &lt;br /&gt;    SetVerbs();&lt;br /&gt;    &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    void OnInsertPage(Object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    Dotnetrix_Samples.TabControlEx ParentControl = (Dotnetrix_Samples.TabControlEx)Control;&lt;br /&gt;    Control.ControlCollection oldTabs = ParentControl.Controls;&lt;br /&gt;    int Index = ParentControl.SelectedIndex;&lt;br /&gt;     &lt;br /&gt;    RaiseComponentChanging(TypeDescriptor.GetProperties(ParentControl)["TabPages"]);&lt;br /&gt;    Dotnetrix_Samples.TabPageEx P = (Dotnetrix_Samples.TabPageEx)(DesignerHost.CreateComponent(typeof(Dotnetrix_Samples.TabPageEx)));&lt;br /&gt;    P.Text = P.Name;&lt;br /&gt;    &lt;br /&gt;    Dotnetrix_Samples.TabPageEx[] tpc = new Dotnetrix_Samples.TabPageEx[ParentControl.TabCount];&lt;br /&gt;    //Starting at our Insert Position, store and remove all the tabpages.&lt;br /&gt;    for (int i = Index; i &amp;lt;= tpc.Length-1; i++)&lt;br /&gt;    {&lt;br /&gt;      tpc[i] = (Dotnetrix_Samples.TabPageEx)ParentControl.TabPages[Index];&lt;br /&gt;      ParentControl.TabPages.Remove(ParentControl.TabPages[Index]);&lt;br /&gt;    }&lt;br /&gt;    //add the tabpage to be inserted.&lt;br /&gt;    ParentControl.TabPages.Add(P);&lt;br /&gt;    //then re-add the original tabpages.&lt;br /&gt;    for (int i = Index; i &amp;lt;= tpc.Length-1; i++)&lt;br /&gt;    {&lt;br /&gt;      ParentControl.TabPages.Add(tpc[i]);&lt;br /&gt;    }&lt;br /&gt;    RaiseComponentChanged(TypeDescriptor.GetProperties(ParentControl)["TabPages"], oldTabs, ParentControl.TabPages);&lt;br /&gt;    ParentControl.SelectedTab = P;&lt;br /&gt;    &lt;br /&gt;    SetVerbs();&lt;br /&gt;    &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    void OnRemovePage(Object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;    Dotnetrix_Samples.TabControlEx ParentControl  = (Dotnetrix_Samples.TabControlEx)Control;&lt;br /&gt;    Control.ControlCollection oldTabs = ParentControl.Controls;&lt;br /&gt;    &lt;br /&gt;    if (ParentControl.SelectedIndex &amp;lt; 0) return;&lt;br /&gt;    &lt;br /&gt;    RaiseComponentChanging(TypeDescriptor.GetProperties(ParentControl)["TabPages"]);    &lt;br /&gt;    DesignerHost.DestroyComponent(ParentControl.TabPages[ParentControl.SelectedIndex]);&lt;br /&gt;    &lt;br /&gt;    RaiseComponentChanged(TypeDescriptor.GetProperties(ParentControl)["TabPages"], oldTabs, ParentControl.TabPages);&lt;br /&gt;    &lt;br /&gt;    SelectionService.SetSelectedComponents(new IComponent[] {ParentControl}, SelectionTypes.Normal);&lt;br /&gt;    &lt;br /&gt;    SetVerbs();&lt;br /&gt;    &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void SetVerbs()&lt;br /&gt;    {&lt;br /&gt;    Dotnetrix_Samples.TabControlEx ParentControl = (Dotnetrix_Samples.TabControlEx)Control;&lt;br /&gt;    &lt;br /&gt;    switch (ParentControl.TabPages.Count)&lt;br /&gt;    {&lt;br /&gt;      case 0:&lt;br /&gt;        Verbs[1].Enabled = false;&lt;br /&gt;        Verbs[2].Enabled = false;&lt;br /&gt;        break;&lt;br /&gt;      case 1:&lt;br /&gt;        Verbs[1].Enabled = false;&lt;br /&gt;        Verbs[2].Enabled = true;&lt;br /&gt;        break;&lt;br /&gt;      default:&lt;br /&gt;        Verbs[1].Enabled = true;&lt;br /&gt;        Verbs[2].Enabled = true;&lt;br /&gt;        break;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private const int WM_NCHITTEST = 0x84;&lt;br /&gt;    &lt;br /&gt;    private const int HTTRANSPARENT = -1;&lt;br /&gt;    private const int HTCLIENT = 1;&lt;br /&gt;    &lt;br /&gt;    protected override void WndProc(ref Message m)&lt;br /&gt;    {&lt;br /&gt;    base.WndProc (ref m);&lt;br /&gt;    if (m.Msg == WM_NCHITTEST)&lt;br /&gt;    {&lt;br /&gt;      //select tabcontrol when Tabcontrol clicked outside of TabItem.&lt;br /&gt;      if (m.Result.ToInt32() == HTTRANSPARENT)&lt;br /&gt;        m.Result = (IntPtr)HTCLIENT;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;    private enum TabControlHitTest&lt;br /&gt;    {&lt;br /&gt;    TCHT_NOWHERE = 1,&lt;br /&gt;    TCHT_ONITEMICON = 2,&lt;br /&gt;    TCHT_ONITEMLABEL = 4,&lt;br /&gt;    TCHT_ONITEM = TCHT_ONITEMICON | TCHT_ONITEMLABEL&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    private const int TCM_HITTEST = 0x130D;&lt;br /&gt;    &lt;br /&gt;    private struct TCHITTESTINFO&lt;br /&gt;    {&lt;br /&gt;    public Point pt;&lt;br /&gt;    public TabControlHitTest flags;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    protected override bool GetHitTest(Point point)&lt;br /&gt;    {&lt;br /&gt;    if (this.SelectionService.PrimarySelection == this.Control)&lt;br /&gt;    {&lt;br /&gt;      TCHITTESTINFO hti =new TCHITTESTINFO();&lt;br /&gt;      &lt;br /&gt;      hti.pt = this.Control.PointToClient(point);&lt;br /&gt;      hti.flags = 0;&lt;br /&gt;      Message m = new Message();&lt;br /&gt;      m.HWnd = this.Control.Handle;&lt;br /&gt;      m.Msg = TCM_HITTEST;&lt;br /&gt;      &lt;br /&gt;      IntPtr lparam = Marshal.AllocHGlobal(Marshal.SizeOf(hti));&lt;br /&gt;      Marshal.StructureToPtr(hti, lparam, false);&lt;br /&gt;      m.LParam = lparam;&lt;br /&gt;      &lt;br /&gt;      base.WndProc(ref m);&lt;br /&gt;      Marshal.FreeHGlobal(lparam);&lt;br /&gt;      &lt;br /&gt;      if (m.Result.ToInt32() != -1)&lt;br /&gt;        return hti.flags != TabControlHitTest.TCHT_NOWHERE;&lt;br /&gt;      &lt;br /&gt;    }&lt;br /&gt;    return false;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    protected override void OnPaintAdornments(PaintEventArgs pe)&lt;br /&gt;    {&lt;br /&gt;    //Don't want DrawGrid dots.&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    //Fix the AllSizable selectiorule on DockStyle.Fill&lt;br /&gt;    public override System.Windows.Forms.Design.SelectionRules SelectionRules&lt;br /&gt;    {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;      if (Control.Dock == DockStyle.Fill)&lt;br /&gt;        return System.Windows.Forms.Design.SelectionRules.Visible;&lt;br /&gt;      return base.SelectionRules;&lt;br /&gt;    }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;        &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;By: &lt;a href="http://dotnetrix.co.uk/"&gt;Mick Doherty's&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-2091189206826538512?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/2091189206826538512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/tabcontrol-using-custom-tabpages.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/2091189206826538512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/2091189206826538512'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/tabcontrol-using-custom-tabpages.html' title='Tab control using custom Tabpages'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-63EWuZPJ010/TihGMk5TL1I/AAAAAAAAAQg/OrworZR2q4w/s72-c/Vb+net+Csharp+Tabcontrol+Custom+Tabpages.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-3102489634476638185</id><published>2011-07-19T09:13:00.000-07:00</published><updated>2011-07-19T09:18:02.507-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multimedia'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Photoshop'/><title type='text'>Simple Way to Create Glow Text Effect Photoshop</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7V_NBLQgEGI/TiWYNkHDygI/AAAAAAAAAP8/cejD9EDO1oM/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-Finish1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7V_NBLQgEGI/TiWYNkHDygI/AAAAAAAAAP8/cejD9EDO1oM/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-Finish1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="240" src="http://2.bp.blogspot.com/-7V_NBLQgEGI/TiWYNkHDygI/AAAAAAAAAP8/cejD9EDO1oM/s320/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-Finish1.gif" title="blending Glow Text Effect Photoshop cs5" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;This text effect is created with &lt;b&gt;photoshop CS5&lt;/b&gt;, and you can also do it with Older Photoshop version (&lt;b&gt;photoshop CS3&lt;/b&gt;,&lt;b&gt; photoshop CS4&lt;/b&gt;).in professional design, this design is still simple. But you can make it more than SIMPLE!&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Consider the following steps:&lt;br /&gt;&lt;br /&gt;First, open your &lt;b&gt;photoshop &lt;/b&gt;program, and make new image, Look at the picture. I use 640X320, you can change as you want :-)&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BBd3bpUZuf8/TiWX9ik8-GI/AAAAAAAAAPM/WReSpQFjloU/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" src="http://3.bp.blogspot.com/-BBd3bpUZuf8/TiWX9ik8-GI/AAAAAAAAAPM/WReSpQFjloU/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-1.jpg" title="blending Glow Text Effect Photoshop cs5" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now convert your &lt;b&gt;background &lt;/b&gt;to a &lt;b&gt;layer&lt;/b&gt;:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-s8PEW_UtfuI/TiWX-dPbmXI/AAAAAAAAAPQ/B0NRZwQB_R0/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" src="http://1.bp.blogspot.com/-s8PEW_UtfuI/TiWX-dPbmXI/AAAAAAAAAPQ/B0NRZwQB_R0/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-2.gif" title="blending Glow Text Effect Photoshop cs5" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Change &lt;/b&gt;the color&amp;nbsp; of &lt;b&gt;background &lt;/b&gt;layer:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9lqTV5-bYaw/TiWX_2J5HEI/AAAAAAAAAPY/XqqoHWxuuaQ/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-4.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="380" src="http://1.bp.blogspot.com/-9lqTV5-bYaw/TiWX_2J5HEI/AAAAAAAAAPY/XqqoHWxuuaQ/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-4.gif" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Fs_F1Pevaew/TiWX7xdKMYI/AAAAAAAAAPI/K_NyfkeMCXo/s1600/Change-The-Background-color-to-glow-the-text.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="271" src="http://4.bp.blogspot.com/-Fs_F1Pevaew/TiWX7xdKMYI/AAAAAAAAAPI/K_NyfkeMCXo/s400/Change-The-Background-color-to-glow-the-text.jpg" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;then, your canvas will ne look like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-5PCpw5rg9-s/TiWYBhgxZzI/AAAAAAAAAPc/MHGhdtlV_EI/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-6.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="346" src="http://3.bp.blogspot.com/-5PCpw5rg9-s/TiWYBhgxZzI/AAAAAAAAAPc/MHGhdtlV_EI/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-6.gif" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;Now, use the TextTool and make some text, this a sample that I make:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-JXteSSB2x9w/TiWYDdaXbVI/AAAAAAAAAPg/oZh5edBlP9c/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-7.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="167" src="http://2.bp.blogspot.com/-JXteSSB2x9w/TiWYDdaXbVI/AAAAAAAAAPg/oZh5edBlP9c/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-7.gif" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;next, Set the &lt;b&gt;blending &lt;/b&gt;to make text &lt;b&gt;Glowing&lt;/b&gt;. this is the main step of what do you doing&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-f5PundZeTJY/TiWYETK4QrI/AAAAAAAAAPk/kOWpwtkRotU/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-8.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="320" src="http://1.bp.blogspot.com/-f5PundZeTJY/TiWYETK4QrI/AAAAAAAAAPk/kOWpwtkRotU/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-8.gif" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;Hey!, &lt;span style="font-size: large;"&gt;&lt;b&gt;Follow the pictures correctly one by one&lt;/b&gt;&lt;/span&gt;, and you will get your text is glowing:&lt;br /&gt;At first time you see the blending windows (after right click text layer -&amp;gt; Blending Option)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-igy9zg7FxjM/TiWYFjHGd5I/AAAAAAAAAPo/uuoYCaGHPak/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="310" src="http://2.bp.blogspot.com/-igy9zg7FxjM/TiWYFjHGd5I/AAAAAAAAAPo/uuoYCaGHPak/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-9.jpg" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Set Blending: Outer Glow&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-H9z3ZCsoU1E/TiWYHjvjtLI/AAAAAAAAAPs/RUwfcnUDHFc/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="310" src="http://4.bp.blogspot.com/-H9z3ZCsoU1E/TiWYHjvjtLI/AAAAAAAAAPs/RUwfcnUDHFc/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-10.jpg" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Set Blending: Inner Glow&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-lcVYpAEVN2c/TiWYJPaldwI/AAAAAAAAAPw/xJun7I3GpL0/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="310" src="http://4.bp.blogspot.com/-lcVYpAEVN2c/TiWYJPaldwI/AAAAAAAAAPw/xJun7I3GpL0/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-11.jpg" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Set Blending: Color Overlay&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-J5_I88rRc0k/TiWYKZFy6ZI/AAAAAAAAAP0/bqSYICXIXKM/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="310" src="http://3.bp.blogspot.com/-J5_I88rRc0k/TiWYKZFy6ZI/AAAAAAAAAP0/bqSYICXIXKM/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-12.jpg" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This is Optional, This to make the light appear uneven, by set the &lt;b&gt;Gradient Overlay Blending&lt;/b&gt;, and play the &lt;b&gt;opacity&lt;/b&gt;:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-K-p8aLvFK3o/TiWYMnSBupI/AAAAAAAAAP4/v6D6lAdQo18/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="310" src="http://4.bp.blogspot.com/-K-p8aLvFK3o/TiWYMnSBupI/AAAAAAAAAP4/v6D6lAdQo18/s400/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-13.jpg" title="blending Glow Text Effect Photoshop cs5" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;And Then, Press "OK" button, and you can see what you get! Maybe something like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7V_NBLQgEGI/TiWYNkHDygI/AAAAAAAAAP8/cejD9EDO1oM/s1600/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-Finish1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="240" src="http://2.bp.blogspot.com/-7V_NBLQgEGI/TiWYNkHDygI/AAAAAAAAAP8/cejD9EDO1oM/s320/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-Finish1.gif" title="blending Glow Text Effect Photoshop cs5" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You can doing more, for sample, I was adding new layer in the behind of the text layer, and I use brush tool to make text more glowing. the brush opacity should be small, like 10% or more, and use the light color, white or bright blue. Spray the brush slowly. And I get some like this (Click to large):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MCbhXOJowsE/TiWs-t9SrOI/AAAAAAAAAQA/J3hoXUPMmGw/s1600/Finish.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="blending Glow Text Effect Photoshop cs5" border="0" height="240" src="http://2.bp.blogspot.com/-MCbhXOJowsE/TiWs-t9SrOI/AAAAAAAAAQA/J3hoXUPMmGw/s320/Finish.jpg" title="blending Glow Text Effect Photoshop cs5" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-3102489634476638185?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/3102489634476638185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/simple-way-to-create-glow-text-effect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/3102489634476638185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/3102489634476638185'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/simple-way-to-create-glow-text-effect.html' title='Simple Way to Create Glow Text Effect Photoshop'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-7V_NBLQgEGI/TiWYNkHDygI/AAAAAAAAAP8/cejD9EDO1oM/s72-c/Simple-Way-to-Create-Glow-Text-Effect-Photoshop-Finish1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-3168922788193195779</id><published>2011-07-18T10:04:00.000-07:00</published><updated>2011-07-18T10:04:47.978-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Article'/><title type='text'>About Windows Aero Glass Design</title><content type='html'>&lt;b&gt;What is Windows Aero?&lt;/b&gt;&lt;br /&gt;&lt;div class="para"&gt;&lt;span class="notLocalizable"&gt;Windows&lt;/span&gt; Aero is the premium visual experience of &lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt;. It features a translucent glass design with subtle window animations and new window colors.&lt;/div&gt;&lt;div class="example"&gt;&lt;div class="para"&gt;&lt;/div&gt;&lt;div class="embedObject" style="width: 260px;"&gt;&lt;img alt="Picture of the desktop" class="embedObject" height="209" id="pageContainer0_ID0EQAAC" src="http://res1.windows.microsoft.com/resbox/en/Windows%20Vista/main/e/8/e880e61b-89b6-4b51-ae52-bf963802b643/e880e61b-89b6-4b51-ae52-bf963802b643.png" title="Picture of the desktop" width="260" /&gt;&lt;span class="caption"&gt;             &lt;span class="notLocalizable"&gt;Windows&lt;/span&gt; Aero features glass-like windows for an open look&lt;/span&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="para"&gt;Aero’s distinctive visual style combines the  appearance of lightweight, translucent windows with powerful graphic  advances. With Aero, you can enjoy visually appealing effects and  appearance and also benefit from better access to your programs.&lt;/div&gt;&lt;div class="section sectionNormal"&gt;&lt;h2 class="title_section"&gt;Glass effects&lt;/h2&gt;&lt;div class=""&gt;&lt;div class="example"&gt;&lt;div class="para"&gt;&lt;/div&gt;&lt;div class="embedObject" style="width: 212px;"&gt;&lt;img alt="Picture of a translucent window" class="embedObject" height="282" id="pageContainer0_ID0ENBAC" src="http://res2.windows.microsoft.com/resbox/en/Windows%20Vista/main/7/d/7d9ac517-97f1-4902-b374-68f225565b2e/7d9ac517-97f1-4902-b374-68f225565b2e.png" title="Picture of a translucent window" width="212" /&gt;&lt;span class="caption"&gt;Translucent glass windows create depth on the desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="para"&gt;One of Aero’s more visually obvious features is  glass window borders, which let you focus on the contents of your open  windows. Window behavior has also been redesigned, with subtle  animations accompanying the minimizing, maximizing, and repositioning of  windows to appear more smooth and effortless. &lt;/div&gt;&lt;div class="example"&gt;&lt;div class="para"&gt;&lt;/div&gt;&lt;div class="embedObject" style="width: 260px;"&gt;&lt;img alt="Picture of window frame colors" class="embedObject" height="58" id="pageContainer0_ID0EBCAC" src="http://res1.windows.microsoft.com/resbox/en/Windows%20Vista/main/6/2/629c8e89-6125-4c55-bbdf-a8171d1d466f/629c8e89-6125-4c55-bbdf-a8171d1d466f.png" title="Picture of window frame colors" width="260" /&gt;&lt;span class="caption"&gt;Tint your windows using the provided colors, or mix your own custom color&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="para"&gt;You can even fine-tune the color and appearance  of windows, the Start menu, and the taskbar by tinting your translucent  windows. Select one of the provided colors, or create your own custom  color using the color mixer.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="section sectionNormal"&gt;&lt;h2 class="title_section"&gt;Switching between programs&lt;/h2&gt;&lt;div class=""&gt;&lt;div class="example"&gt;&lt;div class="para"&gt;&lt;/div&gt;&lt;div class="embedObject" style="width: 260px;"&gt;&lt;img alt="Picture of Flip 3D effect" class="embedObject" height="209" id="pageContainer0_ID0E2CAC" src="http://res1.windows.microsoft.com/resbox/en/Windows%20Vista/main/c/7/c7507caf-e2f4-48c9-9e68-eb124737de9d/c7507caf-e2f4-48c9-9e68-eb124737de9d.png" title="Picture of Flip 3D effect" width="260" /&gt;&lt;span class="caption"&gt;                 &lt;span class="notLocalizable"&gt;Windows&lt;/span&gt; Flip 3D&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="para"&gt;Part of the &lt;span class="notLocalizable"&gt;Windows&lt;/span&gt; Aero experience is &lt;span class="notLocalizable"&gt;Windows&lt;/span&gt;  Flip 3D, which is a way to arrange your open windows in a  three-dimensional stack that you can quickly flip through without having  to click the taskbar.&lt;/div&gt;&lt;div class="example"&gt;&lt;div class="para"&gt;&lt;/div&gt;&lt;div class="embedObject" style="width: 260px;"&gt;&lt;img alt="Picture of a thumbnail preview on the taskbar" class="embedObject" height="120" id="pageContainer0_ID0E5DAC" src="http://res1.windows.microsoft.com/resbox/en/Windows%20Vista/main/f/4/f439bfcf-ae30-4083-8499-45bf90a1a0d4/f439bfcf-ae30-4083-8499-45bf90a1a0d4.png" title="Picture of a thumbnail preview on the taskbar" width="260" /&gt;&lt;span class="caption"&gt;Pointing to a window's taskbar button displays a preview of the window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="para"&gt;Aero also includes taskbar previews for your  open windows. When you point to a taskbar button, you'll see a  thumbnail-sized preview of the window, whether the content of the window  is a document, a photo, or even a running video.&lt;/div&gt;&lt;div class="example"&gt;&lt;div class="para"&gt;&lt;/div&gt;&lt;div class="embedObject" style="width: 260px;"&gt;&lt;img alt="Picture of the ALT+TAB program switcher" class="embedObject" height="81" id="pageContainer0_ID0E1EAC" src="http://res1.windows.microsoft.com/resbox/en/Windows%20Vista/main/2/e/2e566313-412d-4101-adf5-5682b8dce517/2e566313-412d-4101-adf5-5682b8dce517.png" title="Picture of the ALT+TAB program switcher" width="260" /&gt;&lt;span class="caption"&gt;Switching windows with ALT+TAB&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="para"&gt;Even the method of pressing ALT+TAB  for  switching windows has been giving an update. Instead of simple icons,  you can see live previews of the windows for each open program.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class="title_section"&gt;How do I get &lt;span class="notLocalizable"&gt;Windows&lt;/span&gt; Aero?&lt;/h2&gt;&lt;div class="para"&gt;The following editions of &lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt; include Aero:&lt;/div&gt;&lt;ul class="unordered"&gt;&lt;li class="listItem"&gt;             &lt;div class="para"&gt;&lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt; Business&lt;/div&gt;&lt;/li&gt;&lt;li class="listItem"&gt;             &lt;div class="para"&gt;&lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt; Enterprise&lt;/div&gt;&lt;/li&gt;&lt;li class="listItem"&gt;             &lt;div class="para"&gt;&lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt; Home Premium&lt;/div&gt;&lt;/li&gt;&lt;li class="listItem"&gt;             &lt;div class="para"&gt;&lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt; Ultimate&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="para"&gt;Aero is not included in &lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt; Home Basic. You can find out which edition of &lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt;  you have on your computer by opening Welcome Center.&lt;/div&gt;&lt;div class="para"&gt;&lt;span class="phrase"&gt;Open Welcome Center by clicking the &lt;span class="ui"&gt;Start&lt;/span&gt; button &lt;img alt="Picture of the Start button" class="embedObject" height="15" id="pageContainer0_ID0ESHAC" src="http://res2.windows.microsoft.com/resbox/en/Windows%20Vista/main/4/f/4f6cbd09-148c-4dd8-b1f2-48f232a2fd33/4f6cbd09-148c-4dd8-b1f2-48f232a2fd33.png" title="Picture of the Start button" width="15" /&gt;, clicking &lt;span class="ui"&gt;Control Panel&lt;/span&gt;, clicking &lt;span class="ui"&gt;System and Maintenance&lt;/span&gt;, and then clicking &lt;span class="ui"&gt;Welcome Center&lt;/span&gt;.&lt;/span&gt;         &lt;/div&gt;&lt;div class="para"&gt;The edition of &lt;span class="notLocalizable"&gt;Windows&amp;nbsp;Vista&lt;/span&gt; you're running is displayed with your computer details near the top of the window.&lt;/div&gt;&lt;div class="para"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="para" style="text-align: right;"&gt;&lt;i&gt;Source: &lt;a href="http://windows.microsoft.com/en-US/windows-vista/What-is-Windows-Aero"&gt;Microsoft&lt;/a&gt;&lt;/i&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-3168922788193195779?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/3168922788193195779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/about-windows-aero-glass-design.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/3168922788193195779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/3168922788193195779'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/about-windows-aero-glass-design.html' title='About Windows Aero Glass Design'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1847278434515420457.post-854389209704973185</id><published>2011-07-17T10:54:00.000-07:00</published><updated>2011-07-17T10:54:53.346-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>MsSql Trigger Sample (SQL Server)</title><content type='html'>A trigger is a database object that is &lt;em&gt;attached&lt;/em&gt; to a table. In  many aspects it is similar to a stored procedure. As a matter of fact,  triggers are often referred to as a "special kind of stored procedure."  The main difference between a trigger and a stored procedure is that the  former is attached to a table and is only &lt;em&gt;fired&lt;/em&gt; when an INSERT, UPDATE or DELETE occurs. You specify the modification action(s) that fire the trigger when it is created.  &lt;a name='more'&gt;&lt;/a&gt;The following shows how to create a trigger that displays the current system time when a row is inserted into the table to which it is attached.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;SET NOCOUNT ON&lt;br /&gt;&lt;br /&gt;CREATE TABLE Source (Sou_ID int IDENTITY, Sou_Desc varchar(10))&lt;br /&gt;go&lt;br /&gt;CREATE TRIGGER tr_Source_INSERT&lt;br /&gt;ON Source&lt;br /&gt;FOR INSERT&lt;br /&gt;AS&lt;br /&gt;PRINT GETDATE()&lt;br /&gt;go&lt;br /&gt;INSERT Source (Sou_Desc) VALUES ('Test 1')&lt;br /&gt;&lt;br /&gt;-- Results --&lt;br /&gt;&lt;br /&gt;Apr 28 2001  9:56AM&lt;/span&gt;&lt;/pre&gt;This example is shown for illustrative purposes only. I'll cover an  example later in the article that shows a real-world world use of  triggers.  &lt;br /&gt;&lt;h4 class="Title"&gt;When to Use Triggers&lt;/h4&gt;There are more than a handful of developers who are not real clear  when triggers should be used. I only use them when I need to perform a  certain action as a result of an INSERT, UPDATE or DELETE and ad hoc SQL  (aka SQL Passthrough) is used. I implement most of my data manipulation  code via stored procedures and when you do this the trigger  functionality can be moved into the procedure. For example, let's say  you want to send an email to the Sales Manager when an order is entered  whose priority is high. When ad hoc SQL is used to insert the Orders  row, a trigger is used to determine the OrderPriority and send the email  when the criteria is met. The following shows a partial code listing of  what this looks like.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;CREATE TABLE Orders (Ord_ID int IDENTITY, Ord_Priority varchar(10))&lt;br /&gt;go&lt;br /&gt;CREATE TRIGGER tr_Orders_INSERT&lt;br /&gt;ON Orders&lt;br /&gt;FOR INSERT&lt;br /&gt;AS&lt;br /&gt;IF (SELECT COUNT(*) FROM inserted WHERE Ord_Priority = 'High') = 1&lt;br /&gt; BEGIN&lt;br /&gt;  PRINT 'Email Code Goes Here'&lt;br /&gt; END&lt;br /&gt;go&lt;br /&gt;INSERT Orders (Ord_Priority) VALUES ('High')&lt;br /&gt;&lt;br /&gt;-- Results --&lt;br /&gt;&lt;br /&gt;Email Code Goes Here&lt;/span&gt;&lt;/pre&gt;When the stored procedure approach is used you can move the trigger code into the procedure and it looks like this.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;CREATE PROCEDURE ps_Orders_INSERT&lt;br /&gt;@Ord_Priority varchar(10)&lt;br /&gt;AS&lt;br /&gt;BEGIN TRANSACTION&lt;br /&gt; INSERT Orders (Ord_Priority) VALUES (@Ord_Priority)&lt;br /&gt;&lt;br /&gt; IF @@ERROR &amp;lt;&amp;gt; 0&lt;br /&gt;  GOTO ErrorCode&lt;br /&gt;&lt;br /&gt; IF @Ord_Priority = 'High'&lt;br /&gt;  PRINT 'Email Code Goes Here'&lt;br /&gt;&lt;br /&gt;COMMIT TRANSACTION&lt;br /&gt;&lt;br /&gt;ErrorCode:&lt;br /&gt; IF @@TRANCOUNT &amp;lt;&amp;gt; 0&lt;br /&gt;  PRINT 'Error Code'&lt;br /&gt;go&lt;/span&gt;&lt;/pre&gt;Let's take a look at the trigger example. The first thing you probably noticed is that the SELECT references a table called &lt;em&gt;inserted&lt;/em&gt;. Triggers make use of two special tables called &lt;b&gt;inserted&lt;/b&gt; and &lt;b&gt;deleted&lt;/b&gt;.  The inserted table contains the data referenced in an INSERT before it  is actually committed to the database. The deleted table contains the  data in the underlying table referenced in a DELETE before it is  actually removed from the database. When an UPDATE is issued both tables  are used. More specifically, the &lt;em&gt;new&lt;/em&gt; data referenced in the UPDATE statement is contained in inserted and the data that is being updated is contained in deleted.  &lt;br /&gt;The example makes an assumption about how data is going to be  added to the table. The IF statement is looking for a count of 1. This  means the trigger assumes only one row will be added to the table at a  time. If more than one row is added to the table in a single statement  you may miss an order with a High priority because the trigger only  fires once for each associated statement. I realize this may sound a  little confusing so let's take a look at two more examples. The  following shows that the trigger fires for each INSERT statement  executed.   &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;INSERT Orders (Ord_Priority) VALUES ('High')&lt;br /&gt;INSERT Orders (Ord_Priority) VALUES ('High')&lt;br /&gt;&lt;br /&gt;-- Results --&lt;br /&gt;&lt;br /&gt;Email Code Goes Here&lt;br /&gt;&lt;br /&gt;Email Code Goes Here&lt;/span&gt;&lt;/pre&gt;Now we have three rows in Orders whose Ord_Priority is High. Let's  insert new rows based on the current contents of Orders to show how a  trigger behaves when a multi-row statement is executed.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;INSERT Orders&lt;br /&gt;SELECT Ord_Priority FROM Orders&lt;/span&gt;&lt;/pre&gt;The 'Email Code Here' message is not displayed even though three new  rows were added with a priority of High because the IF statement  criteria was not satisfied. A trigger fires only once per statement, so  the actual COUNT(*) associated with the INSERT is 3. The following shows  how to modify the code to handle a multi-row INSERT.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;ALTER TRIGGER tr_Orders_INSERT&lt;br /&gt;ON Orders&lt;br /&gt;FOR INSERT&lt;br /&gt;AS&lt;br /&gt;IF EXISTS (SELECT * FROM inserted WHERE Ord_Priority = 'High')&lt;br /&gt; BEGIN&lt;br /&gt;  DECLARE @Count tinyint&lt;br /&gt;  SET @Count = (SELECT COUNT(*) FROM inserted WHERE Ord_Priority = 'High')&lt;br /&gt;  PRINT CAST(@Count as varchar(3))+' row(s) with a priority of High were entered'&lt;br /&gt; END&lt;br /&gt;go&lt;/span&gt;&lt;/pre&gt;We can test the code using the same INSERT with a SELECT as follows.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;INSERT Orders&lt;br /&gt;SELECT Ord_Priority FROM Orders&lt;br /&gt;&lt;br /&gt;-- Results --&lt;br /&gt;&lt;br /&gt;12 row(s) with a priority of High were entered&lt;/span&gt;&lt;/pre&gt;&lt;h4 class="Title"&gt;A Real-World Example&lt;/h4&gt;Those of you familiar with web site management know that counting the  traffic on a site is key in determining which areas of the site are  being used. Internet Information Server (IIS) has logging capabilities  that tracks a number of attributes associated with each visitor. For  example, every time a visitor accesses a page on a site that page and  the user's information is logged. By default the data is logged in a  text file, but you can alter the default behavior and log the data to an  ODBC-compliant data store.  &lt;br /&gt;I used this approach for a client a while back because they  wanted a simple way to track the activity for each major area of their  site. A major area was defined as the sections listed on the site's main  navigation bar (e.g., Home, About Us, Services, ...). The goal was to  produce a report that showed the number of visits to each of the main  areas of the site on a per month basis.  A few of you may be wondering  why a trigger is needed to implement this solution. After all, a SELECT  with a WHERE clause to filter the date range and GROUP BY to count the  instances per page will do the trick and no triggers are needed.  &lt;br /&gt;The reason I decided to use a trigger-based solution had to do  with the unacceptable execution time of the report. Even on a  low-traffic site the number of rows in the logging table grows at a  staggering rate. For every page accessed by a visitor, there is at least  one row added to the table. When a page contains a reference to a  graphic (e.g., .gifs or .jpgs), there is another row created. If a page  contains five references to graphics, there are six rows created in the  logging table every time it is accessed.  &lt;br /&gt;The bottom-line is that because of the size of the table the  report took too long to execute. In order to reduce the time it took to  execute the report I decided to use a summary (aka aggregate) table to  count the page views as they were entered into the logging table. Since  there were only eight main areas on the site, the summary table  contained eight rows and the report ran in less than one second.  &lt;br /&gt;The following uses a dummied-down schema to show how this  technique works. For the sake of brevity, I will only use two main areas  of the site.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;CREATE TABLE InetLog (ClientHost varchar(255), LogTime datetime, Target &lt;br /&gt;varchar(255))&lt;br /&gt;go&lt;br /&gt;CREATE TABLE LogSummary (LogSum_Category varchar(30), LogSum_Count int)&lt;br /&gt;go&lt;br /&gt;INSERT LogSummary VALUES ('About Us',0)&lt;br /&gt;INSERT LogSummary VALUES ('Services',0)&lt;/span&gt;&lt;/pre&gt;InetLog is the main logging table and LogSummary is the summary  table. The two main areas of the site are About Us and Services. The  goal of the trigger is to update the value in LogSum_Count every time  the AboutUs.htm and Services.htm pages are accessed. The trigger used to  do this is shown here.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;CREATE TRIGGER tr_InetLog_INSERT&lt;br /&gt;ON InetLog&lt;br /&gt;FOR INSERT&lt;br /&gt;AS&lt;br /&gt;&lt;br /&gt;IF EXISTS (SELECT * FROM inserted WHERE Target = 'AboutUs.htm')&lt;br /&gt; BEGIN&lt;br /&gt;  UPDATE LogSummary&lt;br /&gt;  SET LogSum_Count = (SELECT COUNT(*) FROM InetLog WHERE Target = 'AboutUs.htm')&lt;br /&gt;  WHERE LogSum_Category = 'About Us'&lt;br /&gt; END&lt;br /&gt;&lt;br /&gt;IF EXISTS (SELECT * FROM inserted WHERE Target = 'Services.htm')&lt;br /&gt; BEGIN&lt;br /&gt;  UPDATE LogSummary&lt;br /&gt;  SET LogSum_Count = (SELECT COUNT(*) FROM InetLog WHERE Target = 'Services.htm')&lt;br /&gt;  WHERE LogSum_Category = 'Services'&lt;br /&gt; END&lt;br /&gt;go&lt;/span&gt;&lt;/pre&gt;The trigger simply extends on the examples presented earlier and when  the IF criteria is met the associated row in LogSummary is updated. The  following shows the trigger works as expected.  &lt;br /&gt;&lt;pre&gt;&lt;span class="code"&gt;INSERT InetLog VALUES ('111.111.111.111', '4/1/29 12:00:50','Default.htm')&lt;br /&gt;INSERT InetLog VALUES ('111.111.111.111', '4/1/29 12:01:01','AboutUs.htm')&lt;br /&gt;INSERT InetLog VALUES ('111.111.111.111', '4/1/29 12:02:01','Services.htm')&lt;br /&gt;INSERT InetLog VALUES ('111.111.111.111', '4/1/29 12:03:01','Products.htm')&lt;br /&gt;INSERT InetLog VALUES ('111.111.111.111', '4/1/29 12:04:50','Default.htm')&lt;br /&gt;INSERT InetLog VALUES ('111.111.111.111', '4/1/29 12:05:01','AboutUs.htm')&lt;br /&gt;INSERT InetLog VALUES ('111.111.111.111', '4/1/29 12:06:01','Services.htm')&lt;br /&gt;INSERT InetLog VALUES ('111.111.111.111', '4/1/29 12:07:01','Products.htm')&lt;br /&gt;go&lt;br /&gt;SELECT * FROM LogSummary&lt;br /&gt;&lt;br /&gt;-- Results --&lt;br /&gt;&lt;br /&gt;LogSum_Category                LogSum_Count&lt;br /&gt;------------------------------ ------------&lt;br /&gt;About Us                       2&lt;br /&gt;Services                       2&lt;/span&gt;&lt;/pre&gt;Before I leave this section I must mention that this &lt;em&gt;homemade&lt;/em&gt;  solution is not the preferred way to monitor web site traffic. I  certainly had fun researching ODBC-logging and writing the code, but I  actually suggested the client buy a commercial software package like &lt;a href="http://www.webtrends.com/"&gt;WebTrends&lt;/a&gt;  to implement this functionality. WebTrends is a great product and  allows you to perform detailed analysis of a site's traffic. The client  did not want to spend any money on &lt;em&gt;real&lt;/em&gt; software, but instead on me:))&lt;br /&gt;Garth &lt;br /&gt;&lt;a href="http://www.sqlbook.com/"&gt;www.SQLBook.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1847278434515420457-854389209704973185?l=xkom.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xkom.blogspot.com/feeds/854389209704973185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xkom.blogspot.com/2011/07/mssql-trigger-sample-sql-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/854389209704973185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1847278434515420457/posts/default/854389209704973185'/><link rel='alternate' type='text/html' href='http://xkom.blogspot.com/2011/07/mssql-trigger-sample-sql-server.html' title='MsSql Trigger Sample (SQL Server)'/><author><name>My Soccer Football</name><uri>http://www.blogger.com/profile/13867130473786364775</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width
