Dock.Fillの挙動

解決


しゅん  2008-11-09 23:10:38  No: 140813  IP: 192.*.*.*

WindowsXP-Pro SP3  VB2005 です

新しいプロジェクト -->  Windowsアプリケーション
でフォームのみの雛形ができます。
私の場合は縦横300になっています。

ここにツールボックスから二つのパネルを追加します。
大きさは説明の都合上縦横50にします。
重なる部分がなければ位置はフォーム内のどこでもかまいません。

#何も変更しなければ作った順番でPanel1,Panel2のNameプロパティが与えられます。

ここで二つのパネルを上下に並べるような操作を考えます。

実験1
まず最初は上側にPanel1を、下側にPanel2を配置するようにします。
手順1  Panel1のDockをTopにする
手順2  Panel2のDockをFillにする

これで期待通りの配置になります。
フォームの上側にPanel1が縦50横はフォームいっぱいに位置します。
その下のフォーム領域にPanel2がFillされます。
(Panel1とPanel2は重ならずに並びます)

#確認できたらPanel1,Panel2ともDockをNoneに戻します。

実験2
次に上側にPanel2を、下側にPanel1を配置するように操作します。
手順1  Panel2のDockをTopにする
手順2  Panel1のDockをFillにする

期待したようには並びません。
Panel2のDock.Topはそのとおりになりますが、Panel1のDock.Fillは
フォーム全体へのFillとなってしまいます。
(Panel1とPanel2が重なってしまいます)

これはどのような規則になっているのでしょうか?

また実験2で期待するような結果を出すためにはどのようにすればいいのでしょうか?

編集 削除
YuO  2008-11-10 10:30:14  No: 140814  IP: 192.*.*.*

> これはどのような規則になっているのでしょうか?

MSDNをちゃんと読みましょう。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.dock.aspx
>コントロールは、Z オーダーに基づいてドッキングされます。

> また実験2で期待するような結果を出すためにはどのようにすればいいのでしょうか?
使うのは,このあたりでしょうか。
・System.Windows.Forms.Control.BringToFront
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.bringtofront.aspx
・System.Windows.Forms.Control.ControlCollection.SetChildIndex
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.controlcollection.setchildindex.aspx
まぁ,Designer.vbいじってControlsへのAdd順序かえるのが手っ取り早かったりしますが。

編集 削除
しゅん  2008-11-10 12:05:58  No: 140815  IP: 192.*.*.*

YuO さん、早速の御回答ありがとうございます。

>MSDNをちゃんと読みましょう。
>http://msdn.microsoft.com/ja->jp/library/system.windows.forms.control.dock.aspx
>>コントロールは、Z オーダーに基づいてドッキングされます。

Zオーダーというものはフォームのデザイン画面にあるプロパティで
確認・変更できるものなのでしょうか?

デフォルトで(右下のプロパティウィンドウ)確認できる項目にはありませんでした。

編集 削除
 2008-11-12 11:51:33  No: 140816  IP: 192.*.*.*

なぜ回答の後半部を読み飛ばしているのですか?

編集 削除
しゅん  2008-11-12 13:03:58  No: 140817  IP: 192.*.*.*

>なぜ回答の後半部を読み飛ばしているのですか?

失礼しました。
読み飛ばしたわけではなく

>まぁ,Designer.vbいじってControlsへのAdd順序かえるのが手っ取り早かったりしますが。

この情報により実現可能な解決方法のひとつは提示されていることを
確認しています。

>・System.Windows.Forms.Control.BringToFront
>・System.Windows.Forms.Control.ControlCollection.SetChildIndex
に関しては簡単なプログラムを作って見ましたがうまく効果が確認でき
なかったことと、プログラムの実行が必要であることから、Designer.VB
をハンドで修正するほうを選択する方向にしたいと思いました。

ただ、ここで不思議なのが「Z オーダーに基づいてドッキングされます。」
という解説ですが、Zオーダー自体がデザイナの段階のプロパティにな
いことです。そこで

>Zオーダーというものはフォームのデザイン画面にあるプロパティで
>確認・変更できるものなのでしょうか?

という追加質問をした次第です。

編集 削除
matsu  2008-11-12 15:45:20  No: 140818  IP: 192.*.*.*

>>Zオーダーというものはフォームのデザイン画面にあるプロパティで
>>確認・変更できるものなのでしょうか?
>
>という追加質問をした次第です。

Panel1を右クリックして、最前面へ移動を選択すれば
期待する結果が得られると思います。

編集 削除
しゅん  2008-11-14 06:15:05  No: 140819  IP: 192.*.*.*

>Panel1を右クリックして、最前面へ移動を選択すれば

なるほど!
このようにすればフォームのデザイン画面で変更できるんですね。

ありがとうございました。

編集 削除