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

わんくま同盟

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

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

ツリー一括表示

タブコントロールの切り替え /Y.M (23/12/12(Tue) 08:07) #102689
Re[1]: タブコントロールの切り替え /KOZ (23/12/12(Tue) 08:48) #102691
│└ Re[2]: タブコントロールの切り替え /魔界の仮面弁士 (23/12/12(Tue) 10:36) #102693
│  └ Re[3]: タブコントロールの切り替え /魔界の仮面弁士 (23/12/12(Tue) 10:49) #102694
Re[1]: タブコントロールの切り替え /WebSurfer (23/12/12(Tue) 08:25) #102690
  └ Re[2]: タブコントロールの切り替え /Y.M (23/12/13(Wed) 08:15) #102708 解決済み


親記事 / ▼[ 102691 ] ▼[ 102690 ]
■102689 / 親階層)  タブコントロールの切り替え
□投稿者/ Y.M (6回)-(2023/12/12(Tue) 08:07:54)

分類:[C#] 

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

どなたか知識ある方よろしくお願いします
[ □ Tree ] 返信 編集キー/

▲[ 102689 ] / ▼[ 102693 ]
■102691 / 1階層)  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();
}

[ 親 102689 / □ Tree ] 返信 編集キー/

▲[ 102691 ] / ▼[ 102694 ]
■102693 / 2階層)  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);
}
[ 親 102689 / □ Tree ] 返信 編集キー/

▲[ 102693 ] / 返信無し
■102694 / 3階層)  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);
}



[ 親 102689 / □ Tree ] 返信 編集キー/

▲[ 102689 ] / ▼[ 102708 ]
■102690 / 1階層)  Re[1]: タブコントロールの切り替え
□投稿者/ WebSurfer (2838回)-(2023/12/12(Tue) 08:25:19)
No102689 (Y.M さん) に返信

何を作っているか (WinForms? WPF? ASP.NET Web Forms? その他?) と開発環境 (OS, ターゲットフレームワーク) を書きましょう。
[ 親 102689 / □ Tree ] 返信 編集キー/

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

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

この度はありがとうございました
解決済み
[ 親 102689 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -