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

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

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

Re[11]: TabControlのItemSizeを変更方法


(過去ログ 35 を表示中)

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

■17815 / inTopicNo.1)  TabControlのItemSizeを変更方法
  
□投稿者/ tanaka (16回)-(2008/05/02(Fri) 08:09:24)

分類:[C#] 

起動時にTabControlのItemSizeを変更させるにはどうすればいいのでしょうか。

タブの外観はボタンにしてます。(Appearance.Buttons)
タブ数は現状5ですが増減する可能性あり
ItemSizeはTabControlのサイズを元に変更(下図のような感じ)


【イメージ図】
┌----┐┌----┐┌----┐┌----┐┌----┐
│tab1││tab2││tab3││tab4││tab5│
└----┘└----┘└----┘└----┘└----┘
┌------------------------------------┐
│                                    │
│                                    │
│                                    │
└------------------------------------┘

引用返信 編集キー/
■17816 / inTopicNo.2)  Re[1]: TabControlのItemSizeを変更方法
□投稿者/ よねKEN (146回)-(2008/05/02(Fri) 09:02:13)
#試してません。
No17815 (tanaka さん) に返信
> 起動時にTabControlのItemSizeを変更させるにはどうすればいいのでしょうか。

TabControl.ItemSize プロパティ
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.tabcontrol.itemsize(VS.80).aspx
より引用。

「プロパティ値」の説明には以下のようにあります。
>> タブのサイズを表す Size。既定では、タブのサイズは、アイコンやラベルを表示できるように自動的に調整されます。

また、「解説」には以下のようにあります。
>> ItemSize プロパティの Width プロパティを変更するには、SizeMode プロパティが Fixed に設定されている必要があります。

タブのテキストによる自動調整、または、SizeMode=Fixedに設定した上でItemSize.Widthの変更ではどうですか?

引用返信 編集キー/
■17868 / inTopicNo.3)  Re[2]: TabControlのItemSizeを変更方法
□投稿者/ tanaka (17回)-(2008/05/02(Fri) 17:43:20)
No17816 (よねKEN さん) に返信
ご回答ありがとうございます。

タブのサイズは変更できたのですが、新たな問題でタブをイメージ図のように
変更させると右側にカーソル矢印が出てきて5つ目が途中で切れてしまいます。
これはどうすることも出来ないのでしょうか。

引用返信 編集キー/
■17880 / inTopicNo.4)  Re[3]: TabControlのItemSizeを変更方法
□投稿者/ よねKEN (1回)-(2008/05/02(Fri) 22:20:04)
2008/05/02(Fri) 22:20:43 編集(投稿者)

No17868 (tanaka さん) に返信
> タブのサイズは変更できたのですが、新たな問題でタブをイメージ図のように
> 変更させると右側にカーソル矢印が出てきて5つ目が途中で切れてしまいます。
> これはどうすることも出来ないのでしょうか。

逆に聞きますが、どうしたいのでしょうか?

例えば、tab1の幅を大きくしたとすると、物理的に残りのtab2〜tab5を今のサイズのまま全部を1行で表示することはできませんよね。
ですので、デフォルトの動作としてあふれた分のタブを見せたり隠したりするために▲▼(のような部分)が表示されます。
Multilineプロパティの設定によりこの動作の代わりに複数行にタブを表示することもできますが、
標準ではその2通りの表現しかできないように思います。
(ひょっとするとその他のプロパティ等の設定で別の表現方法もあるかもしれませんが)
引用返信 編集キー/
■17883 / inTopicNo.5)  Re[4]: TabControlのItemSizeを変更方法
□投稿者/ tanaka (21回)-(2008/05/02(Fri) 22:56:55)
No17880 (よねKEN さん) に返信
> 2008/05/02(Fri) 22:20:43 編集(投稿者)
No17815 にイメージ図として記載しましたが、TabContorolを使用してますが見た目はボタン5とそれに対するフォームがあって
そのボタンを押すごとに下の部分がそれぞれ対応した画面に切り替わるようにしたいです。


引用返信 編集キー/
■17909 / inTopicNo.6)  Re[5]: TabControlのItemSizeを変更方法
□投稿者/ よねKEN (4回)-(2008/05/03(Sat) 14:53:31)
書き方が悪かったですかね。

No17883 (tanaka さん) に返信
> ■No17880 (よねKEN さん) に返信
>>2008/05/02(Fri) 22:20:43 編集(投稿者)
> No17815 にイメージ図として記載しましたが、TabContorolを使用してますが見た目はボタン5とそれに対するフォームがあって
> そのボタンを押すごとに下の部分がそれぞれ対応した画面に切り替わるようにしたいです。

