1
votes

I am creating my first Windows Forms application, to be deployed on Windows Mobile and I am having some trouble designing a Tabbed Interface.

I had assumed that I could Create a TabControl, then Add some TabPages and then drag Controls on to each Tab Page in turn. This does not appear to be possible and most of the information I see on the web seems to suggest that the controls should be added dynamically at run-time.

Am I missing something obvious here or is this indeed correct?

If you do have to add the controls at runtime then how do people generally manage the design process. Do they create a Custom UserControl for each tab and then add that at runtime?

Design environment (C# Visual Studio 2005, .net 2.0) Runtime environment (Windows Mobile 6.1)

Update 1

The actual steps taken within visual studio were as follows :-

  1. Select New Project -> SmartDevice -> Windows Mobile 6 Professional -> Device Application
  2. Added a TabControl to Form1. This automatically adds tabPage1 and tabPage2

Update 2

The solution to this is embarrassingly noobish. The TabControl puts the tabs at the bottom of the page, the first thing I was doing was resizing the tab control to a single line which was then hiding the TabPage control.

2
Steve Weet: Can you give us a screenshot of the designer?Jonathan

2 Answers

2
votes

Currently i don't use Windows Mobile, but i think it works quite the same.

After adding a TabControl to your form you should take a look into the properties and search for TabPages. Here you can add and delete new TabPages to your Control and design it as you like in the designer.

To your question about using UserControls on each TabPage i would definitely say Yes. It makes easier to separate between each page and what will happen on each one.

Also at a last step i am going to move the needed code out of the Designer.cs into my own function (e.g. var tabControl = CreateTabControl() where all of my properties are set. Then i put all my UserControls into an

private IEnumerable<Type> GetAllTypes()
{
    yield return typeof(MyFirstControl);
    yield return typeof(MySecondControl);
}

and make an

private void CreateTabPages(TabControl tabControl, IEnumerable<Type> types)
{
    foreach(var type in types)
    {
        var control = Activator.CreateInstance(type);
        var tabPage = new TabPage();
        tabPage.Controls.Add(control);
        tabControl.TabPages.Add(tabPage);
    }
}

this will then be called by

CreateTabPages(tabControl, GetAllTypes());

With this approach i can easily add another Tab Page with a single line of code and design it in its own scope.

1
votes

I just opened vs2008 and created a tabcontrol, then I added controls inside using drag and drop in the designer and I didn't found any problem.

The way I use to do it is to create a usercontrol for each tab, But I add the usercontrol to the tab in the designer. (note that the usercontrol will not appear in the toolbox until you generate your solution).

I didn't know why your method are not working. Did you stop your application before try to add the controls?

Good Luck.