In .NET 1.x, disabling a TabControl's TabPage is awkward at best: setting its Enabled-property to false doesn't disable it, instead it disables all controls on it. The MSDN solution is even worse: use the SelectedIndexChanged-event to check whether the tab is available and if it's not, send the user somewhere else. Regardless of whether the approach works, the result is ugly because the clicked TabPage does appear, so when a tab ends up not being allowed, you see it flashing by. It's also questionable from a usability perspective, because if the tab looks like any other tab, then shouldn't it work like the other tabs?
Another often proposed way to disable a TabPage, is to remove it (temporarily) from the TabPages collection the TabControl has, so it disappears entirely. I don't like this idea, especially since I've actually implemented it once this way and users kept calling me asking where the tab went. It seems that if users are looking for a tab they can't find, they'll assume it's somewhere else and they simply can't find it, instead of concluding that perhaps they can't use it right now. Which is a reasonable conclusion, because whenever I want to configure my TCP/IP in Windows for instance and I can't find a tab, I'll just look around to see if perhaps it has been moved or perhaps I didn't remember where it was in the first place.
So what is the way to disable a TabPage? I think the best thing to do is pretty simple: grey the text and let nothing happen when you click it. Basically the same way every other control is disabled in Windows. Anyway, I thought of this today because I was using a TabControl in a small Visual C# Express Beta 1-project and unfortunately, everything still is the way it was. Let's hope my feedback helps!