<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>r2 musings - rants, raves, and research (mostly on .NET topics) from rik robinson</title>
  <link rel="alternate" type="text/html" href="http://www.r2musings.com/" />
  <link rel="self" href="http://www.r2musings.com/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2009-09-09T22:48:59.784625-07:00</updated>
  <author>
    <name>Rik Robinson</name>
  </author>
  <subtitle>rants, raves, and research (mostly on .NET topics) from rik robinson</subtitle>
  <id>http://www.r2musings.com/</id>
  <generator uri="http://www.dasblog.net" version="2.0.7180.0">DasBlog</generator>
  <entry>
    <title>Happy Beatles Day</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/09/09/HappyBeatlesDay.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,9c11f7d2-2a39-4e96-9665-292e0b85784e.aspx</id>
    <published>2009-09-09T08:03:48.347125-07:00</published>
    <updated>2009-09-09T22:48:59.784625-07:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In case you didn’t know, The Beatles re-masters are being released today (9/9/9). 
Even more exciting is the fact that you will be able to get all of them in mono and
in stereo.  So, you can hear them the way they were meant to be heard!! 
From my understanding, though, the mono versions will not be released as single CDs. 
You’ll have to buy the box set.  The mono box is supposedly “limited edition”,
but I would bet anything that in a year, you’ll be able to buy the mono ones without
any problem (and mostly likely be able to buy the single discs without dealing with
the box set…and find them used at Amazon).  Here’s a really interesting discussion
on an Audiophile site about the <a href="http://www.tonepublications.com/music/beatles-box-in-stereo-and-mono/">mono
vs. stereo</a> editions.
</p>
        <p>
I think after reading this Audiophile opinion, I am going to buy a couple today at
lunch (ok, maybe more than two if they just happen to be sitting there) in stereo
as you can’t buy the mono ones (right now) as single CDs.  I’ll grab the mono
set at some point when it gets past the “limited edition” status …..though I am dying
to hear the earlier albums the way that The Beatles and George Martin created them.    
</p>
        <p>
Now, which ones to buy?   Leaning toward Revolver and Abbey Road. 
We’ll see what happens when I hit Best Buy to use the $20 gift card that they were
so kind to give me for giving them $1000 recently.  
</p>
        <p>
Update:  Bought Revolver, Abbey Road, and Sgt. Peppers in stereo.  Revolver
sounded so amazing that I went back to the store and bought the Mono box set (the
last one!).  All Best Buys are sold out of the Stereo box set.  Got home
and started with Please Please Me and I’m at Rubber Soul now.  Wow is all I can
say…  
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=9c11f7d2-2a39-4e96-9665-292e0b85784e" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Prism Presentation &amp;ndash; Code and Slides</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/07/01/PrismPresentationNdashCodeAndSlides.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,6a7304df-db11-40dc-b4c2-c791b96e5d57.aspx</id>
    <published>2009-07-01T15:12:42.309625-07:00</published>
    <updated>2009-07-01T15:12:42.309625-07:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recently had the pleasure of speaking at <a href="http://codestock.org/">CodeStock</a> 2009
and was very impressed with the conference overall.  The folks behind this conference
put in a lot of work and did a really great job.  I got the chance to see some
really good presentations as well.  I look forward to attending CodeStock in
the future.  
</p>
        <p>
The code and slides will be posted soon at the <a href="http://codestock.org/">CodeStock</a> site,
but I wanted to note a few things about the code that I’m including for those that
were present for my talk on Prism.  
</p>
        <ol>
          <li>
The AlbumSearch solution included is the one we worked through in the presentation. 
In the interest of time, I had skipped the creation of separate folders/namespaces
for the Views, ViewModels, etc during the presentation. For the download, I have cleaned
that up and placed everything in a much more realistic (cleaner) project structure. 
</li>
          <li>
While creating the SearchCommand in the SearchModuleViewModel during the presentation,
I had skipped adding a CanExecute handler in the interest of time.  Someone asked
me about it later and I promised to provide an example in the download and I have
done so.  You’ll notice that the Search button now enables only when there are
at least 3 letters typed in the Search Box.  (NOTE:  The only Artist Names
defined in my test data are:  Pink Floyd, Mars Volta, and Tool.  Anything
else will likely blow up as there is no Exception handling in the demo).  
</li>
          <li>
During the presentation, I mentioned a much larger solution that goes through each
concept of Prism such as Modularity (and the various ways to load Modules), UI Composition,
etc.  I have included my PrismConcepts solution in the download as well.  
</li>
          <li>
I added a link to a <a href="http://wpfslguidance.codeplex.com/">WPF and Silverlight
Comparison</a> paper from <a href="http://www.wintellect.com">Wintellect</a> to the
Resources slide as promised. 
</li>
        </ol>
        <p>
I think that covers it.  Thanks again to the organizers, the sponsors, the presenters,
and all the attendees of <a href="http://codestock.org/">CodeStock</a>.  
</p>
        <p>
Here’s the <a href="http://www.r2musings.com//downloads/prismtalk.zip">Code and Slides</a>.
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=6a7304df-db11-40dc-b4c2-c791b96e5d57" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Silverlight UI Rant #2 - ListBoxItem</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/02/12/SilverlightUIRant2ListBoxItem.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,adb7dc95-6af6-4a62-aa05-b8783ce86d9b.aspx</id>
    <published>2009-02-12T15:43:12.2129519-08:00</published>
    <updated>2009-02-12T15:43:12.2129519-08:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Tonight's recipient of my UI Rant is the Silverlight 2 ListBox, or more specifically,
the ListBoxItem.  A client recently asked me to provide an alternating row style
like the DataGrid for the ListBox.  Now, if you've ever tried to add a border
or background to your ListBoxItem, you've seen this:
</p>
        <p>
          <a href="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant2_1490A/DefaultlListBox.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="219" alt="DefaultlListBox" src="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant2_1490A/DefaultlListBox_thumb.jpg" width="183" border="0" />
          </a>  
</p>
        <p>
No problem, you say, I will simply set the HorizontalContentAlignment of my ListBox
to Stretch and all should be good.  When that doesn't do it, you'll probably
try creating/editing the ListBox's ItemTemplate....maybe adding a Grid and setting
its HorizontalAlignment to Stretch.  This too will fail.  
</p>
        <p>
Turns out, the problem is not with your ItemTemplate or even with the ListBox itself. 
The issue is in the container that actually contains your Item and that is the ListBoxItem. 
The property on the ListBox that allows you to set a custom style for this ListBoxItem
is called <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.listbox.itemcontainerstyle(VS.95).aspx" target="_blank">ItemContainerStyle</a>. 
Armed with this information, you quickly throw together a style for your ListBoxItem,
maybe like so:  
</p>
        <blockquote>
          <p>
&lt;Style TargetType="ListBoxItem" x:Key="ItemContainerStyle"&gt; 
<br />
   &lt;Setter Property="Padding" Value="3" /&gt; 
<br />
   &lt;Setter Property="HorizontalContentAlignment" Value="Stretch"
/&gt; 
<br />
   &lt;Setter Property="VerticalContentAlignment" Value="Top"
/&gt; 
<br />
   &lt;Setter Property="Background" Value="Transparent"
/&gt; 
<br />
   &lt;Setter Property="BorderThickness" Value="1" /&gt; 
<br />
&lt;/Style&gt;
</p>
        </blockquote>
        <p>
And then add that to your ListBox, like so:
</p>
        <p>
&lt;ListBox Margin="8,8,10,8" x:Name="defaultListBox" ItemsSource="{Binding}" 
<br />
   ItemTemplate="{StaticResource EmployeeItemTemplate}" 
<br />
   ItemContainerStyle="{StaticResource ItemContainerStyle}"/&gt;
</p>
        <p>
Hit F5 and just about the time you congratulate yourself on solving this, the Silverlight
Loading Animation will finish and you'll discover that your ListBox still looks exactly
like the original screenshot above.  So, what happened?  
</p>
        <p>
What happened is that the default ControlTemplate for the ListBoxItem has its HorizontalAlignment
hard-coded to Left and no matter what you do when setting the properties, it will
always be Left.  If you'll do a little diving into the full default style for
ListBoxItem, courtesy of <a href="http://blogs.msdn.com/delay/archive/2008/12/14/expanded-access-to-silverlight-2-s-generic-xaml-resources-silverlightdefaultstylebrowser-updated-for-better-compatibility.aspx" target="_blank">SilverlightDefaultStyleBrowser</a> (highly
recommended), you'll see exactly what I'm talking about in the ContentPresenter's
HorizontalAlignment property:
</p>
        <p>
          <a href="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant2_1490A/ListBoxItemDefaultStyle.jpg">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="406" alt="ListBoxItemDefaultStyle" src="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant2_1490A/ListBoxItemDefaultStyle_thumb.jpg" width="539" border="0" />
          </a>
        </p>
        <p>
The good news is that because you have the ability to replace the Template of any
control in Silverlight, you can simply "correct" this hard-coded problem
by replacing the hard-coded Left value for HorizontalAlignment with {TemplateBinding
HorizontalContentAlignment}, so your final new Style would look like this:
</p>
        <p>
&lt;Style TargetType="ListBoxItem" x:Key="StretchedItemContainerStyle"&gt; 
<br />
    &lt;Setter Property="Padding" Value="3" /&gt; 
<br />
    &lt;Setter Property="HorizontalContentAlignment" Value="Stretch"
/&gt; 
<br />
    &lt;Setter Property="VerticalContentAlignment" Value="Top"
/&gt; 
<br />
    &lt;Setter Property="Background" Value="Transparent"
/&gt; 
<br />
    &lt;Setter Property="BorderThickness" Value="1"
/&gt; 
<br />
    &lt;Setter Property="TabNavigation" Value="Local"
/&gt; 
<br />
    &lt;Setter Property="Template"&gt; 
<br />
       &lt;Setter.Value&gt; 
<br />
         &lt;ControlTemplate TargetType="ListBoxItem"&gt; 
<br />
             &lt;Grid
Background="{TemplateBinding Background}"&gt; 
<br />
               
&lt;vsm:VisualStateManager.VisualStateGroups&gt; 
<br />
               
&lt;!-- removed VSM code for brevity  --&gt; 
<br />
               
&lt;/vsm:VisualStateManager.VisualStateGroups&gt; 
<br />
               
&lt;Rectangle x:Name="fillColor" Opacity="0" Fill="#FFBADDE9"
IsHitTestVisible="False" RadiusX="1" RadiusY="1" 
/&gt; 
<br />
               
&lt;Rectangle x:Name="fillColor2" Opacity="0" Fill="#FFBADDE9"
IsHitTestVisible="False" RadiusX="1" RadiusY="1" 
/&gt; 
<br />
              
&lt;ContentPresenter x:Name="contentPresenter" Content="{TemplateBinding
Content}" ContentTemplate="{TemplateBinding ContentTemplate}" <strong><font color="#ff0000">HorizontalAlignment="{TemplateBinding
HorizontalContentAlignment}"</font></strong> Margin="{TemplateBinding Padding}" 
/&gt; 
<br />
              &lt;Rectangle
x:Name="FocusVisualElement" Stroke="#FF6DBDD1" StrokeThickness="1"
Visibility="Collapsed"  RadiusX="1" RadiusY="1" 
/&gt; 
<br />
           &lt;/Grid&gt; 
<br />
       &lt;/ControlTemplate&gt; 
<br />
       &lt;/Setter.Value&gt; 
<br />
    &lt;/Setter&gt; 
<br />
&lt;/Style&gt;
</p>
        <p>
Now your ListBoxItem will respect the value you are setting for its HorizontalContentAlignment
in your Setter above and your ListBox will finally look like this:
</p>
        <p>
          <a href="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant2_1490A/CorrectedListBox.jpg">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="CorrectedListBox" src="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant2_1490A/CorrectedListBox_thumb.jpg" width="221" border="0" />
          </a>
        </p>
        <p>
