TabControlに、フォーカスを最初のTabItemに設定するように指示するにはどうすればよいですか?
擬似コード:
((TabItem)(MainTabControl.Children[0])).SetFocus();
これはどう?
MainTabControl.SelectedIndex = 0;
this.tabControl1.SelectedTab = this.tabControl1.TabPages["tSummary"];
通常、タブに名前を付けてその名前でアクセスするのがベストプラクティスであることがわかりました。これにより、他の人(またはあなた)が更新の一環としてタブを追加またはサブタクトした場合に、コードを確認する必要がなくなります。そして、それらすべての「ハードコードされた」インデックスを見つけて修正します。お役に立てれば。
これはかなり前に回答されたと思いますが、より良い解決策は、アイテムをモデル内のコレクションにバインドし、選択したアイテムがバインドされているプロパティを公開することです。
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
を将来的に別のものに置き換えることができますが、基になるモデルを変更する必要はありません。
タブコントロールのプロパティを確認します... TabPagesプロパティの「コレクション」を展開します...メンバーに付けた名前をメモします。
すなわち。 tabHeaderとtabDetailという2つのタブを持つtabMainというタブコントロール
次に、いずれかのタブを選択するには...タブ名で設定する必要があります
tabMain.SelectedTab = tabHeader;
tabControl1.SelectedTab = item;
item.Focus();
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);
tabControl.SelectedItem = tabControl.Items [0];
次のタイプのコードを使用して、特定のタブで特定のアイテムを選択することをお勧めします...
。
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);
正常に動作します...
基本的に、ここでのすべての回答は[〜#〜] selection [〜#〜]を扱いますが、これは質問に答えません。
OPが望んでいたことかもしれませんが、質問は非常に具体的に[〜#〜] focus [〜#〜]を求めています。
TabItem item = (TabItem)MainTabControl.Items[0];
// OR
TabItem item = (TabItem)MainTabControl.SelectedItem;
// Then
item.Focus();
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