web-dev-qa-db-ja.com

クリックイベントなしで特定のTabItemをTabControlにフォーカスさせるにはどうすればよいですか?

TabControlに、フォーカスを最初のTabItemに設定するように指示するにはどうすればよいですか?

擬似コード:

((TabItem)(MainTabControl.Children[0])).SetFocus();
17
Edward Tanguay

これはどう?

MainTabControl.SelectedIndex = 0;
26
this.tabControl1.SelectedTab = this.tabControl1.TabPages["tSummary"];

通常、タブに名前を付けてその名前でアクセスするのがベストプラクティスであることがわかりました。これにより、他の人(またはあなた)が更新の一環としてタブを追加またはサブタクトした場合に、コードを確認する必要がなくなります。そして、それらすべての「ハードコードされた」インデックスを見つけて修正します。お役に立てれば。

7
Brian

これはかなり前に回答されたと思いますが、より良い解決策は、アイテムをモデル内のコレクションにバインドし、選択したアイテムがバインドされているプロパティを公開することです。

XAML:

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

コードビハインド:

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");
        }
    }
}

これで、アイテムを設定するために必要なのは次のとおりです。

MyItem = someItemToSelect;

SelectedIndexプロパティで同じロジックを使用できます。さらに、2つを同時に使用できます。

このアプローチにより、モデルをUIから正しく分離できます。これにより、TabControlを将来的に別のものに置き換えることができますが、基になるモデルを変更する必要はありません。

5
Brett Ryan

タブコントロールのプロパティを確認します... TabPagesプロパティの「コレクション」を展開します...メンバーに付けた名前をメモします。

すなわち。 tabHeaderとtabDetailという2つのタブを持つtabMainというタブコントロール

次に、いずれかのタブを選択するには...タブ名で設定する必要があります

tabMain.SelectedTab = tabHeader;
3
Chris Catignani
tabControl1.SelectedTab = item;
item.Focus();
2
Chernikov

TabControlという名前のTabcontrollerがある場合は、さまざまなメソッドからselectedIndexを設定できます。私は、主に次のメソッドを使用します。

コードビハインド:

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

クライアント側:

まず、次のjavascriptをaspx/ascxファイルに配置します。

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

次に、次のクライアント側イベントを優先コントローラーに追加します。

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

tabControl.SelectedItem = tabControl.Items [0];

1
Ray

次のタイプのコードを使用して、特定のタブで特定のアイテムを選択することをお勧めします...

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

そして、呼び出し時間に... tabcontrol.isselected = true; PutFocusOnControl(textbox1);

正常に動作します...

1
V G S Naidu

基本的に、ここでのすべての回答は[〜#〜] selection [〜#〜]を扱いますが、これは質問に答えません。
OPが望んでいたことかもしれませんが、質問は非常に具体的に[〜#〜] focus [〜#〜]を求めています。

TabItem item = (TabItem)MainTabControl.Items[0];
// OR
TabItem item = (TabItem)MainTabControl.SelectedItem;
// Then
item.Focus();
0
Okuma.Scott

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
0
Resmi P R