Hope that saves someone a little frustration.  I'll continue on to adding the
alternating row style in another post.  
</p>
        <p>
Here is the <a href="http://silverlight.r2musings.com/StretchedListBox/" target="_blank">live
sample</a>.
</p>
        <p>
Here is the <a href="http://www.r2musings.com/downloads/StretchedListBox.zip" target="_blank">source
code</a>.        
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=adb7dc95-6af6-4a62-aa05-b8783ce86d9b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Silverlight UI Rant #1 - DataGrid Last Column Fill</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/02/06/SilverlightUIRant1DataGridLastColumnFill.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,fde23620-55e9-427b-b2fd-f95ab209fcee.aspx</id>
    <published>2009-02-05T18:15:10.234-08:00</published>
    <updated>2009-02-12T14:46:59.8692019-08:00</updated>
    <category term="Silverlight" label="Silverlight" scheme="http://www.r2musings.com/CategoryView,category,Silverlight.aspx" />
    <category term="Silverlight 2" label="Silverlight 2" scheme="http://www.r2musings.com/CategoryView,category,Silverlight%2B2.aspx" />
    <category term="UI and Usability" label="UI and Usability" scheme="http://www.r2musings.com/CategoryView,category,UI%2Band%2BUsability.aspx" />
    <category term="UI Rant" label="UI Rant" scheme="http://www.r2musings.com/CategoryView,category,UI%2BRant.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you've used the the Silverlight 2 DataGrid, you've no doubt seen this:
</p>
        <p>
          <a href="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant1_113D2/silverlightDatagrid01.jpg">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="195" alt="silverlightDatagrid01" src="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant1_113D2/silverlightDatagrid01_thumb.jpg" width="330" border="0" />
          </a>
        </p>
        <p>
I really hate when this happens!  I've seen several forum discussions where folks
were looking to get rid of this nastiness, so I know I'm not the only one losing sleep
over it.  I haven't come across a solution in anything I've seen and so now that
I have one, I thought I'd share it.  
</p>
        <p>
I ran into this a few weeks back and tried most of the obvious things with defining
the DataGridColumns myself rather than auto-generating them.  In these defined
DataGridColumns, I tried setting the Width of the last column to "*" just like you
would a standard Grid.ColumnDefinition if you wanted to have it take up the remainder
of the space.  This did nothing more than invite my buddy, AG_E_PARSER_BAD_PROPERTY,
to show up...again.  It appears that star-sizing isn't yet implemented for DataGridColumn
derivatives.  
</p>
        <p>
This morning I was finally able to grab a few minutes to dive into DataGrid and find
out what I could do about this.  I decided to create an ExtendedDataGrid and
add a LastColumnFill DependencyProperty similar to way the DockPanel has a LastChildFill.
Most of the work is happening in this method which is called if the LastColumnFill
is true:
</p>
        <p>
private void AdjustLastColumnWidth(Size finalSize) 
<br />
{ 
<br />
    // get the Vertical ScrollBar 
<br />
    ScrollBar scrollBar = this.GetTemplateChild("VerticalScrollbar")
as ScrollBar; 
</p>
        <p>
    // compute the width to allow for the scrollbar based on it's visibility. 
<br />
    double scrollBarWidthAllowance = (scrollBar != null &amp;&amp;
scrollBar.Visibility == Visibility.Visible) ? scrollBar.ActualWidth + 2 : 2; 
</p>
        <p>
    // compute the width of all the columns excluding the last one 
<br />
    var widthOfAllButLastColumn = this.Columns 
<br />
                  
.TakeWhile(c =&gt; c != Columns.Last() &amp;&amp; 
<br />
                                           
c.Visibility == Visibility.Visible) 
<br />
                  
.Sum(c =&gt; c.ActualWidth); 
</p>
        <p>
     // set the last column width     
<br />
     this.Columns.Last().Width = new DataGridLength(finalSize.Width
- widthOfAllButLastColumn - scrollBarWidthAllowance); 
<br />
}
</p>
        <p>
This is the result:
</p>
        <p>
          <a href="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant1_113D2/silverlightDatagrid02.jpg">
            <img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="199" alt="silverlightDatagrid02" src="http://www.r2musings.com/images/blogged/AnotherAnnoyingUIRant1_113D2/silverlightDatagrid02_thumb.jpg" width="331" border="0" />
          </a>
        </p>
        <p>
Much better!  The <a href="http://silverlight.r2musings.com/LastColumnFillDataGrid/" target="_blank">live
demo</a> shows it with and without a vertical scrollbar.  Note that it also handles
auto-generated DataGridColumns if that's your thang.
</p>
        <p>
Here's the <a href="http://silverlight.r2musings.com/LastColumnFillDataGrid/" target="_blank">live
demo</a>.
</p>
        <p>
Here's the <a href="http://www.r2musings.com/downloads/LastColumnFillDataGrid.zip" target="_blank">code</a>.
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=fde23620-55e9-427b-b2fd-f95ab209fcee" />
      </div>
    </content>
  </entry>
  <entry>
    <title>HtmlPage.PopupWindow vs. HtmlWindow.Navigate</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/02/04/HtmlPagePopupWindowVsHtmlWindowNavigate.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,a36342be-7563-4f95-b9c7-2944df682fad.aspx</id>
    <published>2009-02-03T20:15:15.085-08:00</published>
    <updated>2009-02-03T20:16:46.80375-08:00</updated>
    <category term="Silverlight" label="Silverlight" scheme="http://www.r2musings.com/CategoryView,category,Silverlight.aspx" />
    <category term="Silverlight 2" label="Silverlight 2" scheme="http://www.r2musings.com/CategoryView,category,Silverlight%2B2.aspx" />
    <content type="html">&lt;p&gt;
