DOBON.NETプログラミング道掲示板

ツリー一括表示

Nomalアイコン PanelのDock=Topだとうまくいかない。代替案。 /ぽとて (21/03/02(Tue) 19:44) #34662
Nomalアイコン Re[1]: PanelのDock=Topだとうまくいかない。代替案。 /魔界の仮面弁士 (21/03/03(Wed) 09:24) #34664
  └Nomalアイコン Re[2]: PanelのDock=Topだとうまくいかない。代替案。 /ぽとて (21/03/03(Wed) 23:22) #34665 解決み!


親記事 / ▼[ 34664 ]
■34662 / 親階層)  PanelのDock=Topだとうまくいかない。代替案。
□投稿者/ ぽとて 一般人(1回)-(2021/03/02(Tue) 19:44:27)
  • アイコン環境/言語:[Visual Studio 2017 (VB)] 
    分類:[.NET] 

    2021/03/02(Tue) 19:52:31 編集(投稿者)
    2021/03/02(Tue) 19:52:25 編集(投稿者)
    2021/03/02(Tue) 19:51:57 編集(投稿者)
    
    フォームにPanelを2つ(Panel1とPanel2)、配置します。
    Panel1はフォームの上にぴったりくっつけます。
    Panel2はPanel1の下にぴったりくっつけます。
    Panel1とPanel2は高さが固定ではありません。
    (実際には、同じように
     Panel2の下にPanel3、
     Panel3の下にPanel4と
     全部で4つPanelがありますが、
     ここでは省略します。)
    
    上を実現するために
    Panel1.DockとPanel2.DockをTopにすると
    実現できます。
    
    フォームのサイズは手動で変更可能です。
    フォームのサイズを小さくした場合には
    フォームにスクロールバーを表示させて
    スクロールすればPanel1,Panel2を表示できるようにしたいので
    フォームのAutoScrollをTrueに設定しています。
    
    このようにした時に、
    フォーム右側に縦スクロールは表示されるのですが、
    下に横スクロールが表示されません。
    
    下に横スクロールも表示させる、良い方法はありませんでしょうか?
    Dock=Topを使わなくても、実現できるのであれば、それでもかまいません。
    
    上手く説明できていないかもしれませんが、
    よろしくお願いします。
    
    
    
    
    ┏━━━━━━━━━━━┓
    ┃タイトルバー     ┃
    ┣━━━━━━━━━┳━┫
    ┃Panel1      ┃▲┃
    ┃         ┃ ┃
    ┃         ┃ ┃
    ┠─────────┨ ┃
    ┃Panel2      ┃ ┃
    ┃         ┃ ┃
    ┃         ┃▼┃
    ┗━━━━━━━━━┻━┛
    
      下のようにしたい。
    ┏━━━━━━━━━━━┓
    ┃タイトルバー     ┃
    ┣━━━━━━━━━┳━┫
    ┃Panel1      ┃▲┃
    ┃         ┃ ┃
    ┃         ┃ ┃
    ┠─────────┨ ┃
    ┃Panel2      ┃ ┃
    ┃         ┃ ┃
    ┃         ┃▼┃
    ┣━━━━━━━━━╋━┫
    ┃←       →┃ ┃
    ┗━━━━━━━━━┻━┛
    

違反を報告
[ □ Tree ] 返信 削除キー/

▲[ 34662 ] / ▼[ 34665 ]
■34664 / 1階層)  Re[1]: PanelのDock=Topだとうまくいかない。代替案。
□投稿者/ 魔界の仮面弁士 大御所(1317回)-(2021/03/03(Wed) 09:24:51)
  • アイコンNo34662に返信(ぽとてさんの記事)
    > フォームにスクロールバーを表示させて
    > スクロールすればPanel1,Panel2を表示できるようにしたいので
    > フォームのAutoScrollをTrueに設定しています。

    水平にせよ垂直にせよ、スクロールバーというものは、
    「表示しきれないほどの広大な領域」があって、それを
    「それよりも狭小な領域」に収めるための手段ですよね。

    では今回の場合、本来あるべきスクロール量は如何ほどなのか、
    事前にわかるようになっているのでしょうか。


    たとえば、必要な領域が 3000x2000 だとして、これを収めたいとします。
    4K モニターで 100% 解像度(3840x2160) なら入りきりますが、
    2K モニター(1920x1080)だと、スクロールが必要になる状況です。

    その場合、たとえばこのように配置することができます。

    (1) Form1 上に、下記の Panel0 を配置する。
     AutoScroll = False
     Location = (0,0)
     Dock = None
     Size = (3000,2000)…必要な領域サイズ

    (2) Panel0 上に、Panel1 を Dock = Top で配置

    (3) Panel0 上に、Splitter1 を Dock = Top で配置。(無くても良い)

    (4) Panel0 上に、Panel2 を Dock = Top で配置。

    (5) Panel0 上に、Splitter2 を Dock = Top で配置。(無くても良い)

    (6) Panel0 上に、Panel3 を Docl = Fill で配置。

    (7) Form1 の AutoScrollMode を True に設定すれば完成です。
     必要に応じて、MaximumSize と MinimumSize も設定しておきましょう。



    > Panel1とPanel2は高さが固定ではありません。
    どのように変動させるのか分からなかったので、上記では Splitter を使わせてもらいました。

    他にも、Panel0 を SplitContainer (Orientation = Horizontal) や
    TableLayoutPanel に差し替える手もあります。

    ※ただし TableLayoutPanel はレンダリングが遅いため、あまりお奨めしません。

違反を報告
[ 親 34662 / □ Tree ] 返信 削除キー/

▲[ 34664 ] / 返信無し
■34665 / 2階層)  Re[2]: PanelのDock=Topだとうまくいかない。代替案。
□投稿者/ ぽとて 一般人(2回)-(2021/03/03(Wed) 23:22:37)
  • アイコンなんとなくできそうな気がしてきました。
    フォームに直接Panelを配置せず、間に1個Panelをかませばよいのですね。
    試してみようと思います。ありがとうございました。

    例えばですが、
    Panel1上にDataGridView(Anchor=Top,Left,Right,Bottom)が配置されていて、
    DataGridViewには縦スクロールバーを表示させずに
    全データを(スクロールせずに)表示させたいという物があります。
    その場合、DataGridViewにDataTableをセットした上で
    行数や高さ、ColumnHeaderの高さなどから
    DataGridView自体の高さを算出し、そこからPanelの高さを算出して、
    PanelのHeightに設定、というような感じの事をしています。
    スクロールバーはPanelやDataGridViewには表示させず、
    一番外側のフォームにのみスクロールバーが表示されるようにする。

解決み!
違反を報告
[ 親 34662 / □ Tree ] 返信 削除キー/


Mode/  Pass/


- Child Tree -