私が逆質問しているのはそういう全体的な話ではなく、tab1〜tab5をどのように表示したいですか?ということです。
先ほどの私の投稿で以下のように書きました。

> 例えば、tab1の幅を大きくしたとすると、物理的に残りのtab2〜tab5を今のサイズのまま全部を1行で表示することはできませんよね。

イメージ図にはtab1〜tab5が並んでいます。tab1の幅を大きくするとtab2〜tab5を並べるために必要な幅が物理的に足りなくなるのです。
ということは、これらをどのように並べるべきか?ということ(画面仕様)を決めなければなりません。
(TabControlでそれが実現できるかどうかは別として)

No17883のご返答ではその点が触れられていませんので、現時点ではなんとも言えません。


引用返信 編集キー/
■17912 / inTopicNo.7)  Re[6]: TabControlのItemSizeを変更方法
□投稿者/ tanaka (24回)-(2008/05/03(Sat) 15:20:00)
No17909 (よねKEN さん) に返信
>イメージ図にはtab1〜tab5が並んでいます。tab1の幅を大きくするとtab2〜tab5を並べるために必要な幅が物理的に足りなくなる
>のです。ということは、これらをどのように並べるべきか?ということ(画面仕様)を決めなければなりません。
>(TabControlでそれが実現できるかどうかは別として)

以下に例として記載しました。よねKEN 様のお聞きしたいこととまた違っていましたらご指摘ください。お願いします。

【例】
・TabContorol.width=300
・tab1〜tab5のItemSize.Width=60
・tab1のItemSize.Width=100になった場合
       ↓
・tab2〜tab5のItemSize.Width=(TabContorol.width - tab1のItemSize.Width) / 4

【ItemSize.Width】
tab1   =100
tab2〜tab5=50
引用返信 編集キー/
■17914 / inTopicNo.8)  Re[7]: TabControlのItemSizeを変更方法
□投稿者/ よねKEN (5回)-(2008/05/03(Sat) 16:03:44)
2008/05/03(Sat) 16:05:24 編集(投稿者)

> 以下に例として記載しました。よねKEN 様のお聞きしたいこととまた違っていましたらご指摘ください。お願いします。
>
> 【例】
> ・TabContorol.width=300
> ・tab1〜tab5のItemSize.Width=60
> ・tab1のItemSize.Width=100になった場合
>        ↓
> ・tab2〜tab5のItemSize.Width=(TabContorol.width - tab1のItemSize.Width) / 4
>
> 【ItemSize.Width】
> tab1   =100
> tab2〜tab5=50

私の聞きたかった点(tab2〜tab5をどう表示したいか?)という点が確認できましたので、内容は理解できました。
最初の私の投稿ではMSDNで各プロパティを確認しただけで試していませんでしたので、
今実際にItemSizeプロパティ等を使ってみました。それで、今気づいたところなのですが、
ItemSizeプロパティはTabControlのプロパティで、すべてのタブに共通のサイズを与えるためのプロパティですね。
そのため、ご希望のことはItemSizeプロパティを使って実現することはできません。

ご希望に近い内容としては、TabControlのSizeMode=Normalの指定のままでTabPageのTextプロパティの文言に
スペースを付加してサイズを調整する方法が考えられます。
この内容を説明の便宜上ソースコードで表すと以下のような感じ。

tabControl1.SizeMode = TabSizeMode.Normal;
tabControl1.TabPages[0].Text = " tab1 "; // 掲示板の表示上"tab1"の前後にスペースが1つずつ入っているように見えますが、実際には5個ずつスペースを入れています。
tabControl1.TabPages[1].Text = "tab2";
tabControl1.TabPages[2].Text = "tab3";
tabControl1.TabPages[3].Text = "tab4";
tabControl1.TabPages[4].Text = "tab5";

ただし、文字単位での幅調整しかできませんし、tab1〜tab5の幅の合計がTabControlの幅を超えてしまうと
▲▼(のような部分)の表示もされますので、何かしらの理由でそういったことが許容できないのであれば、
TabControlを使うことを断念する必要があるかもしれません。

#個人的にはTabSizeMode.Normalの設定の動作であるタブのテキストの文字数に合わせて幅が調整される
#この動作をそのアプリの仕様とする方がプログラムが複雑にならないのでよいと思いますが。

引用返信 編集キー/
■17915 / inTopicNo.9)  Re[8]: TabControlのItemSizeを変更方法
□投稿者/ tanaka (25回)-(2008/05/03(Sat) 17:29:35)
No17914 (よねKEN さん) に返信
ご回答ありがとうございます。

