Comments back

Submitted by Robert MacLean on Tue, 08/07/2007 - 12:31

Just a heads up that comments are now enabled again!! Laughing

Horrible web UI

Submitted by Robert MacLean on Mon, 08/06/2007 - 20:54
I really don't get to use the annoyances tag enough :) For some reason despite the fact I am annoyed almost daily I don't blog about it. But this sort of justified it! It's from the Unreal Tournament 3 site. When you get to the site you get presented with 3 drop downs and no explanation for what they are for.

An so the wheel turns...

Submitted by Robert MacLean on Mon, 08/06/2007 - 17:22

I was searching for something (don't ask) and came across an interesting post about upgrading to Microsoft's latest OS:
My initial reaction is that the fancy UI effects make things feel a little sluggish, but there are some very interesting improvements as well (and the visual effects can all be turned off).

The amount of times I've heard that in the last few months about Vista is crazy, but heres the funny bit. The post is about XP. Which made me think back to that and yep I ran XP with the themes turned off for ages (get those few extra FPS out of Unreal '99. By the time I upgraded to Vista toggling themes in XP wasn't even a choice, it wasn't done. It made windows seem odd. Now comes Vista and here we are again. Guess what's going to happen in the next four years? ;)

FindControl and Master Pages

Submitted by Robert MacLean on Sun, 08/05/2007 - 19:12
Continuing with my earlier post on enums where I proved people wrong, I decided to prove another MVP wrong. Once again for those who are already in the know they can skip to example 2 below.

FindControl Basics

First off a primer on FindControl taken from the MSDN help: Searches the current naming container for a server control with the specified id parameter. Example: The following example defines a Button1_Click event handler. When invoked, this handler uses the FindControl method to locate a control with an ID property of TextBox2 on the containing page. If the control is found, its parent is determined using the Parent property and the parent control's ID is written to the page. If TextBox2 is not found, "Control Not Found" is written to the page.
  1. private void Button1_Click(object sender, EventArgs MyEventArgs)
  2. {
  3.       // Find control on page.
  4.       Control myControl1 = FindControl("TextBox2");
  5.       if(myControl1!=null)
  6.       {
  7.          // Get control's parent.
  8.          Control myControl2 = myControl1.Parent;
  9.          Response.Write("Parent of the text box is : " + myControl2.ID);
  10.       }
  11.       else
  12.       {
  13.          Response.Write("Control not found");
  14.       }
  15. }

Searching Master Page content using FindControl

You could build a recursive find control method which searches master pages and content pages control internally looping through each control and checking the ID, but then you would need to also build one which takes logic for the offset overloaded version. Sounds like too much work, and I guess MS thought so too since it was never designed this way. Example 2: If you wanted to search the master page for a control you could do the following:
  1. this.Master.FindControl("ControlID")
This will find any control in the master page which happens to have the ID "ControlID". This control can be a sub control of another control. Whats going on here? Well to understand, I downloaded the famous Reflector and searched Microsoft's Framework for this.
  1. protected virtual Control FindControl(string id, int pathOffset)
  2. {
  3.     string str;
  4.     this.EnsureChildControls();
  5.     if (!this.flags[0x80])
  6.     {
  7.         Control namingContainer = this.NamingContainer;
  8.         if (namingContainer != null)
  9.         {
  10.             return namingContainer.FindControl(id, pathOffset);
  11.         }
There is more to it and you can read it here (You'll need Reflector 5 or higher installed for that to work). The important thing to note is the recursion being done there!!! Thus we do not need to worry about it. There is a problem though, this searches the master page only. How do we get to the content page? Example 3: If you wanted to search for a control in the content page. Assuming our Content Place Holder ID is named "Content" you can then put that in FindControl followed by either $ or : and then the control you want to find.
  1. this.Master.FindControl("Content$ControlID")
  1. this.Master.FindControl("Content:ControlID")
There you go, now you can find any control (nested or otherwise) on any content page :)

Dynamically working with Enum's

Submitted by Robert MacLean on Sun, 08/05/2007 - 18:31
Enums in .NET are very powerful in defining options. By default when you define an enum it automatically assigns them sequential integer values from 1 (if you don't specify a start value). So how do we work with these dynamically? Well some say you can't, and they are wrong. But first let me cover the basics, if you want to skip over this scroll down to example 6.

Basics Of Enum

Example 1

In this example First would be equal to 1, Second to 2 and Third to 3.
public enum Demo { First, Second, Third }
Example 2

In this example First is equal to 1, Second to 222 and Third by 986.

public enum Demo { First = 1, Second = 222, Third = 986 } 
Example 3

What’s nice is that if you just want to change the start position then you can define that only, so in this example First is 10, Second is 11 and Third is 12.

public enum Demo { First = 10, Second, Third } 
Example 4

Even better is the ability to decorate the enum with the "flag" attribute, set the numbers (Raymond Chen explained why this is not done automatically) and use it as bitflags. Note the integer values are in traditional flag values with None set to 0 and All set to the combined value.

public enum Demo 
None = 0, 
First = 1, 
Second = 2, 
Third = 4, 
All = 7 
Example 5

So how do we use those flags? The code below will output:

First, Third

The code is:

static void Main(string[] args) 
    Demo Enum = Demo.First | Demo.Third; 

Dynamically Using Flag with Enums

So here we are basics out of the way, and now on to the fun. I continue to use the definition in example 4 above.

Example 6

First I will show how to add a value to the enum variable. What I do is start off by defining the enum to none (0 value) then using the OR concat (|=) symbol I add each enum. This code will output:

Second, Third

The code is:

static void Main(string[] args) 
    Demo Enum = Demo.None; 
    Enum |= Demo.Second; 
    Enum |= Demo.Third; 
Example 7

In this last example I will show how to remove an value from the enum variable. I start off by defining all (integer value of 7) and then I use the AND concat (&=) symbol and prefix the enum value with tilde (~). This code will output:

First, Third

The code is

static void Main(string[] args) 
    Demo Enum = Demo.All; 
    Enum &= ~Demo.Second; 

This IE add on should be standard

Submitted by Robert MacLean on Wed, 07/11/2007 - 08:01

Bruce Nicholson pointed the other day to an add on for IE call IE 7 PRO (You can get it from which has some great features. His main one to show me was th spell check feature which allows you to spell what you type in web pages. You can see the difference it made to my potjie article Before and After. This is really nice but not my favorite featre.

My favorite is the crash recovery, should IE or Windows crash (which my Vista install does when I sleep it in a hurry) the next time you open IE it prompts you to restore the last session. If you say yes it opens all the tabs to the locations you were at. AMAZING :)

WSUS and Vista

Submitted by Robert MacLean on Thu, 07/05/2007 - 17:01

A while ago I blogged about some fun at being an early adopter, the issue that caused it was that Vista wouldn't update. Funny enough the new stuff didn't help a bit, not even a little bit. What was happening was I was getting that error while not connected to the work network due to my machine being set to get it from the company WSUS server. While on the network I got a different error (8007000b if I remember right)
For love or money I couldn't fix it, until I stumbled on the fact WSUS 3.0 was released. Upgrading the company WSUS server to that fixed the problem. Seems we were using a RTM of 2.0 and Vista support was only added in 2.0 SP 1 :(

Regardless 3.0 is really worth the upgrade. Only problem is now I am getting new patches almost every day until I catch up to all of them.

Anyway grab all the yumy WSUS freshness at