![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
示例
下面的代码示例演示如何使用 ToolStrip 控件来创建复合控件,以模拟由 Microsoft® Outlook® 提供的“导航窗格”。
C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Windows.Forms;
namespace StackViewCS
{
public class StackView : UserControl
{
private ToolStrip stackStrip;
private ToolStripButton mailStackButton;
private ToolStripButton calendarStackButton;
private ToolStripButton contactsStackButton;
private ToolStripButton tasksStackButton;
private System.ComponentModel.IContainer components = null ;
private static Bitmap mailBmp;
private static Bitmap calendarBmp;
private static Bitmap contactsBmp;
private static Bitmap tasksBmp;
private static string mailBmpEnc = @" Qk32BgAAAAAAADYAAAAoAAAA " +
" GAAAABgAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7uv4yFvouE " +
" vYmDu4eBuYV/t4N9tYB7s355sXt3tntxsnhwsHZurXNsrHFrp21pomln " +
" oGdlnmVjnWNi7u7u7u7u7u7u7u7u7u7uwY6H9N3C/vDa/ejM+tSp+cye " +
" 98OS9bqI87F/87KA8qt68KRy76Bu7phl7ZVi7JVi54xb0ntSoGVj7u7u " +
" 7u7u7u7u7u7u7u7uwo+Ix6WZ9ujb//bn/u/b/OfL++HA+9iv+tev+tSr " +
" +tKo+cyg+Mic9b+S9LqM8al35ZZmoXBSoWdk7u7u7u7u7u7u7u7u7u7u " +
" xZSN9ejayaOY9uvh//js/vXo/e/a/evS/OfL/OTF+927+9u1+tSq+tKl " +
" +cqW8buFqHZa7JVdn2hm7u7u7u7u7u7u7u7u7u7uxZSN//ns9ercxqKV " +
" +O7k//nw//fu//fr/vTl/u/c/uvU/eLB/N+7+tev8b6Hq3pe+Lh6/69q " +
" oWpp7u7u7u7u7u7u7u7u7u7ux5eP//vv//vw9OncxKOX9+7m//v1//nz " +
" //jx//bs/+7Z/erQ/eTC8syiqntg+M6a/9Oh/8CFom1s7u7u7u7u7u7u " +
" 7u7u7u7uypqS//z4//v28ebYza2evp6V7+Lb8uzl8+3l8uvk9Ore9ejZ " +
" 6NO/poVyt4xx5b2T/9ap/8ybpXFw7u7u7u7u7u7u7u7u7u7uzJ2V///8 " +
" 7uPbzaye/fv6/fv5v6GTvKCQvJ+Nu5qIupmJt5uKsZWE+u3e+unYo4Jq " +
" 572O/9KjqHd17u7u7u7u7u7u7u7u7u7uzqCX7OHbzKud/fr58url5tnQ " +
" 5dfO5dfN5dfM5NbM49TI3Mq+3Mm93Mm8382/+unbrIJp57WGrH597u7u " +
" 7u7u7u7u7u7u7u7uz6GZ0LGj6uHa/fv67OLc6+Hb7eTd7ePd7eLb7eLb " +
" 7uPb9e7l9evk9uvj9+zh/PHlzr61r4VtsoWC7u7u7u7u7u7u7u7u7u7u " +
" 0aKXfdb/8uzn///+//37/Pn3+fXv9fHp8+vl " +
" 8enk7uXe1si/L6f3tYeC7u7u7u7u7u7u7u7u7u7uy6mkdM3/+vf1 " +
" /fz8/Pv69fPx7vDw7O/w2OfvxN/swt/thMXnK6ft " +
" r4SC7u7u7u7u7u7u7u7u7u7u1KeevuX6nNf2rN/7nNz9h9X+b8z+VMb/ " +
" RsT/RsT/PsP/Obz7NLT2MbL0K6vuJ6XpKKfrLqrvr4J/7u7u7u7u7u7u " +
" 7u7u7u7u28jC0rSo0O36yOv7x+r7v+f8suP9o97+jtj+idn+htX/e83/ " +
" a8f/XcD/Tbn/SLf/R7b/rJKJ7u7u7u7u7u7u7u7u7u7u7u7u7u7u6ePi " +
" 07ew29zd1e/61O/60e77y+z8vun9reH+mNn+gdH/ccj/ZMP/Vr3/t7/C " +
" uKCX7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u6uXk2b621rux1fH6 " +
" 3fL61/L7y+/8u+f9pt7+jNT+cMn/XcH/rZyW1c3L7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u6N/d07Op3d7f2/P60vD7xez8 " +
" r+H9k9X+kr/cv6Wb7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u6uXk2L612cG31e73yOv7seL8uKWezLex7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u6eHg1LOpzaeayaqh4dvb7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " ;
private static string calendarBmpEnc = @" Qk32BgAAAAAAADYAAAAo " +
" AAAAGAAAABgAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7uuKOUkXxqemNO " +
" alM8YEgwYEgwYkoxYUgwYEgwY0szYkoxYEgwYEgwYEgwYEgwZEszYUgw " +
" YEgwY0oyYUgwYEgwYEgw7u7u7u7uuqWW6tPE27qlxKCLu5d837OUzKGC " +
" t41xsYpt37OUzKGCt41xrodq37OUzKGCt41xrodq37OUzKGCt41xrodq " +
" Zk447u7u7u7uvKaX//fz/+3i/NvFwJl6/+nb/d3H+c+1vJV2/+HP/tW8 " +
" /MWluZJz/9vG/9Gw+8OfuJFy/86y/sKf97eSuJFyYEgw7u7u7u7uvaiZ " +
" //j2//Hq/OTY0qiL/+7h/+TR/N3J0KWI/+TU/9vE/9S4zqOF/+LR/9zE " +
" /sywzaKE/9e//8yt/sWizaKEYEgw7u7u7u7uv6qb//v5//j1//bx5Lug " +
" //Ho//Dl/+nb5Lqg/+fZ/+LQ/97I5Lqf/+XU/+HN/9zF5Lqf/9bC/9S7 " +
" /9C05LqfYEgw7u7u7u7uwauc4bib1ayOxZyBvpd74LaY0qiKwJd7uJF1 " +
" 4LWWz6WGvJJ2D0XuBTnjBjXQAiy8ACm137OUzKGCt41xrodqYEgw7u7u " +
" 7u7uxK6f//v6/Ozg/eHQx6CC/+/m+uHQ+tjDwpt9/+re/+DM/9O4I1Tz " +
" /9zG/9O5/86wASu4/9fC98Sm87uYuJFyYEgw7u7u7u7uxrCh//39//n0 " +
" /One1qyQ//v4/vHn+uHR06mM//Pt/+rc/+HMPGr0/+TU/93H/9i/AzHJ " +
" /+LP/9i++curzaKEYEgw7u7u7u7ux7Kj//39//38/fbw5Luh//z7/vj1 " +
" /uzh5Lug//fx//bv/+vgWoH2/+/m/+vd/+PQAzTa/+XU/+XU/97J5Lqf " +
" YUkx7u7u7u7uybOk47yh3rab1q2SzaWL4bqe2a+SzKKHwpqA4bmd1q2O " +
" x52CbY/5WYD3OWb0IFP0Aj3t4Lib06iJwJV5sopwYEgw7u7u7u7uzbep " +
" //39//n1//Dn1a2S/vv6+uvh9+DPyqKG//Tt+eXX+eDSxJx//One+tzH " +
" +dC3v5d6/9/K+9C1+8akuI9yalM97u7u7u7u0Lyu//39//r3//f03bWa " +
" //7+/vXx+urg1q2R//f0/O3i+eTV06mM//fy/+7i+NfCz6WI/+zg/+DM " +
" /9CzyZ6Adl5I7u7u7u7u0sCy//38//39//395L2j//7+//79/vn45L2j " +
" //38//n2/vLr5L2j//37//n2/unf5L2j/+/l/+nc/+DN5L2jf2dS7u7u " +
" 7u7u6KaG6KaG6KSE56OB56B+55565pt25phy5ZVt5ZJp5I5k5Itf5Iha " +
" 44RV44FR4n5M4ntI4XhE23I812w00mkzyGAo7u7u7u7u6amK/93L/dfD " +
" /9a+/s+2/syy/sis/sSl/cGh/byb/LeV+7SO+rCJ+auC+ad9+KN3+KBx " +
" 95xu95pq9pdn9pVkyGAo7u7u7u7u662P/+LQ/t/M/t3K/drG/dfC/dK8 " +
" /c63/Mqx/Mer+sKk+r6f+bqY+LaT+LGM96yG9qmA9aV69aB19J1w9Jps " +
" yGAo7u7u7u7u7LKV7LKV662P6aeG56F/559855x45pp05pdw5ZRs5ZFo " +
" 5I5j5Itf5Ihb44VW44JS4n9O4nxK4XpG4XdC4XU/2Ws27u7u7u7upJqU " +
" pJqUn5aQmZCLkYmFiIJ+fnp2dXJv " +
" bGpoZGNiXV5c7u7u7u7u7u7uICUg6enpICUg6enp " +
" ICUg6enpICUg6enpICUg6enpICUg6enpICUg3t7eICUg0NDQICUgvb29 " +
" ICUguLi4ICUg7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u " ;
private static string contactsBmpEnc = @" Qk32BgAAAAAAADYAAAAo " +
" AAAAGAAAABgAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7uuqWWh3FeeWJN " +
" alM8YEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgw " +
" YEgwYEgwYEgwYEgwYEgw7u7u7u7uuqWW//bx7t3T7trO7tfI79LB7865 " +
" 8Mqy8MWq8cCi8buZ8raR8rKJ862C86l69KV09KFt9Z5o9Zxk9Zph9Zph " +
" YEgw7u7u7u7uu6aX//n2//fy//Xv//Lr//Dn/+3j/+re/+ja/+XW/+LR " +
" /+DN/93J/9rF/9jB/9W9/9O5/9G2/8+z/86x9ZphYEgw7u7u7u7uvKiZ " +
" //z6//r30M/SGlmtA0uuA0WfAz+RATmHADV9zr23/+PTs4t1roRuqX1m " +
" pHhgoXRcoXRcoXRc/9C09Z1mYEgw7u7u7u7uvqqb//79//z7FFe3N3rV " +
" SYrkQ4XeA0OaGW3eC02nGkF4/+fZ/+TV/+LQ/9/M/9zI/9rE/9fA/9W8 " +
" /9O59KFtYEgw7u7u7u7uwKyd//7+E1i3Z57pUZDoTY7nA0SbGGze " +
" E2DIAzmD/+vfuZJ9s4t1roRuqX1mpHhgoXRcoXRc/9a99KV0YEgw7u7u " +
" 7u7uwq6fGF69gKvkX5flA0WeGW7iA0+3GWzgEk+j/+7l/+zh " +
" /+nc/+bY/+TT/+HP/97L/9zH/9nD86t9YEgw7u7u7u7uxLCh " +
" tcDPE1StGly1yNXZ+fryBVG5BkGOz8rK//LqvpiEuZJ9s4t1roRuqX1m " +
" pHhgoXRc/93I87CHYEgw7u7u7u7uxrKk9fX1zdDTYWZsVFVW " +
" YWFhBkunubzC//jz//Xw//Ps//Do/+7k/+vf/+jb/+bX/+PS/+DO8raR " +
" YEgw7u7u7u7ux7SmxMTEAAAAwcHBoqKihYWFVVVVn56d//r3 " +
" //j0//bx//Tt//Hp/+/l/+zh/+nd/+fY/+TU8b2cYEgw7u7u7u7uybao " +
" ODg4LCws1tbWwcHBoqKihYWFZGRk//37//v5//n2//fy//Xv " +
" //Lr//Dn/+3j/+re/+ja8MOmYEgw7u7u7u7uy7iqU1NTSUlJ " +
" tLS01dXVwcHBoqKidXV1///+//38/LeL+7SI+q+D+ap++KV496Bz9p1w " +
" /+vg8MmxZk437u7u7u7uzbqsfn5+Y2NjXV1dbW1tWFhYwcHB " +
" hISE//79//z7//v4//n1//bx//Tu//Lq/+/m78+6b1dB7u7u " +
" 7u7uz7yuxcXFbGxsgoKCoaGhjo6OVVVVra2t/LeL " +
" +7SI+q+D+ap++KV496Bz9p1w//Pr79TEeWJN7u7u7u7u0L6w " +
" 8vLyuLi4jY2NiIiIhYWFtLS08fHx//38//z6 " +
" //r3//j0//bw7tnMgm1Z7u7u7u7u0b+x " +
" //79//z7//v4//n1//fy " +
" i3Zj7u7u7u7u0sCy0b+x0L6wz72vzrutzLqsy7iqybeoyLWmxrOkxLGi " +
" w6+hwa2fv6udvqmbvKiZu6aXuaWWuKOUt6KTtqGStaCR7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u " ;
private static string tasksBmpEnc = @" Qk32BgAAAAAAADYAAAAoAAA " +
" AGAAAABgAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u3N3fkXxqeGB " +
" LalE5cVc/c1lBf2JKl3RZiWhMe1xBb1M5aE42Zkw0Zk01aE42YUkxYkk " +
" xYkkxkod97u7u7u7u7u7u7u7u7u7uv62e+ezi69nQ7M6+7Miz6L+prI+ " +
" rWFKqmHyk7rWU77OO77CM8LCK8bCH8a2F8qp98aV13pZnZkwz7u7u7u7 " +
" u7u7u7u7u7u7uv62e//37/vr3/vTw+uvkwLnaJDO/BhmzJjTDybTG99K " +
" 8+NC49syy9sms9sao9cOl8LiV8KR0aU417u7u7u7u7u7u7u7u7u7uwK6 " +
" f//7+//z7/Pj3xcTmLDvBFynIMEXkIDbXVGHO6dHO+tzJ+tjD+dW++dK " +
" 5+c+19sWn8qd2Y0kx7u7u7u7u7u7u7u7u7u7uw7Gj/Pv9wcTsKDj " +
" FFCnMRVjuZHX1PlPoFzHSeHPJ+d3O+tzI+tjD+dS9+dG59seq8ayEaEw " +
" 07u7u7u7u7u7u7u7u7u7uxrWm9vf9pKzoJjjNGi7TR1nreoj/j5v8ZXf " +
" 0N0zlJjTPv7LP+t7O+tvI+tfC+dS998qv8K+LaU427u7u7u7u7u7u7u7 " +
" u7u7u08W619v5Kz7XJjrfTl/ze4v/tLr59/Dyoab2Znb0LUPmNUTO1sX " +
" R+9/N+tvH+tjC99C277GNbVI47u7u7u7u7u7u7u7u7u7uy7qt6+3+kp7 " +
" 4UGT4c4P/sbj+/Pr5/vj16ePykpz5Y3T0KDzfbHHR6dTS++HQ+tvG+dn " +
" D8bqabVI57u7u7u7u7u7u7u7u7u7uybeo9ff/qLL/wsr//Pz///3 " +
" 8/vv5/ff09e7wpav4YnP0KDzajYzQ6NPT/N7O+NrG8b+idFlA7u7u7u7 " +
" u7u7u7u7u7u7uyriq+Pn//v7///38/vr2/vj08er " +
" wmaL6WWvyMELXmJbS9OPb+d/Q88mxc1Y97u7u7u7u7u7u7u7u7u7uzLq " +
" s//7+//36/vr3/vn0+fDvsLT1WmruNUb " +
" Qta/V+uXX9M+6hWdP7u7u7u7u7u7u7u7u7u7uzryt/// " +
" ///7+//79//v3/vj0+O7wurz0TV3sSFTS08fa9t7PmXl " +
" h7u7u7u7u7u7u7u7u7u7uz72v/fj1+Orh9uH " +
" W89TD88+78sew9NK99drNm5/xVWbwYWvV6dzgrIlw7u7u7u7u7u7u7u7 " +
" u7u7u0L6wX4ycVYGSTHaIS21/SGN0SGJySF9vdnd " +
" 9pZWQ89TDt7n1TF3oZGvOuJ2L7u7u7u7u7u7u7u7u7u7u0b+x/// " +
" /dJmou+Xsmd3ofs/fdcXVcMHSbrrNbbHCbHJ69dTD++3nw8H " +
" uNUjqZGjJ7u7u7u7u7u7u7u7u7u7u0b+xi6q2pMn " +
" StuzzYYycdLG+fs/ed8jaXY2eRl1t8uDU++je/O7mzsnmUFCX7u7u7u7 " +
" u7u7u7u7u7u7u0sCy3ufqdZuqx+30V3aFXoCPaZW " +
" kjdDeTWx8v7Ko/vr2/fTv/fTu+/XxnZSu7u7u7u7u7u7u7u7u7u7u6ur " +
" r2Mq/0b+x0L6wz72vyLeqc5qpoMHLxfD3v+zzruXvkMjVaX6GwK6ewrC " +
" hwa+gwK6fv62e4OHi7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u5ObnfKa1eaOxcpyrcJWkboiW4+Pj7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " ;
// Static constructor to initialize
// the form's static fields.
static StackView()
{
// Create the static bitmaps from Base64 encoding.
CreateBitmaps();
}
public StackView()
{
this .InitializeComponent();
// Assign icons to ToolStripButton controls.
this .InitializeImages();
// Set up renderers.
this .stackStrip.Renderer = new StackRenderer();
}
// This utility method assigns icons to each
// ToolStripButton control.
private void InitializeImages()
{
this .mailStackButton.Image = mailBmp;
this .calendarStackButton.Image = calendarBmp;
this .contactsStackButton.Image = contactsBmp;
this .tasksStackButton.Image = tasksBmp;
}
// This utility method creates bitmaps for all the icons.
// It uses a utility method called DeserializeFromBase64
// to decode the Base64 image data.
private static void CreateBitmaps()
{
mailBmp = DeserializeFromBase64(mailBmpEnc);
calendarBmp = DeserializeFromBase64(calendarBmpEnc);
contactsBmp = DeserializeFromBase64(contactsBmpEnc);
tasksBmp = DeserializeFromBase64(tasksBmpEnc);
}
// This utility method cretes a bitmap from
// a Base64-encoded string.
internal static Bitmap DeserializeFromBase64( string data)
{
// Decode the string and create a memory stream
// on the decoded string data.
MemoryStream stream =
new MemoryStream(Convert.FromBase64String(data));
// Create a new bitmap from the stream.
Bitmap b = new Bitmap(stream);
return b;
}
// This method handles the Load event for the UserControl.
private void StackView_Load( object sender, EventArgs e)
{
// Dock bottom.
this .Dock = DockStyle.Bottom;
// Set AutoSize.
this .AutoSize = true ;
}
// This method handles the Click event for all
// the ToolStripButton controls in the StackView.
private void stackButton_Click( object sender, EventArgs e)
{
// Define a "one of many" state, similar to
// the logic of a RadioButton control.
foreach (ToolStripItem item in this .stackStrip.Items)
{
if ((item != sender) &&
(item is ToolStripButton))
{
((ToolStripButton)item).Checked = false ;
}
}
}
protected override void Dispose( bool disposing)
{
if (disposing && (components != null ))
{
components.Dispose();
}
base .Dispose(disposing);
}
internal class StackRenderer : ToolStripProfessionalRenderer
{
private static Bitmap titleBarGripBmp;
private static string titleBarGripEnc = @" Qk16AQAAAAAAADYAAAAoAAAAIwAAAAMAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAAuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5ANj+RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5ANj+RzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMANj+ " ;
// Define titlebar colors.
private static Color titlebarColor1 = Color.FromArgb( 89 , 135 , 214 );
private static Color titlebarColor2 = Color.FromArgb( 76 , 123 , 204 );
private static Color titlebarColor3 = Color.FromArgb( 63 , 111 , 194 );
private static Color titlebarColor4 = Color.FromArgb( 50 , 99 , 184 );
private static Color titlebarColor5 = Color.FromArgb( 38 , 88 , 174 );
private static Color titlebarColor6 = Color.FromArgb( 25 , 76 , 164 );
private static Color titlebarColor7 = Color.FromArgb( 12 , 64 , 154 );
private static Color borderColor = Color.FromArgb( 0 , 0 , 128 );
static StackRenderer()
{
titleBarGripBmp = StackView.DeserializeFromBase64(titleBarGripEnc);
}
public StackRenderer()
{
}
private void DrawTitleBar(Graphics g, Rectangle rect)
{
// Assign the image for the grip.
Image titlebarGrip = titleBarGripBmp;
// Fill the titlebar.
// This produces the gradient and the rounded-corner effect.
g.DrawLine( new Pen(titlebarColor1), rect.X, rect.Y, rect.X + rect.Width, rect.Y);
g.DrawLine( new Pen(titlebarColor2), rect.X, rect.Y + 1 , rect.X + rect.Width, rect.Y + 1 );
g.DrawLine( new Pen(titlebarColor3), rect.X, rect.Y + 2 , rect.X + rect.Width, rect.Y + 2 );
g.DrawLine( new Pen(titlebarColor4), rect.X, rect.Y + 3 , rect.X + rect.Width, rect.Y + 3 );
g.DrawLine( new Pen(titlebarColor5), rect.X, rect.Y + 4 , rect.X + rect.Width, rect.Y + 4 );
g.DrawLine( new Pen(titlebarColor6), rect.X, rect.Y + 5 , rect.X + rect.Width, rect.Y + 5 );
g.DrawLine( new Pen(titlebarColor7), rect.X, rect.Y + 6 , rect.X + rect.Width, rect.Y + 6 );
// Center the titlebar grip.
g.DrawImage(
titlebarGrip,
new Point(rect.X + ((rect.Width / 2 ) - (titlebarGrip.Width / 2 )),
rect.Y + 1 ));
}
// This method handles the RenderGrip event.
protected override void OnRenderGrip(ToolStripGripRenderEventArgs e)
{
DrawTitleBar(
e.Graphics,
new Rectangle( 0 , 0 , e.ToolStrip.Width, 7 ));
}
// This method handles the RenderToolStripBorder event.
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
DrawTitleBar(
e.Graphics,
new Rectangle( 0 , 0 , e.ToolStrip.Width, 7 ));
}
// This method handles the RenderButtonBackground event.
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
{
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
Color gradientBegin = Color.FromArgb( 203 , 225 , 252 );
Color gradientEnd = Color.FromArgb( 125 , 165 , 224 );
ToolStripButton button = e.Item as ToolStripButton;
if (button.Pressed || button.Checked)
{
gradientBegin = Color.FromArgb( 254 , 128 , 62 );
gradientEnd = Color.FromArgb( 255 , 223 , 154 );
}
else if (button.Selected)
{
gradientBegin = Color.FromArgb( 255 , 255 , 222 );
gradientEnd = Color.FromArgb( 255 , 203 , 136 );
}
using (Brush b = new LinearGradientBrush(
bounds,
gradientBegin,
gradientEnd,
LinearGradientMode.Vertical))
{
g.FillRectangle(b, bounds);
}
e.Graphics.DrawRectangle(
SystemPens.ControlDarkDark,
bounds);
g.DrawLine(
SystemPens.ControlDarkDark,
bounds.X,
bounds.Y,
bounds.Width - 1 ,
bounds.Y);
g.DrawLine(
SystemPens.ControlDarkDark,
bounds.X,
bounds.Y,
bounds.X,
bounds.Height - 1 );
ToolStrip toolStrip = button.Owner;
ToolStripButton nextItem = button.Owner.GetItemAt(
button.Bounds.X,
button.Bounds.Bottom + 1 ) as ToolStripButton;
if (nextItem == null )
{
g.DrawLine(
SystemPens.ControlDarkDark,
bounds.X,
bounds.Height - 1 ,
bounds.X + bounds.Width - 1 ,
bounds.Height - 1 );
}
}
}
#region Component Designer generated code
private void InitializeComponent()
{
this .stackStrip = new System.Windows.Forms.ToolStrip();
this .mailStackButton = new System.Windows.Forms.ToolStripButton();
this .calendarStackButton = new System.Windows.Forms.ToolStripButton();
this .contactsStackButton = new System.Windows.Forms.ToolStripButton();
this .tasksStackButton = new System.Windows.Forms.ToolStripButton();
this .stackStrip.SuspendLayout();
this .SuspendLayout();
//
// stackStrip
//
this .stackStrip.CanOverflow = false ;
this .stackStrip.Dock = System.Windows.Forms.DockStyle.Bottom;
this .stackStrip.Font = new System.Drawing.Font( " Tahoma " , 10F, System.Drawing.FontStyle.Bold);
this .stackStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this .stackStrip.Items.AddRange( new System.Windows.Forms.ToolStripItem[] {
this .mailStackButton,
this .calendarStackButton,
this .contactsStackButton,
this .tasksStackButton});
this .stackStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;
this .stackStrip.Location = new System.Drawing.Point( 0 , 11 );
this .stackStrip.Name = " stackStrip " ;
this .stackStrip.Padding = new System.Windows.Forms.Padding( 0 , 7 , 0 , 0 );
this .stackStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this .stackStrip.Size = new System.Drawing.Size( 150 , 139 );
this .stackStrip.TabIndex = 0 ;
this .stackStrip.Text = " toolStrip1 " ;
//
// mailStackButton
//
this .mailStackButton.CheckOnClick = true ;
this .mailStackButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .mailStackButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this .mailStackButton.ImageTransparentColor = System.Drawing.Color.FromArgb((( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))));
this .mailStackButton.Margin = new System.Windows.Forms.Padding( 0 );
this .mailStackButton.Name = " mailStackButton " ;
this .mailStackButton.Padding = new System.Windows.Forms.Padding( 3 );
this .mailStackButton.Size = new System.Drawing.Size( 149 , 27 );
this .mailStackButton.Text = " Mail " ;
this .mailStackButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .mailStackButton.Click += new System.EventHandler( this .stackButton_Click);
//
// calendarStackButton
//
this .calendarStackButton.CheckOnClick = true ;
this .calendarStackButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .calendarStackButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this .calendarStackButton.ImageTransparentColor = System.Drawing.Color.FromArgb((( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))));
this .calendarStackButton.Margin = new System.Windows.Forms.Padding( 0 );
this .calendarStackButton.Name = " calendarStackButton " ;
this .calendarStackButton.Padding = new System.Windows.Forms.Padding( 3 );
this .calendarStackButton.Size = new System.Drawing.Size( 149 , 27 );
this .calendarStackButton.Text = " Calendar " ;
this .calendarStackButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .calendarStackButton.Click += new System.EventHandler( this .stackButton_Click);
//
// contactsStackButton
//
this .contactsStackButton.CheckOnClick = true ;
this .contactsStackButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .contactsStackButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this .contactsStackButton.ImageTransparentColor = System.Drawing.Color.FromArgb((( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))));
this .contactsStackButton.Margin = new System.Windows.Forms.Padding( 0 );
this .contactsStackButton.Name = " contactsStackButton " ;
this .contactsStackButton.Padding = new System.Windows.Forms.Padding( 3 );
this .contactsStackButton.Size = new System.Drawing.Size( 149 , 27 );
this .contactsStackButton.Text = " Contacts " ;
this .contactsStackButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .contactsStackButton.Click += new System.EventHandler( this .stackButton_Click);
//
// tasksStackButton
//
this .tasksStackButton.CheckOnClick = true ;
this .tasksStackButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .tasksStackButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this .tasksStackButton.ImageTransparentColor = System.Drawing.Color.FromArgb((( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))));
this .tasksStackButton.Margin = new System.Windows.Forms.Padding( 0 );
this .tasksStackButton.Name = " tasksStackButton " ;
this .tasksStackButton.Padding = new System.Windows.Forms.Padding( 3 );
this .tasksStackButton.Size = new System.Drawing.Size( 149 , 27 );
this .tasksStackButton.Text = " Tasks " ;
this .tasksStackButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .tasksStackButton.Click += new System.EventHandler( this .stackButton_Click);
//
// StackView
//
this .AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this .AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this .Controls.Add( this .stackStrip);
this .Name = " StackView " ;
this .Load += new System.EventHandler( this .StackView_Load);
this .stackStrip.ResumeLayout( false );
this .stackStrip.PerformLayout();
this .ResumeLayout( false );
this .PerformLayout();
}
#endregion
}
}
下面的代码示例演示如何使用 ToolStrip 控件来创建复合控件,以模拟由 Microsoft® Outlook® 提供的“导航窗格”。
C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Windows.Forms;
namespace StackViewCS
{
public class StackView : UserControl
{
private ToolStrip stackStrip;
private ToolStripButton mailStackButton;
private ToolStripButton calendarStackButton;
private ToolStripButton contactsStackButton;
private ToolStripButton tasksStackButton;
private System.ComponentModel.IContainer components = null ;
private static Bitmap mailBmp;
private static Bitmap calendarBmp;
private static Bitmap contactsBmp;
private static Bitmap tasksBmp;
private static string mailBmpEnc = @" Qk32BgAAAAAAADYAAAAoAAAA " +
" GAAAABgAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7uv4yFvouE " +
" vYmDu4eBuYV/t4N9tYB7s355sXt3tntxsnhwsHZurXNsrHFrp21pomln " +
" oGdlnmVjnWNi7u7u7u7u7u7u7u7u7u7uwY6H9N3C/vDa/ejM+tSp+cye " +
" 98OS9bqI87F/87KA8qt68KRy76Bu7phl7ZVi7JVi54xb0ntSoGVj7u7u " +
" 7u7u7u7u7u7u7u7uwo+Ix6WZ9ujb//bn/u/b/OfL++HA+9iv+tev+tSr " +
" +tKo+cyg+Mic9b+S9LqM8al35ZZmoXBSoWdk7u7u7u7u7u7u7u7u7u7u " +
" xZSN9ejayaOY9uvh//js/vXo/e/a/evS/OfL/OTF+927+9u1+tSq+tKl " +
" +cqW8buFqHZa7JVdn2hm7u7u7u7u7u7u7u7u7u7uxZSN//ns9ercxqKV " +
" +O7k//nw//fu//fr/vTl/u/c/uvU/eLB/N+7+tev8b6Hq3pe+Lh6/69q " +
" oWpp7u7u7u7u7u7u7u7u7u7ux5eP//vv//vw9OncxKOX9+7m//v1//nz " +
" //jx//bs/+7Z/erQ/eTC8syiqntg+M6a/9Oh/8CFom1s7u7u7u7u7u7u " +
" 7u7u7u7uypqS//z4//v28ebYza2evp6V7+Lb8uzl8+3l8uvk9Ore9ejZ " +
" 6NO/poVyt4xx5b2T/9ap/8ybpXFw7u7u7u7u7u7u7u7u7u7uzJ2V///8 " +
" 7uPbzaye/fv6/fv5v6GTvKCQvJ+Nu5qIupmJt5uKsZWE+u3e+unYo4Jq " +
" 572O/9KjqHd17u7u7u7u7u7u7u7u7u7uzqCX7OHbzKud/fr58url5tnQ " +
" 5dfO5dfN5dfM5NbM49TI3Mq+3Mm93Mm8382/+unbrIJp57WGrH597u7u " +
" 7u7u7u7u7u7u7u7uz6GZ0LGj6uHa/fv67OLc6+Hb7eTd7ePd7eLb7eLb " +
" 7uPb9e7l9evk9uvj9+zh/PHlzr61r4VtsoWC7u7u7u7u7u7u7u7u7u7u " +
" 0aKXfdb/8uzn///+//37/Pn3+fXv9fHp8+vl " +
" 8enk7uXe1si/L6f3tYeC7u7u7u7u7u7u7u7u7u7uy6mkdM3/+vf1 " +
" /fz8/Pv69fPx7vDw7O/w2OfvxN/swt/thMXnK6ft " +
" r4SC7u7u7u7u7u7u7u7u7u7u1KeevuX6nNf2rN/7nNz9h9X+b8z+VMb/ " +
" RsT/RsT/PsP/Obz7NLT2MbL0K6vuJ6XpKKfrLqrvr4J/7u7u7u7u7u7u " +
" 7u7u7u7u28jC0rSo0O36yOv7x+r7v+f8suP9o97+jtj+idn+htX/e83/ " +
" a8f/XcD/Tbn/SLf/R7b/rJKJ7u7u7u7u7u7u7u7u7u7u7u7u7u7u6ePi " +
" 07ew29zd1e/61O/60e77y+z8vun9reH+mNn+gdH/ccj/ZMP/Vr3/t7/C " +
" uKCX7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u6uXk2b621rux1fH6 " +
" 3fL61/L7y+/8u+f9pt7+jNT+cMn/XcH/rZyW1c3L7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u6N/d07Op3d7f2/P60vD7xez8 " +
" r+H9k9X+kr/cv6Wb7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u6uXk2L612cG31e73yOv7seL8uKWezLex7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u6eHg1LOpzaeayaqh4dvb7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " ;
private static string calendarBmpEnc = @" Qk32BgAAAAAAADYAAAAo " +
" AAAAGAAAABgAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7uuKOUkXxqemNO " +
" alM8YEgwYEgwYkoxYUgwYEgwY0szYkoxYEgwYEgwYEgwYEgwZEszYUgw " +
" YEgwY0oyYUgwYEgwYEgw7u7u7u7uuqWW6tPE27qlxKCLu5d837OUzKGC " +
" t41xsYpt37OUzKGCt41xrodq37OUzKGCt41xrodq37OUzKGCt41xrodq " +
" Zk447u7u7u7uvKaX//fz/+3i/NvFwJl6/+nb/d3H+c+1vJV2/+HP/tW8 " +
" /MWluZJz/9vG/9Gw+8OfuJFy/86y/sKf97eSuJFyYEgw7u7u7u7uvaiZ " +
" //j2//Hq/OTY0qiL/+7h/+TR/N3J0KWI/+TU/9vE/9S4zqOF/+LR/9zE " +
" /sywzaKE/9e//8yt/sWizaKEYEgw7u7u7u7uv6qb//v5//j1//bx5Lug " +
" //Ho//Dl/+nb5Lqg/+fZ/+LQ/97I5Lqf/+XU/+HN/9zF5Lqf/9bC/9S7 " +
" /9C05LqfYEgw7u7u7u7uwauc4bib1ayOxZyBvpd74LaY0qiKwJd7uJF1 " +
" 4LWWz6WGvJJ2D0XuBTnjBjXQAiy8ACm137OUzKGCt41xrodqYEgw7u7u " +
" 7u7uxK6f//v6/Ozg/eHQx6CC/+/m+uHQ+tjDwpt9/+re/+DM/9O4I1Tz " +
" /9zG/9O5/86wASu4/9fC98Sm87uYuJFyYEgw7u7u7u7uxrCh//39//n0 " +
" /One1qyQ//v4/vHn+uHR06mM//Pt/+rc/+HMPGr0/+TU/93H/9i/AzHJ " +
" /+LP/9i++curzaKEYEgw7u7u7u7ux7Kj//39//38/fbw5Luh//z7/vj1 " +
" /uzh5Lug//fx//bv/+vgWoH2/+/m/+vd/+PQAzTa/+XU/+XU/97J5Lqf " +
" YUkx7u7u7u7uybOk47yh3rab1q2SzaWL4bqe2a+SzKKHwpqA4bmd1q2O " +
" x52CbY/5WYD3OWb0IFP0Aj3t4Lib06iJwJV5sopwYEgw7u7u7u7uzbep " +
" //39//n1//Dn1a2S/vv6+uvh9+DPyqKG//Tt+eXX+eDSxJx//One+tzH " +
" +dC3v5d6/9/K+9C1+8akuI9yalM97u7u7u7u0Lyu//39//r3//f03bWa " +
" //7+/vXx+urg1q2R//f0/O3i+eTV06mM//fy/+7i+NfCz6WI/+zg/+DM " +
" /9CzyZ6Adl5I7u7u7u7u0sCy//38//39//395L2j//7+//79/vn45L2j " +
" //38//n2/vLr5L2j//37//n2/unf5L2j/+/l/+nc/+DN5L2jf2dS7u7u " +
" 7u7u6KaG6KaG6KSE56OB56B+55565pt25phy5ZVt5ZJp5I5k5Itf5Iha " +
" 44RV44FR4n5M4ntI4XhE23I812w00mkzyGAo7u7u7u7u6amK/93L/dfD " +
" /9a+/s+2/syy/sis/sSl/cGh/byb/LeV+7SO+rCJ+auC+ad9+KN3+KBx " +
" 95xu95pq9pdn9pVkyGAo7u7u7u7u662P/+LQ/t/M/t3K/drG/dfC/dK8 " +
" /c63/Mqx/Mer+sKk+r6f+bqY+LaT+LGM96yG9qmA9aV69aB19J1w9Jps " +
" yGAo7u7u7u7u7LKV7LKV662P6aeG56F/559855x45pp05pdw5ZRs5ZFo " +
" 5I5j5Itf5Ihb44VW44JS4n9O4nxK4XpG4XdC4XU/2Ws27u7u7u7upJqU " +
" pJqUn5aQmZCLkYmFiIJ+fnp2dXJv " +
" bGpoZGNiXV5c7u7u7u7u7u7uICUg6enpICUg6enp " +
" ICUg6enpICUg6enpICUg6enpICUg6enpICUg3t7eICUg0NDQICUgvb29 " +
" ICUguLi4ICUg7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u " ;
private static string contactsBmpEnc = @" Qk32BgAAAAAAADYAAAAo " +
" AAAAGAAAABgAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7uuqWWh3FeeWJN " +
" alM8YEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgwYEgw " +
" YEgwYEgwYEgwYEgwYEgw7u7u7u7uuqWW//bx7t3T7trO7tfI79LB7865 " +
" 8Mqy8MWq8cCi8buZ8raR8rKJ862C86l69KV09KFt9Z5o9Zxk9Zph9Zph " +
" YEgw7u7u7u7uu6aX//n2//fy//Xv//Lr//Dn/+3j/+re/+ja/+XW/+LR " +
" /+DN/93J/9rF/9jB/9W9/9O5/9G2/8+z/86x9ZphYEgw7u7u7u7uvKiZ " +
" //z6//r30M/SGlmtA0uuA0WfAz+RATmHADV9zr23/+PTs4t1roRuqX1m " +
" pHhgoXRcoXRcoXRc/9C09Z1mYEgw7u7u7u7uvqqb//79//z7FFe3N3rV " +
" SYrkQ4XeA0OaGW3eC02nGkF4/+fZ/+TV/+LQ/9/M/9zI/9rE/9fA/9W8 " +
" /9O59KFtYEgw7u7u7u7uwKyd//7+E1i3Z57pUZDoTY7nA0SbGGze " +
" E2DIAzmD/+vfuZJ9s4t1roRuqX1mpHhgoXRcoXRc/9a99KV0YEgw7u7u " +
" 7u7uwq6fGF69gKvkX5flA0WeGW7iA0+3GWzgEk+j/+7l/+zh " +
" /+nc/+bY/+TT/+HP/97L/9zH/9nD86t9YEgw7u7u7u7uxLCh " +
" tcDPE1StGly1yNXZ+fryBVG5BkGOz8rK//LqvpiEuZJ9s4t1roRuqX1m " +
" pHhgoXRc/93I87CHYEgw7u7u7u7uxrKk9fX1zdDTYWZsVFVW " +
" YWFhBkunubzC//jz//Xw//Ps//Do/+7k/+vf/+jb/+bX/+PS/+DO8raR " +
" YEgw7u7u7u7ux7SmxMTEAAAAwcHBoqKihYWFVVVVn56d//r3 " +
" //j0//bx//Tt//Hp/+/l/+zh/+nd/+fY/+TU8b2cYEgw7u7u7u7uybao " +
" ODg4LCws1tbWwcHBoqKihYWFZGRk//37//v5//n2//fy//Xv " +
" //Lr//Dn/+3j/+re/+ja8MOmYEgw7u7u7u7uy7iqU1NTSUlJ " +
" tLS01dXVwcHBoqKidXV1///+//38/LeL+7SI+q+D+ap++KV496Bz9p1w " +
" /+vg8MmxZk437u7u7u7uzbqsfn5+Y2NjXV1dbW1tWFhYwcHB " +
" hISE//79//z7//v4//n1//bx//Tu//Lq/+/m78+6b1dB7u7u " +
" 7u7uz7yuxcXFbGxsgoKCoaGhjo6OVVVVra2t/LeL " +
" +7SI+q+D+ap++KV496Bz9p1w//Pr79TEeWJN7u7u7u7u0L6w " +
" 8vLyuLi4jY2NiIiIhYWFtLS08fHx//38//z6 " +
" //r3//j0//bw7tnMgm1Z7u7u7u7u0b+x " +
" //79//z7//v4//n1//fy " +
" i3Zj7u7u7u7u0sCy0b+x0L6wz72vzrutzLqsy7iqybeoyLWmxrOkxLGi " +
" w6+hwa2fv6udvqmbvKiZu6aXuaWWuKOUt6KTtqGStaCR7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " +
" 7u7u " ;
private static string tasksBmpEnc = @" Qk32BgAAAAAAADYAAAAoAAA " +
" AGAAAABgAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u3N3fkXxqeGB " +
" LalE5cVc/c1lBf2JKl3RZiWhMe1xBb1M5aE42Zkw0Zk01aE42YUkxYkk " +
" xYkkxkod97u7u7u7u7u7u7u7u7u7uv62e+ezi69nQ7M6+7Miz6L+prI+ " +
" rWFKqmHyk7rWU77OO77CM8LCK8bCH8a2F8qp98aV13pZnZkwz7u7u7u7 " +
" u7u7u7u7u7u7uv62e//37/vr3/vTw+uvkwLnaJDO/BhmzJjTDybTG99K " +
" 8+NC49syy9sms9sao9cOl8LiV8KR0aU417u7u7u7u7u7u7u7u7u7uwK6 " +
" f//7+//z7/Pj3xcTmLDvBFynIMEXkIDbXVGHO6dHO+tzJ+tjD+dW++dK " +
" 5+c+19sWn8qd2Y0kx7u7u7u7u7u7u7u7u7u7uw7Gj/Pv9wcTsKDj " +
" FFCnMRVjuZHX1PlPoFzHSeHPJ+d3O+tzI+tjD+dS9+dG59seq8ayEaEw " +
" 07u7u7u7u7u7u7u7u7u7uxrWm9vf9pKzoJjjNGi7TR1nreoj/j5v8ZXf " +
" 0N0zlJjTPv7LP+t7O+tvI+tfC+dS998qv8K+LaU427u7u7u7u7u7u7u7 " +
" u7u7u08W619v5Kz7XJjrfTl/ze4v/tLr59/Dyoab2Znb0LUPmNUTO1sX " +
" R+9/N+tvH+tjC99C277GNbVI47u7u7u7u7u7u7u7u7u7uy7qt6+3+kp7 " +
" 4UGT4c4P/sbj+/Pr5/vj16ePykpz5Y3T0KDzfbHHR6dTS++HQ+tvG+dn " +
" D8bqabVI57u7u7u7u7u7u7u7u7u7uybeo9ff/qLL/wsr//Pz///3 " +
" 8/vv5/ff09e7wpav4YnP0KDzajYzQ6NPT/N7O+NrG8b+idFlA7u7u7u7 " +
" u7u7u7u7u7u7uyriq+Pn//v7///38/vr2/vj08er " +
" wmaL6WWvyMELXmJbS9OPb+d/Q88mxc1Y97u7u7u7u7u7u7u7u7u7uzLq " +
" s//7+//36/vr3/vn0+fDvsLT1WmruNUb " +
" Qta/V+uXX9M+6hWdP7u7u7u7u7u7u7u7u7u7uzryt/// " +
" ///7+//79//v3/vj0+O7wurz0TV3sSFTS08fa9t7PmXl " +
" h7u7u7u7u7u7u7u7u7u7uz72v/fj1+Orh9uH " +
" W89TD88+78sew9NK99drNm5/xVWbwYWvV6dzgrIlw7u7u7u7u7u7u7u7 " +
" u7u7u0L6wX4ycVYGSTHaIS21/SGN0SGJySF9vdnd " +
" 9pZWQ89TDt7n1TF3oZGvOuJ2L7u7u7u7u7u7u7u7u7u7u0b+x/// " +
" /dJmou+Xsmd3ofs/fdcXVcMHSbrrNbbHCbHJ69dTD++3nw8H " +
" uNUjqZGjJ7u7u7u7u7u7u7u7u7u7u0b+xi6q2pMn " +
" StuzzYYycdLG+fs/ed8jaXY2eRl1t8uDU++je/O7mzsnmUFCX7u7u7u7 " +
" u7u7u7u7u7u7u0sCy3ufqdZuqx+30V3aFXoCPaZW " +
" kjdDeTWx8v7Ko/vr2/fTv/fTu+/XxnZSu7u7u7u7u7u7u7u7u7u7u6ur " +
" r2Mq/0b+x0L6wz72vyLeqc5qpoMHLxfD3v+zzruXvkMjVaX6GwK6ewrC " +
" hwa+gwK6fv62e4OHi7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u5ObnfKa1eaOxcpyrcJWkboiW4+Pj7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7 " +
" u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u " ;
// Static constructor to initialize
// the form's static fields.
static StackView()
{
// Create the static bitmaps from Base64 encoding.
CreateBitmaps();
}
public StackView()
{
this .InitializeComponent();
// Assign icons to ToolStripButton controls.
this .InitializeImages();
// Set up renderers.
this .stackStrip.Renderer = new StackRenderer();
}
// This utility method assigns icons to each
// ToolStripButton control.
private void InitializeImages()
{
this .mailStackButton.Image = mailBmp;
this .calendarStackButton.Image = calendarBmp;
this .contactsStackButton.Image = contactsBmp;
this .tasksStackButton.Image = tasksBmp;
}
// This utility method creates bitmaps for all the icons.
// It uses a utility method called DeserializeFromBase64
// to decode the Base64 image data.
private static void CreateBitmaps()
{
mailBmp = DeserializeFromBase64(mailBmpEnc);
calendarBmp = DeserializeFromBase64(calendarBmpEnc);
contactsBmp = DeserializeFromBase64(contactsBmpEnc);
tasksBmp = DeserializeFromBase64(tasksBmpEnc);
}
// This utility method cretes a bitmap from
// a Base64-encoded string.
internal static Bitmap DeserializeFromBase64( string data)
{
// Decode the string and create a memory stream
// on the decoded string data.
MemoryStream stream =
new MemoryStream(Convert.FromBase64String(data));
// Create a new bitmap from the stream.
Bitmap b = new Bitmap(stream);
return b;
}
// This method handles the Load event for the UserControl.
private void StackView_Load( object sender, EventArgs e)
{
// Dock bottom.
this .Dock = DockStyle.Bottom;
// Set AutoSize.
this .AutoSize = true ;
}
// This method handles the Click event for all
// the ToolStripButton controls in the StackView.
private void stackButton_Click( object sender, EventArgs e)
{
// Define a "one of many" state, similar to
// the logic of a RadioButton control.
foreach (ToolStripItem item in this .stackStrip.Items)
{
if ((item != sender) &&
(item is ToolStripButton))
{
((ToolStripButton)item).Checked = false ;
}
}
}
protected override void Dispose( bool disposing)
{
if (disposing && (components != null ))
{
components.Dispose();
}
base .Dispose(disposing);
}
internal class StackRenderer : ToolStripProfessionalRenderer
{
private static Bitmap titleBarGripBmp;
private static string titleBarGripEnc = @" Qk16AQAAAAAAADYAAAAoAAAAIwAAAAMAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAAuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5uGMyuGMy+/n5+/n5ANj+RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5wm8/RzIomHRh+/n5ANj+RzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMzHtMRzIoRzIozHtMANj+ " ;
// Define titlebar colors.
private static Color titlebarColor1 = Color.FromArgb( 89 , 135 , 214 );
private static Color titlebarColor2 = Color.FromArgb( 76 , 123 , 204 );
private static Color titlebarColor3 = Color.FromArgb( 63 , 111 , 194 );
private static Color titlebarColor4 = Color.FromArgb( 50 , 99 , 184 );
private static Color titlebarColor5 = Color.FromArgb( 38 , 88 , 174 );
private static Color titlebarColor6 = Color.FromArgb( 25 , 76 , 164 );
private static Color titlebarColor7 = Color.FromArgb( 12 , 64 , 154 );
private static Color borderColor = Color.FromArgb( 0 , 0 , 128 );
static StackRenderer()
{
titleBarGripBmp = StackView.DeserializeFromBase64(titleBarGripEnc);
}
public StackRenderer()
{
}
private void DrawTitleBar(Graphics g, Rectangle rect)
{
// Assign the image for the grip.
Image titlebarGrip = titleBarGripBmp;
// Fill the titlebar.
// This produces the gradient and the rounded-corner effect.
g.DrawLine( new Pen(titlebarColor1), rect.X, rect.Y, rect.X + rect.Width, rect.Y);
g.DrawLine( new Pen(titlebarColor2), rect.X, rect.Y + 1 , rect.X + rect.Width, rect.Y + 1 );
g.DrawLine( new Pen(titlebarColor3), rect.X, rect.Y + 2 , rect.X + rect.Width, rect.Y + 2 );
g.DrawLine( new Pen(titlebarColor4), rect.X, rect.Y + 3 , rect.X + rect.Width, rect.Y + 3 );
g.DrawLine( new Pen(titlebarColor5), rect.X, rect.Y + 4 , rect.X + rect.Width, rect.Y + 4 );
g.DrawLine( new Pen(titlebarColor6), rect.X, rect.Y + 5 , rect.X + rect.Width, rect.Y + 5 );
g.DrawLine( new Pen(titlebarColor7), rect.X, rect.Y + 6 , rect.X + rect.Width, rect.Y + 6 );
// Center the titlebar grip.
g.DrawImage(
titlebarGrip,
new Point(rect.X + ((rect.Width / 2 ) - (titlebarGrip.Width / 2 )),
rect.Y + 1 ));
}
// This method handles the RenderGrip event.
protected override void OnRenderGrip(ToolStripGripRenderEventArgs e)
{
DrawTitleBar(
e.Graphics,
new Rectangle( 0 , 0 , e.ToolStrip.Width, 7 ));
}
// This method handles the RenderToolStripBorder event.
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
DrawTitleBar(
e.Graphics,
new Rectangle( 0 , 0 , e.ToolStrip.Width, 7 ));
}
// This method handles the RenderButtonBackground event.
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
{
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
Color gradientBegin = Color.FromArgb( 203 , 225 , 252 );
Color gradientEnd = Color.FromArgb( 125 , 165 , 224 );
ToolStripButton button = e.Item as ToolStripButton;
if (button.Pressed || button.Checked)
{
gradientBegin = Color.FromArgb( 254 , 128 , 62 );
gradientEnd = Color.FromArgb( 255 , 223 , 154 );
}
else if (button.Selected)
{
gradientBegin = Color.FromArgb( 255 , 255 , 222 );
gradientEnd = Color.FromArgb( 255 , 203 , 136 );
}
using (Brush b = new LinearGradientBrush(
bounds,
gradientBegin,
gradientEnd,
LinearGradientMode.Vertical))
{
g.FillRectangle(b, bounds);
}
e.Graphics.DrawRectangle(
SystemPens.ControlDarkDark,
bounds);
g.DrawLine(
SystemPens.ControlDarkDark,
bounds.X,
bounds.Y,
bounds.Width - 1 ,
bounds.Y);
g.DrawLine(
SystemPens.ControlDarkDark,
bounds.X,
bounds.Y,
bounds.X,
bounds.Height - 1 );
ToolStrip toolStrip = button.Owner;
ToolStripButton nextItem = button.Owner.GetItemAt(
button.Bounds.X,
button.Bounds.Bottom + 1 ) as ToolStripButton;
if (nextItem == null )
{
g.DrawLine(
SystemPens.ControlDarkDark,
bounds.X,
bounds.Height - 1 ,
bounds.X + bounds.Width - 1 ,
bounds.Height - 1 );
}
}
}
#region Component Designer generated code
private void InitializeComponent()
{
this .stackStrip = new System.Windows.Forms.ToolStrip();
this .mailStackButton = new System.Windows.Forms.ToolStripButton();
this .calendarStackButton = new System.Windows.Forms.ToolStripButton();
this .contactsStackButton = new System.Windows.Forms.ToolStripButton();
this .tasksStackButton = new System.Windows.Forms.ToolStripButton();
this .stackStrip.SuspendLayout();
this .SuspendLayout();
//
// stackStrip
//
this .stackStrip.CanOverflow = false ;
this .stackStrip.Dock = System.Windows.Forms.DockStyle.Bottom;
this .stackStrip.Font = new System.Drawing.Font( " Tahoma " , 10F, System.Drawing.FontStyle.Bold);
this .stackStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this .stackStrip.Items.AddRange( new System.Windows.Forms.ToolStripItem[] {
this .mailStackButton,
this .calendarStackButton,
this .contactsStackButton,
this .tasksStackButton});
this .stackStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;
this .stackStrip.Location = new System.Drawing.Point( 0 , 11 );
this .stackStrip.Name = " stackStrip " ;
this .stackStrip.Padding = new System.Windows.Forms.Padding( 0 , 7 , 0 , 0 );
this .stackStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
this .stackStrip.Size = new System.Drawing.Size( 150 , 139 );
this .stackStrip.TabIndex = 0 ;
this .stackStrip.Text = " toolStrip1 " ;
//
// mailStackButton
//
this .mailStackButton.CheckOnClick = true ;
this .mailStackButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .mailStackButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this .mailStackButton.ImageTransparentColor = System.Drawing.Color.FromArgb((( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))));
this .mailStackButton.Margin = new System.Windows.Forms.Padding( 0 );
this .mailStackButton.Name = " mailStackButton " ;
this .mailStackButton.Padding = new System.Windows.Forms.Padding( 3 );
this .mailStackButton.Size = new System.Drawing.Size( 149 , 27 );
this .mailStackButton.Text = " Mail " ;
this .mailStackButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .mailStackButton.Click += new System.EventHandler( this .stackButton_Click);
//
// calendarStackButton
//
this .calendarStackButton.CheckOnClick = true ;
this .calendarStackButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .calendarStackButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this .calendarStackButton.ImageTransparentColor = System.Drawing.Color.FromArgb((( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))));
this .calendarStackButton.Margin = new System.Windows.Forms.Padding( 0 );
this .calendarStackButton.Name = " calendarStackButton " ;
this .calendarStackButton.Padding = new System.Windows.Forms.Padding( 3 );
this .calendarStackButton.Size = new System.Drawing.Size( 149 , 27 );
this .calendarStackButton.Text = " Calendar " ;
this .calendarStackButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .calendarStackButton.Click += new System.EventHandler( this .stackButton_Click);
//
// contactsStackButton
//
this .contactsStackButton.CheckOnClick = true ;
this .contactsStackButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .contactsStackButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this .contactsStackButton.ImageTransparentColor = System.Drawing.Color.FromArgb((( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))));
this .contactsStackButton.Margin = new System.Windows.Forms.Padding( 0 );
this .contactsStackButton.Name = " contactsStackButton " ;
this .contactsStackButton.Padding = new System.Windows.Forms.Padding( 3 );
this .contactsStackButton.Size = new System.Drawing.Size( 149 , 27 );
this .contactsStackButton.Text = " Contacts " ;
this .contactsStackButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .contactsStackButton.Click += new System.EventHandler( this .stackButton_Click);
//
// tasksStackButton
//
this .tasksStackButton.CheckOnClick = true ;
this .tasksStackButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .tasksStackButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this .tasksStackButton.ImageTransparentColor = System.Drawing.Color.FromArgb((( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))), (( int )((( byte )( 238 )))));
this .tasksStackButton.Margin = new System.Windows.Forms.Padding( 0 );
this .tasksStackButton.Name = " tasksStackButton " ;
this .tasksStackButton.Padding = new System.Windows.Forms.Padding( 3 );
this .tasksStackButton.Size = new System.Drawing.Size( 149 , 27 );
this .tasksStackButton.Text = " Tasks " ;
this .tasksStackButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this .tasksStackButton.Click += new System.EventHandler( this .stackButton_Click);
//
// StackView
//
this .AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this .AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this .Controls.Add( this .stackStrip);
this .Name = " StackView " ;
this .Load += new System.EventHandler( this .StackView_Load);
this .stackStrip.ResumeLayout( false );
this .stackStrip.PerformLayout();
this .ResumeLayout( false );
this .PerformLayout();
}
#endregion
}
}
注:本文转自MSDN
原文地址:http://msdn.microsoft.com/zh-cn/library/ms229725(v=VS.85).aspx
示例源码:
ToolStrip仿OutLook渐变样式源码