tabindex on C# winforms skips first textbox on a panel - c#

I have a weird situation. I have a panel with 4 textboxes, 2 are read only. I have tab stop set to true and tab index set on panel and two editable textboxes. When running the application, the first textbox never receives focus. I have deleted the textbox and created a new one with a different name, same result. I then reversed the tab order and the other textbox was skipped. for some reason, whichever textbox is set to be hit first when the panel receives focus is completely ignored. I have tried manually setting the tab order and using the tab order wizard both. I have even tried to programmatically set tab index and tab stop just to make sure without any luck. I have several other panels and group boxes on the same form with similar controls, and they all work as expected. I'm running out of ideas, does anyone have any suggestions?

Related

How can the tab index on a WinForms app be reset?

I have a single page WinForms app with dozens of 'tab-able' labels, textboxes, sliders, combo-boxes and other controls.
This is my first real app so the tab index is out of control. I want to reset it and essentially start over.
There are many items that I don't even want tab-able (such as labels).
I know this can be done manually, but I assume there must be a way to batch process this change besides creating code during initialization to modify the tab-index.
I'd prefer to do it in the design screen. My code is boated enough and this is one of the final steps I need to take.
I've tried highlighting everything and change the tab-index to 0 on everything but it appears that something in my app doesn't have a tab-index which seems to disable that option.
My app contains:
month calendars
buttons
labels
comboboxes
text boxes
sliders
checkboxes
rich text boxes
panels
toolstrip
data grid
I only want the text boxes and combo boxes and buttons to be tab-able.
Well, to set it you could use the Tab Order tool (View > Tab Order):
If you need to remove every TabIndex property (which is set in the same order that you add the controls to the Form), you can go to the Designer.cs/vb and replace every assignment with nothing, or with a neutral TabIndex, like 0. Here's an example using a regular expression to do the replacement:
Forgive me if this isn't what you were looking for, but have you tried using the Tab Order option under View -> Tab Order?
From there you click on where you want the tab order to start and click the next until you are done. This is the simplest way to do it anyway.

c# windows form Tab Order

I have a windows form in C# project that keeps Student Info. I caught the image:
I want to add data with sequential order as follows but when I enter data to Surname textbox, TAB button jumps to E-Mail textbox, then Phone Number textbox and lastly to Date of Birth DateTimePicker.
I made all control's TabStop property "False" on the form except these textboxes. And I arranged their TabOrder via Properties Section as follows 0,1,2.. as I intented. But the order followed as I wrote above. Then I opened Tab Order function via "View" on menu strip.. I clicked all controls which I wanted to use in order, but no use. The form and Tab button act as before. I caught Tab Order function image below:
What shall I do now?
TabIndex is important for controls which are siblings of the same parent. However, if your TextBox and ComboBox controls are each inside different parents then their parent controls must have the proper TabIndex.
In the Windows Forms Designer you can see which controls are children of which panels by bringing up the Document Outline. Go to View -> Other Windows -> Document Outline.
If each TextBox or ComboBox is directly inside a parent then its TabIndex doesn't matter, it can be 0. It's the parent (and possibly the parent's parent's) TabIndex which needs to be in order.
Now that we have VS 2019. Simply go to form.cs[design], click "View" tab at the top of the page and select "Tab Order". This will allow you to click on the form elements in order of which you want them to be tabbed to. Any items not selected will not be tabbable(I think I made this word up). Once complete, click "Tab Order" again to exit view.

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.

TabStop is not working

We have a form and textboxes in it. All of control's tabindex are set correctly and TabStop = true.
When some textbox is focused and when I press tab, focus is not set on next textbox.
Note : Controls are in the panel and its TabStop = true
Set TabStop for the panel to false
Make sure that the tab indexes are like the following:
Remember that you have a nice tool to set the Tab indexes in Visual Studio:
My solution: Containers must have the tab numbers set correctly even though they are not stops. Finally working!
Old post and nothing here helped me.
Tried everything including to force .Select() e .Focus() on the controls.
For some reason taborder was behaving all in a funny order, even disabling/setting visible = false on one control other orders was wrong as if the tab index was working in reverse.
Only thing help was de Document Outline, you can open that box with Ctrl + W, U or by the menu on VS.
VIEW -> Other Windows -> Document Outline
It ill show your controls in a tree fashion.
Just drag the controls to the correct order, it ill affect the tab order.
Word of warning: I struggled a bit with it because dragging (in the Document Outline box) some controls inside a panel caused them to move to the top upper corner of the panel (in the Designer). Just dragged them back to the position in the Designer.
For some reason the order the controls are show in the Outline Document box affects tab behaviour in nasty ways.
Have you set the tab order correctly? Select the form in designer view and select View > Tab Order to set the correct order.
Set TabStop for individual controls. Remove it from panel.
Perhaps the TextBox that you can't tab from is a multiline TextBox with AcceptsTab set to true? This would cause the TextBox to consume the tab key itself.
I know this is an old post but I've just had a similar issue and thought I'd share my solution.
Check that you have set the TabIndex before adding the control to it's parents Control collection.
I noticed for the controls that were being skipped I was adding them to the parent before setting their TabIndex. Once I set the TabIndex and then added them to the collection they behaved as expected.
One thing to note is that Visual Studio showed the tab order I wanted but at run time it did not behave that way.

Tabindex for Dynamically created fields

I have a a gridview with a dynamic number of columns and rows. In each of the gridiview cells, a textbox get's added dynamicaly. I need users to be able to tab through these textboxes, but I can't get it to work.
I set the tabindex of the the textbox when it is created in the code behind, however when I try and tab in the page it doesn't work. If I click inside a textbox in the grdiview then pressing tab does nothing at all, If I click outside the gridview I can tab through the other controls on the page, and it will tab into the first cell of the gridiview, and then stop/
Perhaps you can create a javascript method to get a list of all textboxes on the page, and shift focus to the next one, by checking for a keypress event?
Well I solved the problem. I had some javascript running on Key Down to prevent users entering anything other than numbers, which blocked tabbing. Removed it and it worked.

Categories