神風回答 じゃんぬさんにアドバイスを頂き、ある課題が即座に解決したのですが、そのアドバイスの中にあるZOrderによるコントロールの動きが興味深かったので、非常に簡単なコードを踏まえ、Zオーダーの動きを確認してみました。
ツッコミ 大募集中です。
【 内容 】
Z オーダーの変更に伴う、コントロールの視覚効果の変移と出力結果の単純な確認。
【 検証 】
用意するフォーム及びコントロール
コントロールの種類 |
プロパティ |
プロパティの値 |
Form |
Name |
Form1 ( 初期値 ) |
|
Size |
300, 300 ( 初期値 ) |
|
Text |
Form1 ( 初期値 ) |
Button |
Name |
Button1 ( 初期値 ) |
|
Dock |
Top |
|
Size |
292, 64 |
|
Text |
Button1 ( 初期値 ) |
Button |
Name |
Button2 ( 初期値 ) |
|
Dock |
Left |
|
Size |
75, 202 |
|
Text |
Button2 ( 初期値 ) |
Button |
Name |
Button3 ( 初期値 ) |
|
Dock |
Bottom |
|
Size |
292, 64 |
|
Text |
Button3 ( 初期値 ) |
Button |
Name |
Button4 ( 初期値 ) |
|
Dock |
Right |
|
Size |
75, 202 |
|
Text |
Button4 ( 初期値 ) |
Button |
Name |
Button5 ( 初期値 ) |
|
Dock |
Fill |
|
Size |
--- ?( 未設定 ) |
|
Text |
Button5 ( 初期値 ) |
※ 今回の検証で、特に必要なプロパティの変更を赤色太字で表記してあります。
Visual Basic 2005 コード ( 未確認ですが Visual Basic 2002/2003 動作可能と思います。)
Public Class Form1
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click
' Form1のコントロールコレクションからコントロールを取得
For Each MyButtons As Control In Me.Controls
' クリックしたButtonコントロールのZオーダーを最背面に移動
DirectCast(sender, Button).SendToBack()
' Z オーダーの変更結果を出力
Console.WriteLine(MyButtons.Name)
Next
End Sub
End Class
【 検証結果 】
1・ Button1 をクリックした時の動作結果
画面 :
出力結果 : Button5
Button4
Button3
Button2
Button1
2・ Button2 をクリックした時の動作結果
画面 :
出力結果 : Button5
Button4
Button3
Button1
Button2
3・ Button3 をクリックした時の動作結果
画面 :
出力結果 : Button5
Button4
Button1
Button2
Button3
4・ Button4 をクリックした時の動作結果
画面 :
出力結果 : Button5
Button1
Button2
Button3
Button4
5・ Button5 をクリックした時の動作結果
画面 :
出力結果 : Button1
Button2
Button3
Button4
Button5
※ これらの検証はButton1~Button5までを順番にクリックした時の結果です。任意のButtonコントロールをクリックする時の出力される結果は、クリックする順番により上記のようにはならない場合があります。
【 まとめ 】
今回、プログラムコード上でコントロールのZオーダーを最背面に移動するために使ったメソッドは SendToBack メソッドである。
最前面に移動した場合は BringToFront メソッドを使用する。
※ コントロールを親のZオーダーで更新するための UpdateZOrder メソッドもあるが今回は検証していない。
イベントを監視し、Zオーダーをプログラムコードで変更することで、視覚効果にも興味深い変化が確認できた。
複数のPanelコントロールなどを使用したインターフェースを作成する時など、これらの動きを意識して見るとまた一味違ったアプリケーションが構築できそうである。