How to easily reorder TabControl? - c#

I have a TabControl which I have designed in the VS2005 designer that has about 7 tabs.
How can I easily switch the order of the tabs around?
I put one tab at the end in a rush, but now I want it somewhere in the middle.

In the properties of the tab control there's a TabPages collection. You should be able to shuffle them around in there. Just click the ellipses next to TabPages and a dialog will appear allowing you to move each one up or down in the order.

Mark the TabControl in the Designer.
In the Properties Window (F4) you have a TabPages Property.
You can open a new Window where you can reorder the TabPages.
If you want to do that at runtime you have to do
tabControl.TabPages.Remove(tabPage1);
tabControl.TabPages.Add(tabPage1); // add to the end
tabControl.TabPages.Insert(2, tabPage1); // add on specific position

Open FormName.Designer.cs.
Find the line this.tabControl1.Controls.Add ....
You can change the order here.
Screenshot

Related

what could be the possible reasons for TabIndex not working properly

so I have started from 0 and defining tabindex for the controls on my form but at run time it is all messed up. the form is a little complex tho. it has horizontal and vertical splitters and panels, group boxes and some older VB 6.0 activeX controls which is a Tree control inside them. even if i do it programmatically and read previewkeydown eventg and say if it is TAB then control2.Focus() it is still working wrong. so frustrating. any thoughts? ..there are also labels on the form which do not need tab so I have defined 0 for their index.
How are you setting it?
If you are in visual studio with the form in design view select view -> tab order and then click on each item in the order you want them.
Usually works for me.
The reason is that the controls are in different Containers. Suppose you've got panel1.TabIndex = 0 and panel2.TabIndex = 1, then in panel2, textBox1.TabIndex = 0, in panel1, textBox2.TabIndex = 1. At runtime, textBox1 comes before textBox2 because its panel comes first!
As kerry said, use view->tab order to see the complete hierarchy of tab orders.
I'm mentioning this because I haven't seen it in any of the winforms tab order threads that I have found on stackoverflow.
If you have multiple panels, you change your panel tab order by clicking on the Panel, going to properties, and then you change the TabIndex to whatever you want. This will allow you to navigate from panel to panel in the order that you want. Then within each panel, follow the recommended steps listed above using view > tab order and click on each cell in the order that you want to set.
Follow the steps below:
Set the TabIndex property to DIRECT CHILD containers and controls in your form or container, either using the View > TabOrder utility or directly from the properties window. Completely ignore the TabStop property of containers, which defaults to false even it's very important.
Repeat step 1 with each container.

Adding the same Panel to multiple TabPages

In my previous question I could add a design time panel to a tab page at run time and my code looks like this and it works Ok.
tabControl1.SuspendLayout();
tabControl1.TabPages[0].Controls.Add(panel1);
tabControl1.ResumeLayout();
but now I need to do something like this:
tabControl1.SuspendLayout();
tabControl1.TabPages[0].Controls.Add(panel1);
tabControl1.TabPages[1].Controls.Add(panel1);
tabControl1.TabPages[2].Controls.Add(panel1);
tabControl1.ResumeLayout();
which just at run-time I can know how many of these Tabpages I will need. but now for testing I am assuming I will have three tabPages
the Problem is that the panel only gets added to the Last tabPage,
How can I fix this? I want it get added to all of the tab pages
Thanks.
You can't. A control can have only one parent at a time. Luckily, only one tab page is visible at a time, so I guess you could move the panel between the pages as they are displayed? On the other hand, if the panel is to be located in the same place for all pages, perhaps it should not be placed inside the tab control, but rather on top of it?

How to Change TabPage Position in C#.NET?

I have six tabs on my Windows application. I need to put tab #6 after tab #2, how can i do it?
I couldn't drag the tab to the location i want! The 5 tabs are full of controls that took long time to name and design. Any idea how to move last tab and place it after 3rd tab?
In order to arrange the tabs in a TabControl, access the property dialog for the TabControl and find the "TabPages" property. Clicking on the little button next to the value field will display a dialog which will allow you to control the properties and position of each tab in the TabControl.
TabPages Property http://img16.imageshack.us/img16/6334/tabeditor.png
Although an answer is there: I thought this picture may speak few more words ;)
Click on Tab Control
Go to Properties Window
Click on Tab Page as highlighted in blue
Voila! The TabPage Collection Editor allows you to perform what you need. It's intuitive.

How do I make a single control appear across many tab control pages?

I have a WPF tabcontrol with 3 tabs. On the top of the first page is a scrollviewer with a couple buttons which make up a menu of common tasks (save, load etc). I would like this scroll viewer to appear at the top of every tab. Is it possible to do this without simply copying and pasting the code to every tab?
You can make a custom control that contains the UI and logic for the buttons, and then include that control on each tab. The best way to do this is to create a subclass of ScrollViewer, and in the XAML define each of the buttons. On each of your tab pages you can create and create an instance of your new subclass.
This will result in a different instance of your class on each page, but the logic for the buttons will only exist in the code once.
You could implement the scroll viewer and buttons outside and on top of the tabcontrol.

C# tab gui, Hide the body?

How do i get rid of the body in my tabControl? and how do i add and remove tabpages? I need to add/remove tabpages in code but hide the body in code or in the editor. I tried making the tabControl hight <20 but no matter what it has a line showing how wide it is.
As far as I know, there's no built-in control for a row of tabs without pages for each tab.
You could just cover the body with a Panel. If you adjust the size of the panel carefully, it should look ok.
What do you mean by "hide the body"? If you mean the "page" part of the tab, it's not really a tab page any more if you can only see the labels. What are you trying to accomplish? It may well be that a tab control isn't the best approach.
You can create new tab pages in code and add them to the TabControl's Controls collection:
private System.Windows.Forms.TabPage tabPage1;
this.tabPage1 = new System.Windows.Forms.TabPage();
this.tabControl1.Controls.Add(this.tabPage1);
You can hide the tab control from code with this:
tabControl1.Hide();
To hide the tabpage from the user you just remove it from the tabControl.TabPages collection like so:
tabControl1.TabPages.Remove(tabPage1);

Categories