I was recently looking at various ways of launching an external window from inside
a &lt;a href="silverlight.net" target=_blank&gt;Silverlight 2&lt;/a&gt; application.&amp;nbsp; Dusting
off your javascript brain cell, you'll recall that to open a popup dialog in "the
old days", we'd use &lt;a href="http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx" target=_blank&gt;window.open()&lt;/a&gt;.&amp;nbsp;
I knew about the &lt;a href="http://msdn.microsoft.com/en-us/library/cc645076(VS.95).aspx" target=_blank&gt;HtmlBridge&lt;/a&gt; available
in &lt;a href="http://silverlight.net" target=_blank&gt;Silverlight 2&lt;/a&gt; and I had used
it for several other nifty interactions between my managed code and the DOM.&amp;nbsp;
So, I went looking for an equivalent to &lt;a href="http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx" target=_blank&gt;window.open()&lt;/a&gt; and
came across the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpage.popupwindow(VS.95).aspx" target=_blank&gt;HtmlPage.PopupWindow&lt;/a&gt;()
method.&amp;nbsp; If you'll recall the javascript &lt;a href="http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx" target=_blank&gt;window.open()&lt;/a&gt; method
is defined as such:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
window.open( [&lt;em&gt;sURL&lt;/em&gt;] [, &lt;em&gt;sName&lt;/em&gt;] [, &lt;em&gt;sFeatures&lt;/em&gt;]);
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The HtmlPage.PopupWindow() is defined as: 
&lt;/p&gt;
&lt;dl&gt;
&lt;blockquote&gt; 
&lt;p&gt;
HtmlPage.PopupWindow(string navigateToUri, string target, HtmlPopupWindowOptions options); 
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/dl&gt;
&lt;p&gt;
Perfect!&amp;nbsp; ...or so I thought.&amp;nbsp; I fully expected that if I called &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpage.popupwindow(VS.95).aspx" target=_blank&gt;PopupWindow&lt;/a&gt;()
like this:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
HtmlPopupWindowOptions options = new HtmlPopupWindowOptions() 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Directories = false, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Location = false, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Menubar = false, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Status = false, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Toolbar = false, 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; 
&lt;br&gt;
HtmlPage.PopupWindow(new Uri("&lt;a href="http://www.wintellect.com" )?&gt;http://www.wintellect.com&lt;/a&gt;,
"_blank", options);
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
..that I'd get a new browser window with the default width/height on the monitor that
the launching browser is on. 
&lt;/p&gt;
&lt;p&gt;
After all, if I called &lt;a href="http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx" target=_blank&gt;window.open()&lt;/a&gt; with
equivalent arguments as follows that's what would happen:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
string features = String.Format("directories=no,location=no,menubar=no,status=no,toolbar=no"); 
&lt;br&gt;
HtmlPage.Window.Navigate(new Uri("&lt;a href="http://www.r2musings.com" )?&gt;http://www.r2musings.com&lt;/a&gt;,
"_blank", features);&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Instead, I get a small window that launches on Monitor 1.&amp;nbsp; I do my main work
on my Monitor 2 and I kept waiting for my popup window only to realize that it was
on the other monitor.&amp;nbsp; I really hate applications that do this! 
&lt;/p&gt;
&lt;p&gt;
Looking into Reflector, the issue seems to be that if options is passed as null in
the last parameter of &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpage.popupwindow(VS.95).aspx" target=_blank&gt;PopupWindow&lt;/a&gt;(),
the call is simply forwarded to &lt;a href="http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx" target=_blank&gt;window.open().&lt;/a&gt;&amp;nbsp;
But, if you pass an instance of &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpopupwindowoptions(VS.95).aspx" target=_blank&gt;HtmlPopupWindowOptions&lt;/a&gt; (even
with no properties set) to &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpage.popupwindow(VS.95).aspx" target=_blank&gt;PopupWindow&lt;/a&gt;(),
the ToFeaturesString() that gets called to convert this strongly-typed version of
the features to the string that is needed for &lt;a href="http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx" target=_blank&gt;window.open()&lt;/a&gt; is
also changing the height/width/top/left of the popup window.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Looking over the documentation...yes, I'm male and sometimes do that *after* nothing
else works. ....anyway, there it is in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpage.popupwindow(VS.95).aspx" target=_blank&gt;remarks
of HtmlPage.PopupWindow()&lt;/a&gt;.&amp;nbsp; All the ugly details and the admission that my
popup would be altered.&amp;nbsp; Documented or not, it's not acceptable to my client
and I'm not putting my name on anything that launches a browser on the wrong monitor!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
That's when I decided to have another look at &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlwindow.navigate(VS.95).aspx" target=_blank&gt;HtmlWindow.Navigate()&lt;/a&gt; which
seems to more accurately mirror the behavior that I would expect out of something
that purports to wrap &lt;a href="http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx" target=_blank&gt;window.open().&lt;/a&gt;&amp;nbsp;
Going this route, we lose the strong typing of the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlpopupwindowoptions(VS.95).aspx" target=_blank&gt;HtmlPopupWindowOptions&lt;/a&gt;,
but in exchange we get exactly what we are expecting when calling &lt;a href="http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx" target=_blank&gt;window.open().&lt;/a&gt;&amp;nbsp;
The call using &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.browser.htmlwindow.navigate(VS.95).aspx" target=_blank&gt;HtmlWindow.Navigate()&lt;/a&gt; looks
like this:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; string features = "directories=no,location=no,menubar=no,status=no,toolbar=no"; 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; HtmlPage.Window.Navigate(new Uri("&lt;a href="http://www.r2musings.com" )?&gt;http://www.r2musings.com&lt;/a&gt;,
"_blank", features);&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
This will fire a new window on the correct monitor and will honor the default settings
for width/height/top/left.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Here's the &lt;a href="http://www.r2musings.com/downloads/launchexternalwindow.zip" target=_blank&gt;code&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Here's a &lt;a href="http://silverlight.r2musings.com/launchexternalwindow" target=_blank&gt;live
sample&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=a36342be-7563-4f95-b9c7-2944df682fad" /&gt;</content>
  </entry>
  <entry>
    <title>Yngwie Malmsteen syndrome (Silverlight 2 Scroller revisited)</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/01/22/YngwieMalmsteenSyndromeSilverlight2ScrollerRevisited.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,1fee07d0-9ab9-4010-ac35-36551e9cf0e3.aspx</id>
    <published>2009-01-22T10:39:29.755-08:00</published>
    <updated>2009-02-03T20:17:13.756875-08:00</updated>
    <category term="Silverlight" label="Silverlight" scheme="http://www.r2musings.com/CategoryView,category,Silverlight.aspx" />
    <category term="Silverlight 2" label="Silverlight 2" scheme="http://www.r2musings.com/CategoryView,category,Silverlight%2B2.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Earlier this month, I <a href="http://www.wintellect.com/CS/blogs/rrobinson/archive/2009/01/12/silverlight-2-scroller.aspx" target="_blank">blogged</a> about
a <a href="http://silverlight.net" target="_blank">Silverlight</a> 2 Scroller control
that I had labored over for the better part of a weekend.  The entire time I
was working on this Scroller, I had this small, dirty feeling that what I had created
was somehow <strong>way</strong> more than what I needed to accomplish my end goal. 
But, time was short, it got the job done and I figured that I could always revisit
it at some point.   
</p>
        <p>
Fast forward a few days as I was reading <a href="http://wildermuth.com/" target="_blank">Shawn
Wildermuth's blog</a> and I come across <a href="http://wildermuth.com/2009/01/18/Fun_with_ItemsControl" target="_blank">his
post</a> on the <a href="http://silverlight.net" target="_blank">Silverlight</a> ItemsControl
and realized what that dirty feeling was all about.  I was exactly the guy he
was talking about that was trying to bastardize the <a href="http://silverlight.net" target="_blank">Silverlight</a> ListBox
into something else...namely the ItemsControl.  So, I revisited the Scroller
and was able to remove about 50% or more of the code and still achieve my goal. 
No custom ListBox, etc.  
</p>
        <p>
I think it's part of most any process, really.  As you work on making something
better you tend to keep adding and adding more code until you reach a saturation point
where you need to step back and just start removing things.  
</p>
        <p>
It made me think of so many guitarists in the 80's that just kept adding and adding
notes and playing faster and faster until the music just became guitar masturbation
instead of anything musical.  (These guys wouldn't have known a whole note if
it hit them in the face). On the other hand, you take someone like <a href="http://en.wikipedia.org/wiki/David_Gilmour" target="_blank">David
Gilmour</a> that can play one note and absolutely convey way more than the shred monsters
could ever muster.  It's all part of the learning process.  There's a curve
graphed somewhere (I'm sure) that shows the guitarist's ascension to knowing when
NOT to play.
</p>
        <p>
So, who is <a href="http://en.wikipedia.org/wiki/Yngwie_Malmsteen" target="_blank">Yngwie
Malmsteen</a> and what does he have to do with this post?  You can find out more
than you ever wanted to know about Yngwie <a href="http://en.wikipedia.org/wiki/Yngwie_Malmsteen" target="_blank">here</a>. 
Yngwie was the <a href="http://www.5min.com/Video/Yngwie-Malmsteen---insane-speed-playing-10238" target="_blank">poster
boy</a> for never quite knowing when to stop adding notes and he flashed before my
eyes when I looked back and my original Scroller code.  Anyway, thanks <a href="http://wildermuth.com/" target="_blank">Shawn</a> for
saving me from that fate.  
</p>
        <p>
The updated code is <a href="http://www.r2musings.com/downloads/SilverlightScrollerWithItemsControl.zip" target="_blank">here</a>. 
Here is the <a href="http://silverlight.r2musings.com/SilverlightScroller/default.htm" target="_blank">live
demo.</a></p>
        <p>
I'll leave the original code <a href="http://www.r2musings.com/downloads/SilverlightScroller.zip" target="_blank">here</a> in
case you want to get it and make fun of me.  
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=1fee07d0-9ab9-4010-ac35-36551e9cf0e3" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Silverlight System.ExecutionEngineException</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/01/15/SilverlightSystemExecutionEngineException.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,6e950805-d321-461e-9c56-18d617c4f2e3.aspx</id>
    <published>2009-01-15T12:46:11.558-08:00</published>
    <updated>2009-02-03T20:17:32.788125-08:00</updated>
    <category term="Silverlight" label="Silverlight" scheme="http://www.r2musings.com/CategoryView,category,Silverlight.aspx" />
    <category term="Silverlight 2" label="Silverlight 2" scheme="http://www.r2musings.com/CategoryView,category,Silverlight%2B2.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just a quick note that will hopefully save someone the pain that I just went through
chasing yet another exception in Silverlight with nothing to go on from Visual Studio. 
(I really hope that there is some better feedback coming on Silverlight applications
when you hit a runtime error in the future).  Anyway, I was digging in my App.xaml
today to do a bit of much-needed clean up and then started getting System.ExecutionEngineException
being thrown at runtime.  I was just about to the point of pulling out WinDbg
(see <a href="http://devmeat.com/show/89422" target="_blank">this post</a> on that)
and I decided that maybe Blend could help me out.  After all, it really does
owe me one for all the times it wouldn't load my xaml without telling me why.
</p>
        <p>
So, I opened the project in Blend and sure enough, it gave me the old "Invalid XAML"
message that I was expecting when I attempted to open my app.xaml.  However,
it also gave me a bunch of errors about not finding properties from one of my styles. 
I took a wild shot and clicked the View XAML Code link that Blend offered.  It
placed me on a style that I had added earlier and I immediately noticed that I had
left off the TargetType attribute.  Adding this cured the problem.  
</p>
        <p>
And for those that just scan for the code...
</p>
        <p>
          <strong>Bad:</strong>
        </p>
        <p>
        &lt;Style x:Key="MyButtonStyle"&gt; 
<br />
            &lt;Setter Property="FontSize"
Value="10" /&gt; 
<br />
        &lt;/Style&gt;
</p>
        <p>
          <strong>Good:</strong>
        </p>
        <p>
        &lt;Style x:Key="MyButtonStyle" TargetType="Button"&gt; 
<br />
            &lt;Setter Property="FontSize"
Value="10" /&gt; 
<br />
        &lt;/Style&gt;
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=6e950805-d321-461e-9c56-18d617c4f2e3" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Silverlight 2 Scroller</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/01/11/Silverlight2Scroller.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,583a3592-0dbb-4238-9115-ff7b8fc0c65c.aspx</id>
    <published>2009-01-10T23:44:44.732-08:00</published>
    <updated>2009-02-03T20:18:18.256875-08:00</updated>
    <category term="Silverlight" label="Silverlight" scheme="http://www.r2musings.com/CategoryView,category,Silverlight.aspx" />
    <category term="Silverlight 2" label="Silverlight 2" scheme="http://www.r2musings.com/CategoryView,category,Silverlight%2B2.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last week I had opportunity to really dive into some fun with a Silverlight 2 ListBox. 
It all started with a requirement for a simple Scroller control.  You know, the
simple left-to-right scrollers that you see in many applications?  I've seen
them in several places, yet when I searched around for a Silverlight version that
met my criteria I came up empty.  I have seen many great Image Carousel controls
around, but overall the majority of them were not quite "calm enough" for a typical
Line of Business application and I wasn't really intending on using images only. 
There were some really great "pieces" that I found as I attempted to assemble this
control and now that I have a functional version, I thought I'd share it with the
community.        
</p>
        <p>
The first challenge here was that I needed to have two horizontal rows of items in
the Scroller.  Thanks to a post over at <a href="http://msmvps.com/blogs/theproblemsolver/archive/2008/11/18/some-more-fun-with-a-silverlight-listbox.aspx" target="_blank">The
Problem Solver</a> and the WrapPanel from the <a href="http://www.codeplex.com/Silverlight" target="_blank">Silverlight
Toolkit</a>, I was able to pull this off pretty easily.  So, I went to work on
a custom template for a ScrollBar.  My initial thought here was that I'd stretch
the ScrollBar to the Height of the ListBox, delete the Thumb, make the Background
Transparent, and delete the Large Increase/Decrease controls.  This worked great,
but the scrolling was what you would typically get when clicking the Small Increase/Decrease
portions of a ScrollBar (i.e. the little arrows).  What we really needed was
for each click to move to the next/previous column of items.  
</p>
        <p>
At this point, I decided to lose the custom template for the ScrollBar and just go
with a pair of RepeatButtons for the Previous/Next buttons so that I could have a
little more control over things.  As I didn't want to see the ScrollBar, I had
to hide it by setting the HorizontalScrollBarVisibility and the VerticalScrollBarVisibility
to Hidden in the ControlTemplate of the ListBox.  
</p>
        <p>
The ScrollViewer (that is part of our ListBox) is what we want to manipulate to give
this per-item scroll experience to the user.  There are a couple of important
properties of the ScrollViewer that we care about.  First, the <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.scrollablewidth(VS.95).aspx" target="_blank">ScrollableWidth</a> which
represents the width of the area that can be scrolled.  You can envision this
as placing all of the columns end-to-end (including those that are scrolled out of
sight) and getting the total width.  Secondly, the <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.horizontaloffset(VS.95).aspx" target="_blank">HorizontalOffset</a> which
is simply the indicator of the current scroll position (relative to the entire <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.scrollablewidth(VS.95).aspx" target="_blank">ScrollableWidth</a>). 
Using these two properties and the ItemWidth, we can compute how far to move the ScrollViewer
for each click of our Previous/Next buttons.  
</p>
        <p>
Since I needed direct access to the ScrollViewer in my ListBox and its not readily
available from the default ListBox, I decided to create a custom control with a ScrollHost
property.  I saw this little trick used in the ItemContainerGenerator class of
the <a href="http://www.codeplex.com/Silverlight" target="_blank">Silverlight Toolkit</a> (which
has some really great utility code along with the awesome controls....well worth your
time to investigate that).  Also, since I was using a WrapPanel as my ItemsPanelTemplate
and I needed the ItemWidth for my calculations and since WrapPanel just happens to
have an ItemWidth property, I decided to expose that as a property as well. 
I overrode the <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.preparecontainerforitemoverride.aspx" target="_blank">PrepareContainerForItemOverride</a>()
method in my custom ScrollerListBox in order to set these properties.  This worked
pretty well and with a little math and a call to ScrollViewer.ScrollToHorizontalOffset(),
I was able to create the scrolling behavior that I needed.  
</p>
        <p>
But....wouldn't it be cool if the scrolling was animated?  ...it is Silverlight
after all and every demo that I've ever seen at a conference with Silverlight has
animation.  This proved to be a little more difficult as you can't directly animate
HorizontalOffset.  While searching for a way to solve that, I came across a really
great solution on <a href="http://www.robertjantuit.nl/" target="_blank">Rob's Usability
Development blog</a> for creating an <a href="http://www.robertjantuit.nl/index.php/2008/09/13/storyboard-animation-for-the-scrollviewer-animationhelpercontrol/" target="_blank">AnimationHelperControl</a> to
give you something to animate.  His post also made use of his excellent <a href="http://www.robertjantuit.nl/index.php/2008/08/13/animateto-extension-methods-in-silverlight-2/" target="_blank">AnimateTo
extension methods</a> that he describes in another <a href="http://www.robertjantuit.nl/index.php/2008/08/13/animateto-extension-methods-in-silverlight-2/" target="_blank">post</a>.
</p>
        <p>
As I didn't want to hard code the amount of time it took to animate the scroll, I
added a ScrollTime Dependency Property to the ScrollerControl and was able to set
that declaratively in my Page.Xaml.   
</p>
        <p>
I think the final result gives a nice subtle use of animation that doesn't distract
the user from their data.  (As an aside...for a REALLY nice usage of animation
in a Silverlight application, check out the one that <a href="http://perseus.franklins.net/dnrtvplayer/player.aspx?ShowNum=0115" target="_blank">Billy
Hollis shows in this video</a> on <a href="http://www.dnrtv.com/" target="_blank">dnrTV</a>).
</p>
        <p>
My demo uses employees that I've generated in a TestData class and then binds the
various fields to the ItemTemplate of my ListBox using standard Silverlight DataBinding. 
I was a bit too lazy to create a separate image for each of my employees, so I used
the same image for each.  These images could just as easily be streamed from
the database, but that's a different post. 
</p>
        <p>
Here is the <a href="http://silverlight.r2musings.com/SilverlightScroller/default.htm" target="_blank">live
demo</a>.
</p>
        <p>
Here is the <a href="http://www.r2musings.com/downloads/SilverlightScroller.zip" target="_blank">project
source</a>.
</p>
        <p>
I have a few more ideas for the ScrollerControl such as the ability to drag between
the items (sort of like the iPhone).  Anyway, I'll post those as I implement
them.  
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=583a3592-0dbb-4238-9115-ff7b8fc0c65c" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Initializing the FROM value of a Silverlight 2 Animation</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2009/01/04/InitializingTheFROMValueOfASilverlight2Animation.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,4515ddc4-d167-4192-9ed9-0383ef75e1b9.aspx</id>
    <published>2009-01-03T16:23:48.994-08:00</published>
    <updated>2009-02-03T20:18:41.6475-08:00</updated>
    <category term="Silverlight" label="Silverlight" scheme="http://www.r2musings.com/CategoryView,category,Silverlight.aspx" />
    <category term="Silverlight 2" label="Silverlight 2" scheme="http://www.r2musings.com/CategoryView,category,Silverlight%2B2.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently, I was attempting to create my own popup dialog. I had specific requirements
in mind for this dialog, including:  
</p>
        <ol>
          <li>
I wanted to animate the Width/Height from 0x0 to the ActualWidth/ActualHeight 
</li>
          <li>
I wanted to animate the Opacity from 0 to 1 
</li>
          <li>
I wanted to animate the Top/Left properties from the point of mouse click (an icon
in my case) to the center of the screen and back to the original point of mouse click
when the user closed the dialog 
</li>
        </ol>
        <p>
All of these are fairly easy to accomplish using a Storyboard with an x:Name specified. 
In the case of my requirement #3 above, I merely needed to set the From value of my
animation and call the Begin() method, like so (for purposes of illustration, I'll
confine this to the Canvas.Left property only...you can apply the same logic to the
Canvas.Top property and it's all in the accompanying project):
</p>
        <blockquote>
          <p>
&lt;Storyboard x:Name="MoveDialogStoryboard"&gt; 
<br />
  &lt;DoubleAnimation 
<br />
       x:Name="theDialogAnimation" 
<br />
       Storyboard.TargetName="theDialog"  
<br />
       Storyboard.TargetProperty="(Canvas.Left)" 
<br />
      To="0" Duration="0:0:0.5" /&gt; 
<br />
  &lt;/Storyboard&gt;
</p>
          <p>
theDialogAnimation.From = 800;   // this value would actually come from
getting the mouse position via GetPosition() 
<br />
(MoveDialogStoryboard as Storyboard).Begin(); 
</p>
        </blockquote>
        <p>
This all works as you would expect.  However, I really liked the idea of isolating
all of my dialog states into one place and the <a href="http://msdn.microsoft.com/en-us/library/system.windows.visualstatemanager(VS.95).aspx" target="_blank">Visual
State Manager</a> sounded like the perfect solution...that is, until I tried to set
the FROM value programmatically and got hit with a NullReferenceException every time
I tried to reference my named Animation.  
</p>
        <p>
I tried several things and ended up <a href="http://silverlight.net/forums/p/61296/153074.aspx#153074" target="_blank">posting
my issue</a> to the <a href="http://silverlight.net/" target="_blank">Silverlight</a><a href="http://silverlight.net/forums/" target="_blank">forum</a> where <a href="http://wildermuth.com/" target="_blank">Shawn
Wildermuth</a> was kind enough to offer a solution.  Shawn's solution was to
simply set the property to the value before calling GoToState() in my code. 
This made perfect sense and I ran off to give it a try.  It worked...once. 
My animation would fire once but then appear to be swallowed or ignored on subsequent
clicks.  After further investigation, this turned out to be an artifact of the
fact that I was never setting my VisualState back to the original state...something
you don't have to do when using a Storyboard outside of the Visual State Manager. 
So, that fixed that issue and Shawn's solution worked.  However, I didn't really
see any way using this solution to animate back to the original point of mouse click.    
</p>
        <p>
Either way, it didn't really satisfy my initial curiosity for WHY I couldn't programmatically
set the FROM value when my animation was inside a Visual State Manager, so I pressed
on.  Thanks to a couple of blog posts (<a href="http://pagebrooks.com/archive/2008/11/05/finding-a-storyboard-in-the-visualstatemanager.aspx" target="_blank">here</a> and <a href="http://math-geek-rock-chick.blogspot.com/2008/11/silverlight-dynamically-finding.html" target="_blank">here</a>)
and some pretty ugly LINQ, I was finally able to programmatically set the FROM value
and have it animate my dialog from the original point of mouse click with a Storyboard
inside of a VisualState like so:  
</p>
        <blockquote>
          <p>
public void ShowDialog(Point startingPosition) 
<br />
{ 
<br />
     Storyboard storyboard = Utils.FindStoryboard(LayoutRoot,
"DialogStates", "Open"); 
<br />
     (storyboard.Children[0] as DoubleAnimation).From = startingPosition.X; 
<br />
     (storyboard.Children[1] as DoubleAnimation).From = startingPosition.Y; 
<br />
     VisualStateManager.GoToState(this, "Open", true); 
<br />
}
</p>
          <p>
// This is the definition of the extension method FindStoryboard() shown above (which
is where the real work happens) 
<br />
public static Storyboard FindStoryboard(this FrameworkElement parent, string groupName,
string stateName) 
<br />
{ 
<br />
     VisualState visualState = VisualStateManager.GetVisualStateGroups(parent) 
<br />
         .Cast&lt;VisualStateGroup&gt;().Where(group
=&gt; group.Name == groupName) 
<br />
         .SingleOrDefault() 
<br />
         .States.Cast&lt;VisualState&gt;() 
<br />
         .Where(state =&gt; state.Name ==
stateName) 
<br />
         .SingleOrDefault(); 
<br /><br />
     if (visualState != null) 
<br />
         return visualState.Storyboard;     
<br /><br />
     return null;     
<br />
}
</p>
        </blockquote>
        <p>
All of that being said, I didn't end up going this route nor do I recommend it. 
It's way too brittle and just plain ugly in my opinion.  In the end, I chose
to create my Open and Closed Storyboard animations for my popup dialog as standard
Resource Storyboards where I don't have to reset the State before calling and I don't
have to jump through hoops to set the value and, most importantly, I can set a name
for the Animation and directly set the property value.  For the actual "modes"
of my dialog (assuming there are multiple views for the dialog), I used the VSM to
represent things like EntryView, EditView, etc.  I think this offers a much cleaner
solution. 
<br /><br />
I've put together a quick demo to illustrate both calling the Storyboard directly
and using a Storyboard in a VSM.  The live version is <a href="http://silverlight.r2musings.com/InitializingAnimations/" target="_blank">here</a> and
the project source is available <a href="http://www.r2musings.com/downloads/InitializingAnimations.zip" target="_blank">here</a>.  
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=4515ddc4-d167-4192-9ed9-0383ef75e1b9" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Photosynth</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/08/28/Photosynth.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,8c308b7d-f2a6-4140-81ac-9519f9620dc0.aspx</id>
    <published>2008-08-28T07:01:28.473625-07:00</published>
    <updated>2008-08-28T07:01:28.473625-07:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those that missed the announcement last week, <a href="http://photosynth.net/Default.aspx" target="_blank">PhotoSynth</a> is
live and after a pretty bumpy start looks like you can at least play around with it
now.  I've managed to load two of my sets of photos from a trip to the High Sierras
a couple of years ago.  It definitely still has its bumps as I had to cancel
and restart the synth several times as it would hang indefinitely.  I didn't
get really high "synthy" scores as I wasn't taking the photos with <a href="http://photosynth.net/Default.aspx" target="_blank">PhotoSynth</a> in
mind at the time.  However, the <a href="http://photosynth.net/Default.aspx" target="_blank">PhotoSynth</a> team
has supplied a <a href="http://photosynth.net/documentation/Photosynth%20Guide%20v6b_CC.pdf" target="_blank">document</a> of
points to keep in mind while shooting photos if you intend to make a <a href="http://photosynth.net/Default.aspx" target="_blank">PhotoSynth</a> out
of them.  I can't wait to try it out when I actually shot the photos for synthing. 
There are numerous really great examples on the <a href="http://photosynth.net/Default.aspx" target="_blank">PhotoSynth</a> site,
including some shot by the <a href="http://www.nationalgeographic.com/" target="_blank">National
Geographic Society</a> photographers.  I like that you can go full screen (or
full browser) as that really helps make the experience a bit more of an immersive
experience.  Also, the slide show and thumbnails really help as well.  
</p>
        <p>
          <a href="http://photosynth.net/Default.aspx" target="_blank">PhotoSynth</a> is now
giving 20GB (!) for free to anyone to try <a href="http://photosynth.net/Default.aspx" target="_blank">PhotoSynth</a>. 
It takes a LONG time to use 20GB in JPEGS!  Give it a try.  
</p>
        <p>
Since my photos didn't all relate to one another, <a href="http://www.photosynth.net" target="_blank">PhotoSynth</a> sort
of creates mini-PhotoSynths inside each.  You'll want to check the thumbnails
page to see the various scenes that it stitched together.  
</p>
        <p>
Here are links to my first two:
</p>
        <p>
          <a href="http://photosynth.net/view.aspx?cid=15de38f7-bfae-4b49-9ee8-1b42bc0d3940" target="_blank">High
Sierras - Dana Plateau</a>
        </p>
        <p>
          <a href="http://photosynth.net/view.aspx?cid=561b88e1-1ed5-43c1-8206-c2cea92b4f3b" target="_blank">High
Sierras - Saddlebag Lake Area</a>
        </p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=8c308b7d-f2a6-4140-81ac-9519f9620dc0" />
      </div>
    </content>
  </entry>
  <entry>
    <title>devLink Conference</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/08/27/devLinkConference.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,2d09f285-1932-422a-90a0-a009b345f00d.aspx</id>
    <published>2008-08-27T06:29:59.551-07:00</published>
    <updated>2009-02-03T20:18:02.5225-08:00</updated>
    <category term="CSS" label="CSS" scheme="http://www.r2musings.com/CategoryView,category,CSS.aspx" />
    <category term="Presentations" label="Presentations" scheme="http://www.r2musings.com/CategoryView,category,Presentations.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
This past weekend a few of us Wintellectuals made the trek Atlanta to Murfreesboro
TN to present at the annual <a href="http://devlink.net/Default.aspx" target="_blank">devLink</a> conference. 
I really can't say enough about the level of professionalism and obvious preparation
that went into <a href="http://devlink.net/Default.aspx" target="_blank">devLink</a>.  <a href="http://www.devlink.net/AboutUs/tabid/54/Default.aspx" target="_blank">John
Kellar</a>, <a href="http://www.devlink.net/AboutUs/tabid/54/Default.aspx" target="_blank">Tommy
Norman</a>, and <a href="http://www.devlink.net/AboutUs/tabid/54/Default.aspx" target="_blank">Leanna
Baker</a> and the entire team that made it happen are well deserving of accolades
for their accomplishment.  The conference was held on the campus of <a href="http://www.mtsu.edu/" target="_blank">Middle
Tennessee State University</a> which was also perfectly suited for the task. 
All of the rooms were nice, large, and well-equipped (even though said equipment was
apparently timed to shut off exactly at the 1-1/2 presentation mark).  As a vegetarian,
I can't say too much for the food, but that's pretty much on par with any gathering...I've
learned to carry plenty or protein bars over the years.  Bottom line, for $50
this absolutely has to be best value for your buck in training (other than Wintellect's <a href="http://www.devscovery.com/" target="_blank">DevScovery</a>,
of course *smile*).  
</p>
        <p>
While my colleagues, <a href="http://www.wintellect.com/CS/blogs/sporter/default.aspx" target="_blank">Steve
Porter</a> and <a href="http://www.mindfusioncorp.com/weblog/" target="_blank">Keith
Rome</a>, offered four really great talks on <a href="http://www.silverlight.net" target="_blank">Silverlight</a> topics,
I was there to present on all the new things available with Cascading Style Sheets
(sarcasm off).  Actually, my CSS talk went really well and I received lots of
good feedback which I'll continue to roll into that presentation.  All sarcasm
aside, most web developers (especially those in Enterprise positions) are stuck with
CSS for the foreseeable future and this presentation really aims to go through the
major areas where I see developers struggling and try and cast some light on how all
those pieces play together.  Thanks to all that made it to the talk (standing
room only!) and for the emails that I've received since. 
</p>
        <p>
I've updated the slides and code with this past weekend's revisions and you can get
it here:
</p>
        <p>
          <a href="http://www.r2musings.com/downloads/CSSDeepDive.zip" target="_blank">CSS Deep
Dive for the ASP.NET Developer</a>
        </p>
        <p>
I believe that the other presentations will be posted on the <a href="http://www.devlink.net" target="_blank">devLink</a> website,
so keep an eye out for them.  There were a lot of good ones! 
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=2d09f285-1932-422a-90a0-a009b345f00d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Updated Deep Dive CSS code</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/04/01/UpdatedDeepDiveCSSCode.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,3978a7c0-316e-4aa6-a2f8-376693931c08.aspx</id>
    <published>2008-04-01T14:25:35.496-07:00</published>
    <updated>2008-04-01T14:25:35.496375-07:00</updated>
    <category term="CSS" label="CSS" scheme="http://www.r2musings.com/CategoryView,category,CSS.aspx" />
    <category term="Presentations" label="Presentations" scheme="http://www.r2musings.com/CategoryView,category,Presentations.aspx" />
    <category term="Visual Studio 2008" label="Visual Studio 2008" scheme="http://www.r2musings.com/CategoryView,category,Visual%2BStudio%2B2008.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thanks to all the folks that came to my <a href="http://www.r2musings.com/2007/10/08/DeepDiveCSSForTheASPNETDeveloper.aspx">Deep
Dive CSS for the ASP.NET Developer</a> session at this past weekend's Atlanta Code
Camp.  I got some really great feedback from the evaluations and will definitely
incorporate some suggestions into this presentation in the future.  
</p>
        <p>
The abstract, updated code and slides are available here:
</p>
        <p>
 <a href="http://www.r2musings.com/ct.ashx?id=8b850af0-d2c0-4a03-b721-5282f4fcab1b&amp;url=http%3a%2f%2fwww.r2musings.com%2fdownloads%2fCSSDeepDive.zip">Deep
Dive CSS for the ASP.NET Developer</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=3978a7c0-316e-4aa6-a2f8-376693931c08" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Top-10 Application-Design Mistakes</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/02/20/Top10ApplicationDesignMistakes.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,06a23a46-e6ee-48cc-8c20-9fc2847afa98.aspx</id>
    <published>2008-02-19T21:52:10.185-08:00</published>
    <updated>2008-02-19T21:53:22.5605-08:00</updated>
    <category term="Silverlight" label="Silverlight" scheme="http://www.r2musings.com/CategoryView,category,Silverlight.aspx" />
    <category term="UI and Usability" label="UI and Usability" scheme="http://www.r2musings.com/CategoryView,category,UI%2Band%2BUsability.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
We saw it when the world first discovered Flash and I'm sure we've got a lot of it
left to live through with <a href="http://silverlight.net" target="_blank">Silverlight</a>,
so this is pretty timely advice from the "Godfather of Web Usability" himself, <a href="http://www.useit.com/jakob/" target="_blank">Jakob
Nielsen</a>.  This should be required for every web developer.  There are
some great links within the post as well, so be sure to click around.
</p>
        <p>
          <a href="http://www.useit.com/alertbox/application-mistakes.html" target="_blank">Top-10
Application-Design Mistakes</a>
        </p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=06a23a46-e6ee-48cc-8c20-9fc2847afa98" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Painless Free Annual Credit Reports</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/01/25/PainlessFreeAnnualCreditReports.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,b44f1bf2-a94f-4332-a8a4-f3d00ef515ae.aspx</id>
    <published>2008-01-25T10:30:24.77125-08:00</published>
    <updated>2008-01-25T10:30:24.77125-08:00</updated>
    <category term="Random" label="Random" scheme="http://www.r2musings.com/CategoryView,category,Random.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
There is finally a (relatively) painless way to receive your Free Annual Credit Report
from the Big 3 Credit Agencies.  It is a really good idea to keep your eye on
your credit report these days.  The folks at <a href="http://www.annualcreditreport.com/" target="_blank">AnnualCreditReport.com</a> have
integrated the registration processes for the three Credit Agencies into a seamless
wizard type experience.  I was able to print all three of mine in less than 10
minutes. 
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=b44f1bf2-a94f-4332-a8a4-f3d00ef515ae" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Weather Widget now in the Silverlight.net Showcase</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/01/25/WeatherWidgetNowInTheSilverlightnetShowcase.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,2c270816-1d80-4335-b593-bc19b7535b77.aspx</id>
    <published>2008-01-25T00:07:29.161875-08:00</published>
    <updated>2008-01-25T00:07:29.161875-08:00</updated>
    <category term="Silverlight 1.0" label="Silverlight 1.0" scheme="http://www.r2musings.com/CategoryView,category,Silverlight%2B1.0.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
The <a href="http://silverlight.r2musings.com/weatherwidget" target="_blank">Silverlight
Weather Widget</a> made it to the <a href="http://silverlight.net/Showcase/" target="_blank">Silverlight.net
Showcase</a> and is mentioned in the News section of the <a href="http://silverlight.net" target="_blank">Home
Page</a>.  WooHooo.  
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=2c270816-1d80-4335-b593-bc19b7535b77" />
      </div>
    </content>
  </entry>
  <entry>
    <title>The New Generic Kid on the Block - HashSet&amp;lt;T&amp;gt;</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/01/25/TheNewGenericKidOnTheBlockHashSetltTgt.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,c5527d87-55c1-47fa-a349-bbd955d7c2be.aspx</id>
    <published>2008-01-24T23:53:51.786-08:00</published>
    <updated>2008-02-26T05:12:35.59875-08:00</updated>
    <category term="Generics" label="Generics" scheme="http://www.r2musings.com/CategoryView,category,Generics.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In mathematics, a Set is typically thought of as a collection of <strong>distinct</strong> objects
that is usually defined by some rule that determines whether they are a member of
that particular Set.  For example, a Set could be defined to contain "all the
odd numbers under 100" or "every number divisible by 2" or whatever.  The main
points here being that the objects in a Set are distinct (i.e. NO duplicate objects
are allowed) and the objects are not ordered or sorted in any way.  (If you really
feel the need to geek out on Set Theory, be my <a href="http://en.wikipedia.org/wiki/Set" target="_blank">guest</a>).
</p>
        <p>
According to the <a href="http://msdn2.microsoft.com/en-us/library/bb359438.aspx" target="_blank">MSDN
Documentation for HashSet</a>, "a set is a collection that contains no duplicate elements,
and whose elements are in no particular order."  Sound familiar?  In the
.NET Base Class Library, there has never been a true Set class until now with the
release of .NET 3.5 and the brand-spanking-new System.Collections.Generic.HashSet&lt;T&gt;
class.  
</p>
        <p>
In the past, when we needed to implement a Set in .NET, we sort of bastardized the
List&lt;T&gt; or other unsuspecting Collection classes into something like this:
</p>
        <blockquote>
          <p>
int[] intArray = new int[]{ 1, 2, 5, 7, 4, 1, 7, 9, 8}; 
<br />
List&lt;int&gt; intList = new List&lt;int&gt;(); 
<br />
foreach(int theInt in intArray) 
<br />
{ 
<br />
  // checking to make sure that the object is not in our List before adding 
<br />
  //  so we are calling Contains() and then Add() on every time through
the loop 
<br />
  if (!intList.Contains(theInt)) 
<br />
    intList.Add(theInt); 
<br />
}
</p>
        </blockquote>
        <p>
What we needed was a Set that would let us just keep adding objects to it and free
us from having to worry about it being there first.  A recent example of when
I really needed a true Set class was while working on the <a href="http://silverlight.r2musings.com/weatherwidget" target="_blank">Weather
Widget</a>.  <a href="http://www.weather.com" target="_blank">The Weather Channel</a> provides
some 40+ images for use in their SDK, yet in the Weather Widget I never need more
than maximum of 11 (and usually less as there is usually duplication).  So, I
had the idea to dynamically zip the images that I actually needed for a given Zip
Code and use that file for my image assets in Silverlight via CreateXamlFromDownloader. 
Obviously, I don't want these images duplicated in the zip file.  So, I came
up with this: 
</p>
        <blockquote>
          <p>
HashSet&lt;string&gt; assets = new HashSet&lt;string&gt;(); 
<br />
foreach (ForecastDay day in forecast.Days) 
<br />
{ 
<br />
  // no Exception here if duplicate...it just doesn't add it. 
<br />
  assets.Add(Server.MapPath(String.Format("~/images/{0}", day.IconDay))); 
<br />
} 
<br />
Utility.WriteZipFile(assets.ToArray&lt;string&gt;()) 
</p>
        </blockquote>
        <p>
This just scratches the surface of what HashSet&lt;T&gt; is capable of.  There
are member methods available for most Set operations, such as <a href="http://msdn2.microsoft.com/en-us/library/bb293080.aspx">IntersectWith</a>(), <a href="http://msdn2.microsoft.com/en-us/library/bb342097.aspx">UnionWith</a>(), <a href="http://msdn2.microsoft.com/en-us/library/bb358446.aspx">IsSubsetOf</a>(), <a href="http://msdn2.microsoft.com/en-us/library/bb346923.aspx">IsSupersetOf</a>(),
RemoveWhere(), etc.   Here's a link to all of the <a href="http://msdn2.microsoft.com/en-us/library/bb341004.aspx" target="_blank">HashSet&lt;T&gt;
Members</a>.
</p>
        <p>
Recall that being a member of a set depends on <em>some rule</em> that determines
this membership.  With the HashSet&lt;T&gt;, you can define your own rule of
what it means to be in a Set.  For a good example of defining your own EqualityComparer,
see <a href="http://blogs.msdn.com/bclteam/archive/2006/11/09/introducing-hashset-t-kim-hamilton.aspx" target="_blank">Introducing
HashSet&lt;T&gt; from Kim Hamilton</a> on the <a href="http://blogs.msdn.com/bclteam/default.aspx" target="_blank">BCL
Team Blog</a>.
</p>
        <p>
So, welcome the New Kid on the Block to the Generic Collections.  
</p>
        <p>
One last random link I had on the subject for those interested in LINQ: 
<br /><a href="http://msdn2.microsoft.com/en-us/library/bb397728.aspx" target="_blank">Good
side-by-side comparison of the HashSet and LINQ Set Operations</a></p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=c5527d87-55c1-47fa-a349-bbd955d7c2be" />
      </div>
    </content>
  </entry>
  <entry>
    <title>A Better Way to Remove a Trailing Slash from a Path</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/01/18/ABetterWayToRemoveATrailingSlashFromAPath.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,80da82b0-4cb0-4d83-8e1c-3959cd8b692b.aspx</id>
    <published>2008-01-17T21:32:41.936-08:00</published>
    <updated>2008-01-17T21:35:03.561875-08:00</updated>
    <category term="C#" label="C#" scheme="http://www.r2musings.com/CategoryView,category,C%23.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
How many times have you written this to trim a trailing slash from a path:
</p>
        <font face="Calibri" color="#000000" size="3">
          <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
            <p>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
                <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> (myPath.EndsWith(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"\\"</span>))  
/* or "/" in the case of a URI  */<br />
  myPath <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> myPath.Substring(0,
myPath.Length-1); </span>
            </p>
          </blockquote>
        </font>
        <p>
Next time, try this: 
</p>
        <font face="Calibri" color="#000000" size="3">
          <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
            <p>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">myPath <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> myPath.TrimEnd(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">char</span>[]{'\\',
'<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">/</span>'});
</span>
            </p>
          </blockquote>
        </font>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">In
addition to String.TrimStart() and String.TrimEnd(), there is an overload on String.Trim()
that accepts a character array. There are good examples of usage in the MSDN
Library.  </font>
          </span>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">Here
are the links:  </font>
          </span>
        </p>
        <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
          <p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
            <a href="http://msdn2.microsoft.com/en-us/library/system.string.aspx">System.String</a>    <a href="http://msdn2.microsoft.com/en-us/library/d4tt83f9.aspx">Trim(char[])</a>    <a href="http://msdn2.microsoft.com/en-us/library/system.string.trimstart.aspx">TrimStart(char[])</a>    <a href="http://msdn2.microsoft.com/en-us/library/system.string.trimend.aspx">TrimEnd(char[])</a></p>
        </span>
        <p>
 
</p>
        <font face="Courier New" color="#ff0000">
        </font>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=80da82b0-4cb0-4d83-8e1c-3959cd8b692b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Back from the Silverlight Tour</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/01/18/BackFromTheSilverlightTour.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,0f801d65-5e79-4469-a4f5-34ebe72af74e.aspx</id>
    <published>2008-01-17T19:49:55.702-08:00</published>
    <updated>2008-01-17T19:58:36.64-08:00</updated>
    <category term="ASP.NET Ajax" label="ASP.NET Ajax" scheme="http://www.r2musings.com/CategoryView,category,ASP.NET%2BAjax.aspx" />
    <category term="Silverlight" label="Silverlight" scheme="http://www.r2musings.com/CategoryView,category,Silverlight.aspx" />
    <content type="html">&lt;p class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;
I had a chance to attend the recent Atlanta stop of &lt;a href="http://www.wildermuthconsulting.com/" target=_blank&gt;Wildermuth
Consulting&lt;/a&gt;’s &lt;a href="http://www.silverlight-tour.com/" target=_blank&gt;Silverlight
Tour&lt;/a&gt; this past week and wanted to offer some quick comments about it here for
anyone considering the class.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;
Going into the class, I had about 3 weeks of heads-down knowledge of Silverlight 1.0,
but I had spent no time at all with Silverlight 1.1 (now 2.0).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I
had also read &lt;a href="http://www.r2musings.com/ct.ashx?id=e3bbac57-25e3-4e3c-b583-6b1c3f4085c2&amp;amp;url=http%3a%2f%2fwww.amazon.com%2fgp%2fproduct%2f0672330075%3fie%3dUTF8%26tag%3dr2musings-20%26linkCode%3das2%26camp%3d1789%26creative%3d9325%26creativeASIN%3d0672330075" target=_blank&gt;Silverlight
1.0 Unleashed&lt;/a&gt;, watched a lot of the webcasts available and I had just (mostly)
completed my &lt;a href="http://www.r2musings.com/MyFirstLookAtTheSilverLight.aspx"&gt;first
Silverlight 1.0 project&lt;/a&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;
The 3-day &lt;a href="http://www.silverlight-tour.com/" target=_blank&gt;Silverlight Tour&lt;/a&gt; begins
with Day 1 of mostly concepts and terminology and an introduction into the Expression
Suite.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;This was mostly review for me,
but I still managed several “a-ha” moments during the day as the presenter, &lt;a href="http://www.adoguy.com/" target=_blank&gt;Shawn
Wildermuth&lt;/a&gt;, explained the “why” behind a lot of the concepts and decisions that
were made in regards to Silverlight.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;It
was a good “shoring up” of my skills in the foundations of Silverlight.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;
Day 2 was all about the code.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;We spent
about ½ the day on Silverlight 1.0 and the other ½ on Silverlight 1.1. &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;We
had several labs, lecture, and discussion throughout the day.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;(A
good mix of the three, in my opinion).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;One
of the strengths of the class was that when questions would come up, we had the flexibility
in the schedule to actually go off on short tangents and explore different ideas as
a class.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I walked away from this day
with a much better understanding of how the code side of Silverlight works with the
design side, as well as, a lot of anticipation for Silverlight 2.0.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;
Day 3 was the main reason I had taken the class and Shawn did not disappoint.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;One
of the things I struggled most with while working through the &lt;a href="http://silverlight.r2musings.com/weatherwidget/default.aspx"&gt;Weather
Widget&lt;/a&gt; was how to organize projects and where do I use this method from the AJAX
assemblies and where do I use Silverlight, etc. &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;These
are the types of things that just aren’t in books yet, but Shawn has been there, done
that and you are getting it first-hand.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;We
learned about the integration points with ASP.NET Ajax and Silverlight, and even newer
technologies such as ASP.NET Data Services and the Entity Framework.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;Further,
we talked about packaging of Silverlight controls and other ways of thinking about
the generation of XAML…ways I hadn’t thought about until then.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Very
cool stuff from someone that truly understands the subject matter and takes the time
to explain things in such a way as to really help everyone “get it”.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;
So, I walk away with a head full of knowledge about all kinds of fun things that will
be filling my life over the next year (and dying to tear my entire project for the
Weather Widget apart and do it with all the new Best Practices I managed to acquire
over the past 3 days)!&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;font face=Calibri color=#000000 size=3 font &lt;&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt;&lt;img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=0f801d65-5e79-4469-a4f5-34ebe72af74e" /&gt;</content>
  </entry>
  <entry>
    <title>Squeeze Your ASP.NET Applications Until They Scream</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/01/11/SqueezeYourASPNETApplicationsUntilTheyScream.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,7355f956-ae03-408e-9a2d-8d661cb64a8d.aspx</id>
    <published>2008-01-11T08:50:52.144-08:00</published>
    <updated>2008-02-26T05:15:22.47375-08:00</updated>
    <category term="ASP.NET" label="ASP.NET" scheme="http://www.r2musings.com/CategoryView,category,ASP.NET.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
A couple of weeks ago, I had the good fortune of catching a webcast from <a href="http://www.wintellect.com/cs/blogs/jprosise/default.aspx">Jeff
Prosise</a> of <a href="http://www.wintellect.com/">Wintellect</a> entitled: 
"Squeeze Your ASP.NET Applications Until They Scream".  I was really impressed
with the content and with Jeff's presentation of same.  The event was sponsored
by Compuware and they have given me permission to post a link to the presentation.  
</p>
        <p>
          <a href="http://www.compuware.com/media.asp?cid=70170000000HVN4">Squeeze Your ASP.NET
Applications Until They Scream</a>
        </p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=7355f956-ae03-408e-9a2d-8d661cb64a8d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>My First Look at the (Silver)Light</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2008/01/07/MyFirstLookAtTheSilverLight.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,e3bbac57-25e3-4e3c-b583-6b1c3f4085c2.aspx</id>
    <published>2008-01-06T21:25:20.312-08:00</published>
    <updated>2008-01-06T21:34:27.078125-08:00</updated>
    <category term="ASP.NET Ajax" label="ASP.NET Ajax" scheme="http://www.r2musings.com/CategoryView,category,ASP.NET%2BAjax.aspx" />
    <category term="Expression" label="Expression" scheme="http://www.r2musings.com/CategoryView,category,Expression.aspx" />
    <category term="Silverlight 1.0" label="Silverlight 1.0" scheme="http://www.r2musings.com/CategoryView,category,Silverlight%2B1.0.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <font face="Calibri" color="#000000" size="3">
          <p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
Over the holidays, I was finally able to catch up on some reading and take some time
to play with Silverlight 1.0.<span style="mso-spacerun: yes">  </span>The two
books that I spent the most time with are 
</p>
        </font>
        <a href="http://www.amazon.com/gp/product/1933988142?ie=UTF8&amp;tag=r2musings-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1933988142" target="_blank">ASP.NET
Ajax in Action</a>
        <font face="Calibri" color="#000000" size="3">and </font>
        <a href="http://www.amazon.com/gp/product/0672330075?ie=UTF8&amp;tag=r2musings-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0672330075" target="_blank">Silverlight
1.0 Unleashed</a>
        <font face="Calibri" color="#000000" size="3">.<span style="mso-spacerun: yes">  </span>Both
of these, I HIGHLY recommend!<span style="mso-spacerun: yes">  </span><p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
My first project is a Silverlight 1.0 application that I call Weather Widget (for
lack of a more exciting moniker).<span style="mso-spacerun: yes">  </span>The
Weather Widget will accept a 5-digit US Zip Code and return a 5-day forecast from
The Weather Channel.<span style="mso-spacerun: yes">  </span><span style="mso-spacerun: yes"> </span>You
can see it in action <a href="http://silverlight.r2musings.com/weatherwidget/default.aspx"><span style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none">here</span></a>:<span style="mso-spacerun: yes">  
</span></p></font>
        <a href="http://silverlight.r2musings.com/weatherwidget/default.aspx" target="_blank">Weather
Widget</a>
        <font face="Calibri" color="#000000" size="3">.<span style="mso-spacerun: yes">  </span>(Note:<span style="mso-spacerun: yes">  </span>This
will require the Silverlight 1.0 plug-in). 
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
I also took the time in this project to use (experiment) with a lot of new toys such
as:<span style="mso-spacerun: yes">  </span></p><p class="MsoListParagraphCxSpFirst" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><span style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span></span>LINQ
to XML (and the XDocument/XElement classes) 
</p><p class="MsoListParagraphCxSpMiddle" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><span style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span></span>New
C# language enhancements including Automatic Properties, Object Initializers, Implicitly
typed variables, etc.<span style="mso-spacerun: yes">  </span></p><p class="MsoListParagraphCxSpMiddle" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><span style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span></span>Javascript
key events – some hard-learned (and forgotten and now painfully re-learned) lessons
to share here
</p><p class="MsoListParagraphCxSpMiddle" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><span style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span></span>Integration
of ASP.NET Ajax and Silverlight – my implementation here is rudimentary right now
as I’m still sorting through the most efficient blending of these two technologies
</p><p class="MsoListParagraphCxSpMiddle" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><span style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span></span>Integration
of DOM Elements with Silverlight (good post from Keith on that topic
</p></font>
        <a href="http://www.mindfusioncorp.com/weblog/2007/06/14/Quick+Tip+Input+Controls+In+Silverlight.aspx" target="_blank">here</a>)
<font face="Calibri" color="#000000" size="3"><p class="MsoListParagraphCxSpMiddle" style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><span style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span></span>Expression
Studio (mostly Blend) - <span style="mso-spacerun: yes"> </span>I have much to
say about this (some of which you can read in this discussion in Shawn’s comments 
</p></font><a href="http://www.adoguy.com/2007/12/21/A_Year_with_Silverlight.aspx" target="_blank">here</a><font face="Calibri" color="#000000" size="3">).<span style="mso-spacerun: yes">  </span>Overall,
I really like a lot of things about Blend.<span style="mso-spacerun: yes">  </span>I
am finding myself there more these days though I miss a lot of things about working
in Macromedia (now Adobe) Fireworks (which I have used for MANY years for all of my
design work).<span style="mso-spacerun: yes">  </span>One upcoming post I’m working
on here is “Top 10 Things I miss from Fireworks while working in Blend”.<span style="mso-spacerun: yes">  </span><p class="MsoListParagraphCxSpLast" style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"><span style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><span style="mso-list: Ignore">·<span style="FONT: 7pt 'Times New Roman'">         </span></span></span>Using
JSON – I had never used it so now I have
</p><p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
Guess that about covers it.<span style="mso-spacerun: yes">  </span>I’ll link
back to the above points as I blog about each.<span style="mso-spacerun: yes">  </span></p><p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
I have several things I’m planning to add (and am open to suggestions), but wanted
to get it out there in its current state.<span style="mso-spacerun: yes">  </span>Once
I am happy with it, I’ll post it to the gallery on the 
</p></font><a href="http://www.silverlight.net/" target="_blank">Silverlight.net</a><font face="Calibri" color="#000000" size="3"> site.<span style="mso-spacerun: yes">  </span><p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
Let me know if the Widget blows up…at this point, I’ve tested only on IE7 and Firefox
on my laptop (Windows Vista64).<span style="mso-spacerun: yes">  </span></p><p class="MsoNormal" style="MARGIN: 0in 0in 10pt"></p></font><p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
 
</p><img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=e3bbac57-25e3-4e3c-b583-6b1c3f4085c2" /></div>
    </content>
  </entry>
  <entry>
    <title>Expression Blend December Preview is out</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2007/12/08/ExpressionBlendDecemberPreviewIsOut.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,b2f434e2-be51-40d0-b016-9f9b021ebe43.aspx</id>
    <published>2007-12-07T19:50:31.687-08:00</published>
    <updated>2007-12-07T19:50:31.6875-08:00</updated>
    <category term="Expression" label="Expression" scheme="http://www.r2musings.com/CategoryView,category,Expression.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
This page has a list of changes, as well as, a link to get the bits:
</p>
        <p>
          <a href="http://www.microsoft.com/expression/products/download.aspx?key=blend2preview">http://www.microsoft.com/expression/products/download.aspx?key=blend2preview</a>
        </p>
        <p>
 
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=b2f434e2-be51-40d0-b016-9f9b021ebe43" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Sharing Folders in Remote Desktop</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2007/10/17/SharingFoldersInRemoteDesktop.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,13c139f8-6ff8-4878-a6d9-2b37b49bf33b.aspx</id>
    <published>2007-10-17T12:52:28.864-07:00</published>
    <updated>2007-10-17T16:05:06.02025-07:00</updated>
    <category term="Windows Tips" label="Windows Tips" scheme="http://www.r2musings.com/CategoryView,category,Windows%2BTips.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, I was struggling with getting some code deployed to a client's test
server and called him to double-check FTP credentials and such.   He casually
mentions having the ability to share your hard drive (and other devices) with a Remote
Desktop session.  How many times would that have come in handy?!?!  
Anyway, I dug into it further and it works!  
</p>
        <p>
Check out <a href="http://blogs.inetium.com/blogs/dmork/archive/2007/10/03/transferring-files-via-remote-desktop.aspx">Dan
Mork's blog posting</a> on the topic as he does a great job of walking you through
the process.  (Make sure and check the comments as there is another really good
tip there about saving your Remote Desktop connection with your configuration).  
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=13c139f8-6ff8-4878-a6d9-2b37b49bf33b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Deep Dive: CSS for the ASP.NET Developer</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2007/10/08/DeepDiveCSSForTheASPNETDeveloper.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,8b850af0-d2c0-4a03-b721-5282f4fcab1b.aspx</id>
    <published>2007-10-08T11:38:05.676-07:00</published>
    <updated>2008-04-01T14:18:24.027625-07:00</updated>
    <category term="CSS" label="CSS" scheme="http://www.r2musings.com/CategoryView,category,CSS.aspx" />
    <category term="Presentations" label="Presentations" scheme="http://www.r2musings.com/CategoryView,category,Presentations.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thanks everyone for the comments and tips offered after I gave this presentation
at Alabama Code Camp, as well as, at the Atlanta Cutting Edge .NET group last week. 
I received several "so <em>that's</em> how it works" comments and that was exactly
the point of this talk.
</p>
        <p>
Here is the abstract of the presentation:
</p>
        <p>
          <span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
            <font color="#000000">This
will be a thorough discussion of all that is CSS.<span style="mso-spacerun: yes">  </span>Whether
you know it as the necessary evil or the great enabler (that just hasn’t quite clicked
for you yet), you should walk away with something valuable from this discussion.<span style="mso-spacerun: yes">  </span>I
will begin with the basic box model and travel all the way to the holiest of grails
(the <i style="mso-bidi-font-style: normal">no tables here, </i>two and three<i style="mso-bidi-font-style: normal"></i>column
ASP.NET Master Page layout…yours to take home for free!).<span style="mso-spacerun: yes">  </span>Along
the way, we’ll touch on some CSS Best Practices and gotchas in ASP.NET and take a
look at the new CSS tools in Visual Studio 2008 (Orcas).</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
            <font color="#006400">
              <span style="mso-spacerun: yes">
                <font color="#000000">Get
the download</font> </span>
            </font>
            <a href="http://www.r2musings.com/downloads/CSSDeepDive.zip">
              <font color="#006400">here</font>
            </a>
            <font color="#006400">.</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
            <font color="#006400">Note: 
The solution file provided is from Visual Studio 2008 (Orcas) Beta 2.  There
is nothing .NET 3.5 specific (as most of it is HTML anyway).  </font> </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">Update
04/01/08:  Updated the download to compile under Visual Studio 2008 RTM</span>
        </p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=8b850af0-d2c0-4a03-b721-5282f4fcab1b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Time for T  :  An Introduction to .NET Generics</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2007/10/08/TimeForTAnIntroductionToNETGenerics.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,65958793-e50f-478d-b888-252541188665.aspx</id>
    <published>2007-10-08T11:24:56.332-07:00</published>
    <updated>2007-10-09T07:59:10.33275-07:00</updated>
    <category term="Generics" label="Generics" scheme="http://www.r2musings.com/CategoryView,category,Generics.aspx" />
    <category term="Presentations" label="Presentations" scheme="http://www.r2musings.com/CategoryView,category,Presentations.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Finally able to grab a minute to post my code and slides from the Introduction
to Generics presentation that I did this past weekend at the Alabama Code Camp at
the University of Alabama.  
</p>
        <p>
This is the abstract from the presentation:
</p>
        <p class="MsoNoSpacing" style="MARGIN: 0in 0in 0pt">
          <font color="#000000">With the release of the 2.0 version of the .NET Framework, Generics
became first class citizens </font>
        </p>
        <p class="MsoNoSpacing" style="MARGIN: 0in 0in 0pt">
          <font color="#000000">in the Common Language Runtime.<span style="mso-spacerun: yes">  </span>Yet,
many still shy away from using them because of perceived difficulty or other misconceptions.<span style="mso-spacerun: yes">  </span><span style="mso-spacerun: yes"> </span>This
presentation will seek to dispel a few of these myths and offer a gentle introduction
into using Generics on a daily basis.<span style="mso-spacerun: yes">  </span>Along
the way, I’ll also demonstrate language enhancements in the .NET 3.5 runtime that
lend themselves nicely to working with Generics.<span style="mso-spacerun: yes">  </span></font>
        </p>
        <p class="MsoNoSpacing" style="MARGIN: 0in 0in 0pt">
          <font color="#000000">
            <span style="mso-spacerun: yes">
            </span>
          </font> 
</p>
        <p class="MsoNoSpacing" style="MARGIN: 0in 0in 0pt">
          <font color="#000000">
            <span style="mso-spacerun: yes">Get the download <a href="http://www.r2musings.com/downloads/generics101.zip">here</a>.  </span>
          </font>
        </p>
        <p>
          <font color="#006400">Note:  The code is compiled on Visual Studio 2008 (Orcas)
Beta 2.  The only project in the solution that uses .NET 3.5 specific code is
the Collections project.  This uses C# 3.5 Automatic Properties and Property
Initializers.</font>  
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=65958793-e50f-478d-b888-252541188665" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Visual Studio 2008 (Orcas) CSS tools</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2007/10/08/VisualStudio2008OrcasCSSTools.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,b224ede7-9e69-4b86-9b0a-fa0ad46bb92a.aspx</id>
    <published>2007-10-08T10:45:59.473-07:00</published>
    <updated>2007-10-08T11:44:17.364-07:00</updated>
    <category term="CSS" label="CSS" scheme="http://www.r2musings.com/CategoryView,category,CSS.aspx" />
    <category term="Visual Studio 2008" label="Visual Studio 2008" scheme="http://www.r2musings.com/CategoryView,category,Visual%2BStudio%2B2008.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p class="MsoNormal" style="MARGIN: 0in 0in 10pt 0.5in">
          <font color="#000000">I just returned from speaking at the Alabama Code Camp 5.0 in
Birmingham.  One of my presentations was <a href="http://www.r2musings.com/DeepDiveCSSForTheASPNETDeveloper.aspx">Deep
Dive CSS for the ASP.NET Developer</a> and I had hoped to spend some time on the tools
in Orcas for working with Cascading Style Sheets.  Unfortunately, I did not get
a chance to do that due to the time constraints, so I wanted to post some of my better
links on that subject...</font>
        </p>
        <p class="MsoNormal" style="MARGIN: 0in 0in 10pt 0.5in">
          <b style="mso-bidi-font-weight: normal">
            <font face="Calibri" color="#000000" size="3">How
to: Use the Apply Styles and Manage Styles Windows<br /></font>
          </b>
          <a href="http://msdn2.microsoft.com/en-us/library/bb398979(VS.90).aspx">
            <font face="Calibri" size="3">http://msdn2.microsoft.com/en-us/library/bb398979(VS.90).aspx</font>
          </a>
        </p>
        <p class="MsoNormal" style="MARGIN: 0in 0in 10pt">
          <font color="#000000">
            <font size="3">
              <font face="Calibri">
                <b style="mso-bidi-font-weight: normal">
                  <span style="mso-tab-count: 1">            </span>How
to: Use the CSS Properties Window<br /></b>
                <span style="mso-tab-count: 1">            </span>
              </font>
            </font>
          </font>
          <a href="http://msdn2.microsoft.com/en-us/library/bb398902(VS.90).aspx">
            <font face="Calibri" size="3">http://msdn2.microsoft.com/en-us/library/bb398902(VS.90).aspx</font>
          </a>
        </p>
        <p class="MsoNormal" style="MARGIN: 0in 0in 10pt 0.5in">
          <b style="mso-bidi-font-weight: normal">
            <span style="mso-fareast-font-family: 'Times New Roman'">
              <font face="Calibri" color="#000000" size="3">How
to: Use the Direct Style Application Toolbar<br /></font>
            </span>
          </b>
          <a href="http://msdn2.microsoft.com/en-us/library/bb398977(VS.90).aspx">
            <font face="Calibri" size="3">http://msdn2.microsoft.com/en-us/library/bb398977(VS.90).aspx</font>
          </a>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=b224ede7-9e69-4b86-9b0a-fa0ad46bb92a" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Generic Methods: Find Controls by Type</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2007/10/08/GenericMethodsFindControlsByType.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,397a381d-7298-47db-9f2f-742f95f4f074.aspx</id>
    <published>2007-10-08T08:07:05.926-07:00</published>
    <updated>2007-10-08T08:07:05.9265-07:00</updated>
    <category term="Generics" label="Generics" scheme="http://www.r2musings.com/CategoryView,category,Generics.aspx" />
    <content type="html">&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;Although
this was originally part of my recent Generics presentation, I have received several
requests to publish it separately.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;The
reason that I created this originally was that I found myself often-times wanting
a strongly-typed list of all the checkboxes / buttons / etc in my code-behind/beside
pages.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;There is the Page.FindControl(string
id), but that only allows you to get a control by id and it returns a Control.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I
wanted something more specific, yet generic enough to use as a Utility.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;This
was screaming for Generic Methods, so below is what I came up with. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;I
use this constantly and hope that someone else gets some mileage out of it.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;If
you have improvements, please post them.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;For
example usage, download the full Generics presentation.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; System;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; System.Collections.Generic;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; System.Text;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; System.Text.RegularExpressions;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; System.Web.UI;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; System.Web.UI.WebControls;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;namespace&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; r2musings.Web.UI.WebControls&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;class&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Utility&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#region&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; FindControlsByType&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Returns
a generic list of controls of a provided type starting at a 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;a
provided base control (works recursively) 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Example
Usage:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;List&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;Button&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt; buttonList
= Utility.FindControlsByType&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;Button&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;(testPanel);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;This
would return a list of all Buttons contained anywhere within testPanel&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;typeparam
name="T"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;Type of control&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/typeparam&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param
name="parentControl"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;Base control to start search&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/param&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;T&amp;gt;
FindControlsByType&amp;lt;T&amp;gt;(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Control&lt;/span&gt;&lt;font color=#000000&gt; parentControl) &lt;/font&gt;&lt;span style="COLOR: blue"&gt;where&lt;/span&gt;&lt;font color=#000000&gt; T:
System.Web.UI.&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Control&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;//
new up our return list&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;T&amp;gt;
returnList = &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;T&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;//
loop through all controls and call internal recursion to 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;add
all controls of type T to the returnList&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt;&lt;font color=#000000&gt; (&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Control&lt;/span&gt;&lt;font color=#000000&gt; childControl &lt;/font&gt;&lt;span style="COLOR: blue"&gt;in&lt;/span&gt;&lt;font color=#000000&gt; parentControl.Controls)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;InternalFindControlsByType&amp;lt;T&amp;gt;(childControl,
returnList);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;//
return our List&amp;lt;T&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;return&lt;/span&gt;&lt;font color=#000000&gt; returnList;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#endregion&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#region&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt; Recursion
Method&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Should
NOT call this method directly&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;This
is for the internal recursion of FindControlsByType()&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/summary&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;typeparam
name="T"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;Type of control&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/typeparam&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param
name="parentControl"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;Base control to start search&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/param&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: gray"&gt;///&lt;/span&gt;&lt;span style="COLOR: green"&gt; &lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;param
name="returnList"&amp;gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;List to add Controls&lt;/span&gt;&lt;span style="COLOR: gray"&gt;&amp;lt;/param&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;private&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;static&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;void&lt;/span&gt;&lt;font color=#000000&gt; InternalFindControlsByType&amp;lt;T&amp;gt;(&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Control&lt;/span&gt;&lt;font color=#000000&gt; parentControl, &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;List&lt;/span&gt;&lt;font color=#000000&gt;&amp;lt;T&amp;gt;
returnList) &lt;/font&gt;&lt;span style="COLOR: blue"&gt;where&lt;/span&gt;&lt;font color=#000000&gt; T: System.Web.UI.&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Control&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color=#000000&gt; (returnList
== &lt;/font&gt;&lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;font color=#000000&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;throw&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt;&lt;font color=#000000&gt; &lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;ArgumentNullException&lt;/span&gt;&lt;font color=#000000&gt;(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"Null
List passed to InternalFindControlsByType"&lt;/span&gt;&lt;font color=#000000&gt;);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;if&lt;/span&gt;&lt;font color=#000000&gt; (parentControl &lt;/font&gt;&lt;span style="COLOR: blue"&gt;is&lt;/span&gt;&lt;font color=#000000&gt; T)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;returnList.Add((T)
parentControl);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;font color=#000000&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: blue"&gt;foreach&lt;/span&gt;&lt;font color=#000000&gt; (&lt;/font&gt;&lt;span style="COLOR: #2b91af"&gt;Control&lt;/span&gt;&lt;font color=#000000&gt; childControl &lt;/font&gt;&lt;span style="COLOR: blue"&gt;in&lt;/span&gt;&lt;font color=#000000&gt; parentControl.Controls)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;//
call this method recursively to get all child controls&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;InternalFindControlsByType(childControl,
returnList);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="COLOR: blue; FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;#endregion&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;
&lt;span style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;}&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=397a381d-7298-47db-9f2f-742f95f4f074" /&gt;</content>
  </entry>
  <entry>
    <title>Google, Live, MSDN Search within Visual Studio 2008</title>
    <link rel="alternate" type="text/html" href="http://www.r2musings.com/2007/10/08/GoogleLiveMSDNSearchWithinVisualStudio2008.aspx" />
    <id>http://www.r2musings.com/PermaLink,guid,3fa5f8e1-234f-4cc0-b28a-3567849aca48.aspx</id>
    <published>2007-10-07T18:07:39.52-07:00</published>
    <updated>2007-10-07T18:10:43.660875-07:00</updated>
    <category term="Visual Studio 2005" label="Visual Studio 2005" scheme="http://www.r2musings.com/CategoryView,category,Visual%2BStudio%2B2005.aspx" />
    <category term="Visual Studio 2008" label="Visual Studio 2008" scheme="http://www.r2musings.com/CategoryView,category,Visual%2BStudio%2B2008.aspx" />
    <category term="Macros" label="Macros" scheme="http://www.r2musings.com/CategoryView,category,Macros.aspx" />
    <content type="html">&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font face=Verdana size=2&gt;Since &lt;/font&gt;&lt;a href="http://devcow.com/user/Profile.aspx?UserID=2105"&gt;&lt;font face=Verdana size=2&gt;Matt
