TabPageの使用不可(Enable)について への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2019/7/20 09:26:08
> 見た目をEnable状態にしたい。
Enable だと普通の状態なので、
Disable 状態のことですよね。(Enabled = False)
手抜きですが、タブ部分のテキスト表現で誤魔化したことがあります。
中途半端感は否めませんし、利用者にとっても分かりやすいとは言えませんが。
ただ…まともに向き合うとすると、実装が意外と面倒だった記憶があります。
他の方の回答にもあるように、タブの見た目まで変えるには自前描画が必要ですし、
ホバー時の対応も含めると、さらに手間がかかってきます。
タブを選択できなくする処理も、上記のキャンセル手続きだけでは十分といえず、
矢印キーでタブ移動時に、無効なタブがスキップさせるような手続きも必要でしょう。
(選択状態を取りやめて前のタブに戻すのではなく、さらにその次の有効なタブが選択されるべき)
Enable だと普通の状態なので、
Disable 状態のことですよね。(Enabled = False)
手抜きですが、タブ部分のテキスト表現で誤魔化したことがあります。
中途半端感は否めませんし、利用者にとっても分かりやすいとは言えませんが。
TabPage1.Text = "Visual Basic"
TabPage2.Text = " ̷V̷i̷s̷u̷a̷l̷ ̷B̷a̷s̷i̷c̷"
Private Sub TabControl1_Selecting(sender As Object, e As TabControlCancelEventArgs) Handles TabControl1.Selecting
e.Cancel = Not e.TabPage.Enabled
End Sub
ただ…まともに向き合うとすると、実装が意外と面倒だった記憶があります。
他の方の回答にもあるように、タブの見た目まで変えるには自前描画が必要ですし、
ホバー時の対応も含めると、さらに手間がかかってきます。
タブを選択できなくする処理も、上記のキャンセル手続きだけでは十分といえず、
矢印キーでタブ移動時に、無効なタブがスキップさせるような手続きも必要でしょう。
(選択状態を取りやめて前のタブに戻すのではなく、さらにその次の有効なタブが選択されるべき)
投稿者 KOZ  (社会人)
投稿日時
2019/7/19 02:13:07
BackColor プロパティを変更するとわかりやすいですが、TabPage のプロパティって Panel 部分のプロパティなんですよね。
タブ部分はオーナードローする必要があります。
「TabControlのタブを自分で描画する」
https://dobon.net/vb/dotnet/control/tabownerdraw.html
タブ部分はオーナードローする必要があります。
「TabControlのタブを自分で描画する」
https://dobon.net/vb/dotnet/control/tabownerdraw.html
投稿者 イザナギ  (社会人)
投稿日時
2019/7/19 00:30:05
>るきおさん
言葉足らずで申し訳ないです。
>今、悩んでいるのは、任意のTabPageのタイトル文字を変えられないことです。
先程、上のように投稿しましたが、
悩んでいるのは、タイトル文字の色等、属性を変更できないことです。
例えば、タイトルの文字色を「Color.LightGray」などにして、見た目をEnable状態にしたい。
といった使い方が可能かを悩んでいます。
言葉足らずで申し訳ないです。
>今、悩んでいるのは、任意のTabPageのタイトル文字を変えられないことです。
先程、上のように投稿しましたが、
悩んでいるのは、タイトル文字の色等、属性を変更できないことです。
例えば、タイトルの文字色を「Color.LightGray」などにして、見た目をEnable状態にしたい。
といった使い方が可能かを悩んでいます。
投稿者 るきお  (社会人)
投稿日時
2019/7/18 20:17:04
このような感じでタイトル文字を変えられますよ。
TabControl1.TabPages(0).Text = "あいうえお"
TabControl1.TabPages(1).Text = "かきくけこ"
投稿者 イザナギ  (社会人)
投稿日時
2019/7/18 20:01:48
>kikuさん
回答ありがとうございます。
サイト、確認しました。
ただ「非表示」ではなく「非活性(使用不可)」
ですので、当てはまらないように思いました。
>るきおさん
回答ありがとうございます。
>タブの切り替えもできないような状況をお望みでしょうか?
おっしゃる通り、切り替えもできないようにしたいです。
ただ、切り替え制御は
TabControlのSelectingイベントで、任意のインデックス以外はe.cancel=trueでできました。
今、悩んでいるのは、任意のTabPageのタイトル文字を変えられないことです。
ForeColorを変えてみましたが駄目でした。。。
回答ありがとうございます。
サイト、確認しました。
ただ「非表示」ではなく「非活性(使用不可)」
ですので、当てはまらないように思いました。
>るきおさん
回答ありがとうございます。
>タブの切り替えもできないような状況をお望みでしょうか?
おっしゃる通り、切り替えもできないようにしたいです。
ただ、切り替え制御は
TabControlのSelectingイベントで、任意のインデックス以外はe.cancel=trueでできました。
今、悩んでいるのは、任意のTabPageのタイトル文字を変えられないことです。
ForeColorを変えてみましたが駄目でした。。。
投稿者 るきお  (社会人)
投稿日時
2019/7/18 12:18:50
Windowsフォームですよね。
Visual Studio 2013 + .NET Framework 4.6.1で試してみましたが、これできましたよ。
TabControl1.TabPages(1).Enabled = False
タブの中に配置しているコントロールが使用不可になりました。
タブの切り替え自体はできました。
タブの切り替えもできないような状況をお望みでしょうか?
Visual Studio 2013 + .NET Framework 4.6.1で試してみましたが、これできましたよ。
TabControl1.TabPages(1).Enabled = False
タブの中に配置しているコントロールが使用不可になりました。
タブの切り替え自体はできました。
タブの切り替えもできないような状況をお望みでしょうか?
投稿者 kiku  (社会人)
投稿日時
2019/7/18 09:28:18
検索しただけで試していませんが、下記が参考になりませんか。
https://dobon.net/vb/dotnet/control/tabpagehide.html
https://dobon.net/vb/dotnet/control/tabpagehide.html
投稿者 イザナギ  (社会人)
投稿日時
2019/7/18 08:49:56
TabControlに追加したTabPageを状況によって、一部使用不可にしたいと思い
Enable=Trueとしてみましたが、他のコントロールのように、使用不可状態になりませんでした。
自分でも調べてみましたが、解決できない状況です。。。
完全に素人の質問で恐縮ですが、ご回答よろしくお願いします。
Enable=Trueとしてみましたが、他のコントロールのように、使用不可状態になりませんでした。
自分でも調べてみましたが、解決できない状況です。。。
完全に素人の質問で恐縮ですが、ご回答よろしくお願いします。
もうちょい簡単にできないかなと思いついたのがこちら
http://kozhouse.homeip.net/dotnet/etc/20/
TabPage の Text プロパティにはスペース、Tag プロパティにタブに表示したい文字をセットし、コントロール描画後に Tag プロパティからタブの文字を描画します。