C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

タブコントロールの切り替え

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■102689 / inTopicNo.1)  タブコントロールの切り替え
  
□投稿者/ Y.M (6回)-(2023/12/12(Tue) 08:07:54)

分類:[C#] 

C#でタブコントロールを使用して実装しています。
ボタンを押下したら、タブが切り替わって、そのページにある一番上の
コントロールにフォーカスを当てたいのですが上手く行きません。
tabselect Indexなども使って実装してみましたが、
タブが切り替わらず止まっています。

どなたか知識ある方よろしくお願いします
引用返信 編集キー/
■102690 / inTopicNo.2)  Re[1]: タブコントロールの切り替え
□投稿者/ WebSurfer (2838回)-(2023/12/12(Tue) 08:25:19)
No102689 (Y.M さん) に返信

何を作っているか (WinForms? WPF? ASP.NET Web Forms? その他?) と開発環境 (OS, ターゲットフレームワーク) を書きましょう。
引用返信 編集キー/
■102691 / inTopicNo.3)  Re[1]: タブコントロールの切り替え
□投稿者/ KOZ (434回)-(2023/12/12(Tue) 08:48:43)
No102689 (Y.M さん) に返信
> C#でタブコントロールを使用して実装しています。
> ボタンを押下したら、タブが切り替わって、そのページにある一番上の
> コントロールにフォーカスを当てたいのですが上手く行きません。

Windows Forms でいいんですかね?

TabControl の Tab は SelectedIndex プロパティや SelectedTab プロパティへの代入で行います。
フォーカスについては「一番上」ではなく、「TabIndex プロパティの値が最小のもの」
に当てるのが良いと思います。

private void button1_Click(object sender, EventArgs e) {
    SelectTabPage(tabControl1, tabPage2);
}

static void SelectTabPage(TabControl tabControl, TabPage page) {
    tabControl.SelectedTab = page;
    page.Controls.
            Cast<Control>().
            OrderBy(c => c.TabIndex).
            FirstOrDefault()?.Focus();
}

引用返信 編集キー/
■102693 / inTopicNo.4)  Re[2]: タブコントロールの切り替え
□投稿者/ 魔界の仮面弁士 (3736回)-(2023/12/12(Tue) 10:36:52)
No102691 (KOZ さん) に返信
> TabControl の Tab は SelectedIndex プロパティや SelectedTab プロパティへの代入で行います。
> フォーカスについては「一番上」ではなく、「TabIndex プロパティの値が最小のもの」
> に当てるのが良いと思います。

それでは都合が悪いケースもありそうです。たとえば、
 label1.Text = "&File";
 label1.TabIndex = 0;
 textBox1.TabIndex = 1;
のような画面構成は珍しくないでしょうし
 panel1.TabIndex = 0;
といったケースもあるからです。

Enabled や Visible や TabStop が false になっている可能性もありますし、
同じ番号の TabIndex が複数存在することもありますよね。


というわけで改修案。


private void SelectTabPage(TabControl tabControl, TabPage page)
{
  this.SelectNextControl(tabControl.SelectedTab = page, true, true, true, true);
}
引用返信 編集キー/
■102694 / inTopicNo.5)  Re[3]: タブコントロールの切り替え
□投稿者/ 魔界の仮面弁士 (3737回)-(2023/12/12(Tue) 10:49:11)
No102693 (魔界の仮面弁士) に追記
> というわけで改修案。
> private void SelectTabPage(TabControl tabControl, TabPage page)
> {
>   this.SelectNextControl(tabControl.SelectedTab = page, true, true, true, true);
> }

これだと、指定した TabPage 内のコントロールすべてがフォーカスを受け取れない状態だったときに、
TabControl の次のコントロールがアクティブになってしまう可能性がありますね。

ということで再修正案。

static void SelectTabPage(TabControl tabControl, TabPage page)
{
  tabControl.SelectNextControl(tabControl.SelectedTab = page, true, true, true, false);
}



引用返信 編集キー/
■102708 / inTopicNo.6)  Re[2]: タブコントロールの切り替え
□投稿者/ Y.M (9回)-(2023/12/13(Wed) 08:15:18)
No102690 (WebSurfer さん) に返信
> ■No102689 (Y.M さん) に返信
>
> 何を作っているか (WinForms? WPF? ASP.NET Web Forms? その他?) と開発環境 (OS, ターゲットフレームワーク) を書きましょう。

皆様のご協力で無事解決しました。
ありがとうございます。
特にバージョンやフレームワークと言った情報もない中でご対応重ねてお礼申し上げます。

この度はありがとうございました
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