Ranlett&lt;/font&gt;&lt;/a&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt; has now harassed me several times
for removing the Google/MSDN macro from my blog, I decided to repost it.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I
have added Live Search to the mix this time and I have tested all of the searches
on Visual Studio 2008 Beta 2.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;
&lt;font face=Verdana size=2&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt;The
background on this was that I was spending a lot of time on Google and MSDN (aren't
we all?) and was going back and forth from Visual Studio to the browser, so I decided
to try and integrate my searches&amp;nbsp;into Visual Studio.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The
resultant experience is that you can highlight any text in Visual Studio and press
your assigned keyboard shortcut and receive search results from your favorite search
engines WITHIN the Visual Studio&amp;nbsp;IDE.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; It
really comes in handy!&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt;In
the&amp;nbsp;code below, I have provided the URLs for searching against Google, Live,
and MSDN.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;It should be pretty obvious
when you look at the macro what you would need to do to configure any other search
engines.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; Be sure to uncomment one (and only
one) of the &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face=Verdana&gt;&lt;font size=2&gt;url
lines in the code when you setup each macro.&lt;/font&gt;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font face=Verdana&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font face=Verdana size=2&gt;For
those not familiar with macros, here are the steps to add a macro in Visual Studio&lt;/font&gt;:&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font color=#000000&gt;&lt;font face=Verdana&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;1)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;Go
to &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Tools
| Macros | Macros IDE&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;2)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;Once
in the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Macros
IDE&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;,
you can create a new Module or you can just add this to the default “My Macros” module.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;3)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;To
add to My Macros, just right click on it in the Project Explorer and choose &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Add
| Add New Item&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;(if
you don’t see the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Project
Explorer&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;,
try &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;View
| Project Explorer&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;4)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;When
the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Add
New Item Dialog&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; shows
up, select Code File and enter GoogleSearch and click OK.&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;5)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;Paste
the Code for &lt;b style="mso-bidi-font-weight: normal"&gt;GoogleSearch&lt;/b&gt; below into this
file and save it.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;/span&gt;&lt;font size=3&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Make
sure that you uncomment one of the url lines in the code.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;6)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;Click &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Debug
| Build&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; and
then close the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Macros
IDE&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;.&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;7)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;Once
back in VS2005, click &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Tools
| Customize&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; and
click the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Keyboard&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; button
at the bottom of the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Customize
Dialog&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;8)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;In
the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Show
Commands Containing&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; box,
type “macros” and look for an entry that looks like this:&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;“Macros.MyMacros.GoogleSearch.GoogleSearch”.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;(This
could be different depending on where you created the macro).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;9)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;Once
you have the correct macro selected, go to the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Press
Shortcut Keys&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; box
and type whatever keys you want to fire the macro (I used Alt-G for Google, Alt-M
for MSDN, Alt-L for Live).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;font face=Verdana&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;10)&lt;/span&gt;&lt;font size=3&gt;&lt;span lang=EN style="FONT-SIZE: 7pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;Click
the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Assign&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; button
and then &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;OK&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; and
then finally &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Close&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt; back
on the &lt;/span&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Customize
Dialog&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;11)
Highlight any text in the IDE and fire off your shortcut key to test.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 52.15pt; TEXT-INDENT: -18.75pt; LINE-HEIGHT: normal; tab-stops: list 36.75pt"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN; mso-bidi-font-family: 'Times New Roman'"&gt;12)
Repeat for each search macro you want to setup.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;b&gt;&lt;u&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Here
is the final code for the macro&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;:&lt;/span&gt;&lt;/b&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Imports&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; EnvDTE&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Imports&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; System.Text.RegularExpressions&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Public&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Module&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; GoogleSearch&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Sub&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; GoogleSearch()&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Dim&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; url &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;As&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;String&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Dim&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; selectedText &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;As&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; TextSelection
= DTE.ActiveDocument.Selection()&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Not&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;String&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;.IsNullOrEmpty(selectedText.Text) &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Then&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;'&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font color=#000000&gt;uncomment
below for Google&lt;span style="COLOR: blue"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;'
url = &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;String&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;.Format(&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;"www.google.com/search?q={0}"&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;,
Regex.Replace(selectedText.Text, &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;"\s{1,}"&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;, &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;"+"&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;))&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR: black"&gt;'
uncomment below for MSDN search&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font color=#000000&gt;' &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;url
= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;String&lt;/span&gt;&lt;font color=#000000&gt;.Format(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"http://search.msdn.microsoft.com/search/Default.aspx?brand=msdn&amp;amp;query={0}"&lt;/span&gt;&lt;font color=#000000&gt;,
Regex.Replace(selectedText.Text, &lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"\s{1,}"&lt;/span&gt;&lt;font color=#000000&gt;, &lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"+"&lt;/span&gt;&lt;font color=#000000&gt;))&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;'
uncomment below for Live search&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;font color=#000000&gt;' &lt;/font&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;font color=#000000&gt;url
= &lt;/font&gt;&lt;span style="COLOR: blue"&gt;String&lt;/span&gt;&lt;font color=#000000&gt;.Format(&lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"http://search.live.com/results.aspx?q={0}"&lt;/span&gt;&lt;font color=#000000&gt;,
Regex.Replace(selectedText.Text, &lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"\s{1,}"&lt;/span&gt;&lt;font color=#000000&gt;, &lt;/font&gt;&lt;span style="COLOR: #a31515"&gt;"+"&lt;/span&gt;&lt;font color=#000000&gt;))&lt;o:p&gt;&lt;/o:p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;font color=#000000&gt;&lt;span lang=EN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;DTE.ExecuteCommand(&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;"View.WebBrowser"&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;,
url)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Else&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MsgBox(&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;"No
text selected."&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;End&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;If&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;End&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Sub&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;
&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;End&lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt; &lt;/span&gt;&lt;span lang=EN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN"&gt;Module&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.r2musings.com/aggbug.ashx?id=3fa5f8e1-234f-4cc0-b28a-3567849aca48" /&gt;</content>
  </entry>
</feed>