Question

How can I tell my TabControl to set the focus to its first TabItem, something like this:

PSEUDO-CODE:

((TabItem)(MainTabControl.Children[0])).SetFocus();
Was it helpful?

Solution

How about this?

MainTabControl.SelectedIndex = 0;

OTHER TIPS

this.tabControl1.SelectedTab = this.tabControl1.TabPages["tSummary"];

I've found it's usually a best practice to name your tabs and access it via the name so that if/when other people (or you) add to or subtact tabs as part of updating, you don't have to go through your code and find and fix all those "hard coded" indexes. hope this helps.

I realise this was answered a long time ago, however a better solution would be to bind your items to a collection in your model and expose a property that selected item is bound to.

XAML:

<!-- MyTemplateForItem represents your template -->
<TabControl ItemsSource="{Binding MyCollectionOfItems}"
            SelectedItem="{Binding SelectedItem}"
            ContentTemplate="{StaticResource MyTemplateForItem}">
</TabControl>

Code Behind:

public ObservableCollection<MyItem> MyCollectionOfItems {
    get;
    private set;
}

private MyItem selectedItem;
public MyItem SelectedItem{
    get { return selectedItem; }
    set {
        if (!Object.Equals(selectedItem, value)) {
            selectedItem = value;
            // Ensure you implement System.ComponentModel.INotifyPropertyChanged
            OnNotifyPropertyChanged("SelectedItem");
        }
    }
}

Now, all you have to do to set the item is:

MyItem = someItemToSelect;

You can use the same logic with the SelectedIndex property, further, you can use the two at the same time.

This approach allows you to separate your model correctly from the UI, which could allow you to replace the TabControl with something else down the line but not requiring you to change your underlying model.

Look at the properties for the tab control... Expand the TabPages properties "collection"... Make note of the names you gave the members.

ie. a tab control called tabMain with 2 tabs called tabHeader and tabDetail

Then to select either tab...You have to set it with the tabname

tabMain.SelectedTab = tabHeader;
tabControl1.SelectedTab = item;
item.Focus();

tabControl.SelectedItem = tabControl.Items[0];

If you have a Tabcontroller named tabControl you could set the selectedIndex from different methods, i use following methods mostly.

codebehind:

tabControl.SelectedIndex = 0; // Sets the focus to first tabpanel

clientside:

First, put the following javascript in your aspx/ascx file:

<script type="text/javascript">
function SetActiveTab(tabControl, activeTabIndex) {
    var activeTab = tabControl.GetTab(activeTabIndex);
    if(activeTab != null)
        tabControl.SetActiveTab(activeTab);
}</script>

Then add following clientside event to prefered controller:

OnClientClick="function(s, e) { SetActiveTab(tabControl, 0);

it's better to use the following type of code to select the particular item in the particular tab...

.

 private void PutFocusOnControl(Control element)
        {
            if (element != null)
                Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input,
                    (System.Threading.ThreadStart)delegate
                    {
                        element.Focus();
                    });
        }

And in calling time... tabcontrol.isselected=true; PutFocusOnControl(textbox1);

will works fine...

Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl1.SelectedIndexChanged 'MsgBox(TabControl1.SelectedIndex)

    If TabControl1.SelectedIndex = 0 Then
        txt_apclntFrstName.Select()
    Else
        txtApplcnNo.Select()
    End If


End Sub
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top