当方がイメージ図で書いたやりたい事がTabContorlでは無理であることが分かりました。
確かに仕様という事でTabControlを使用した方が初心者の当方としても楽でいいのですが
もし実現させる場合はMDI等も視野に入れたほうがいいのかもしれません。

一般的にこのような感じのGUIや処理の場合どういう方法が一般的なのでしょうか。
引用返信 編集キー/
■17924 / inTopicNo.10)  Re[9]: TabControlのItemSizeを変更方法
□投稿者/ 渋木宏明(ひどり) (743回)-(2008/05/04(Sun) 01:13:43)
渋木宏明(ひどり) さんの Web サイト
2008/05/04(Sun) 01:16:15 編集(投稿者)

> 一般的にこのような感じのGUIや処理の場合どういう方法が一般的なのでしょうか。

汎用的なものに仕上げる必要もなさそうなので

・必要なだけチェックボックスを並べて、ボタンに見えるようにスタイルを設定
・ボタンと同じ数だけパネルを配置
・ボタンの押下と連動して、パネルの表示状態、表示位置、表示サイズを調整

すればよろしんじゃないでしょうか。

引用返信 編集キー/
■17927 / inTopicNo.11)  Re[10]: TabControlのItemSizeを変更方法
□投稿者/ ま (27回)-(2008/05/04(Sun) 03:20:54)
2008/05/04(Sun) 03:47:24 編集(投稿者)
2008/05/04(Sun) 03:46:54 編集(投稿者)
2008/05/04(Sun) 03:40:43 編集(投稿者)

<pre><pre>■No17924 (渋木宏明(ひどり) さん) に返信
> ・必要なだけチェックボックスを並べて、ボタンに見えるようにスタイルを設定
ラジオボタンですよ、たぶん。
やってみたけど、全部押下状態になってしまったもん。

VBですけど、何かの参考にはなるか??ならんかも。
フローレイアウトパネルだと、5タブ表示に必要な最低幅は340ドットでした。
全部デフォルトで。ボタンの間は適当な間隔が空きます。

テキストBOXのとこが、タブコンテンツ用のパネルに挿げ替わるだけですね。

Public Class Form1

    Public Class MyTabCtrl : Inherits Panel

        Private flp As New FlowLayoutPanel
        Private txt As New TextBox


        Public Sub New()
            Me.Size = New Size(300, 300)
            Me.Dock = DockStyle.Fill

            'flp.BorderStyle = Windows.Forms.BorderStyle.FixedSingle
            flp.Height = 26

            flp.AutoScroll = False
            flp.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowOnly
            flp.Dock = DockStyle.Top
            txt.Dock = DockStyle.Fill
            txt.Multiline = True
            txt.BorderStyle = Windows.Forms.BorderStyle.None

            Me.Controls.Add(txt)
            Me.Controls.Add(flp)

            For i As Integer = 0 To 5 - 1
                Dim cb As New RadioButton
                cb.Appearance = Appearance.Button
                cb.FlatStyle = FlatStyle.Flat
                cb.Text = String.Format("タブ[{0}]", i + 1)

                cb.Width = 60

                AddHandler cb.Click, AddressOf Tab_Changed
                cb.Tag = String.Format("タブ{0} 選択", i + 1)
                flp.Controls.Add(cb)

            Next

            With CType(flp.Controls(0), RadioButton)
                .PerformClick()
            End With

        End Sub

        Private Sub Tab_Changed(ByVal s As Object, ByVal e As EventArgs)
            Dim cb As RadioButton = CType(s, RadioButton)
            txt.Text = cb.Tag

            For i As Integer = 0 To 5 - 1
                Dim rb As RadioButton = CType(flp.Controls(i), RadioButton)
                If cb.Equals(rb) Then
                    cb.Width = 100
                Else
                    rb.Width = 50
                End If
            Next
        End Sub

    End Class


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Size = New Size(340, 360)

        Me.Controls.Add(New MyTabCtrl())

    End Sub
End Class

訂正:タブっぽく見えるようにしました。
フローレイアウトパネルの高さを調整することでボタンとコンテンツが繋がっているように
見えるようにしました。
ボタンルックが希望だから関係ないか。
</pre></pre>

引用返信 編集キー/
■17934 / inTopicNo.12)  Re[11]: TabControlのItemSizeを変更方法
□投稿者/ tanaka (29回)-(2008/05/04(Sun) 14:49:45)
皆様色々なご意見ありがとうございました。
皆様のご意見や参考書やサイト等いろいろ参考に自分なりに試行錯誤してまいりましたが
今の自分のスキルレベルなどを考えてとりあえず通常のTabContorolでAppearance=Normalにして
▲▼が表示されないようにwidthを均等割り-1等にすることにしました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -