WinForms に UI またはコンテナーを追加すると、後で追加されたコンポーネントが以前に追加されたコンポーネントの上に配置されます。これは上位層にあると言えます。
コンポーネントを追加した後にレイヤーの順序またはコンポーネントの順序を変更するにはどうすればよいですか?
WinForms に UI またはコンテナーを追加すると、後で追加されたコンポーネントが以前に追加されたコンポーネントの上に配置されます。これは上位層にあると言えます。
コンポーネントを追加した後にレイヤーの順序またはコンポーネントの順序を変更するにはどうすればよいですか?
複数のコントロールを同じ場所に配置すると、一方が上に配置され、もう一方が下に配置されます。通常、これはサイズ変更可能なフォームを作成するためにアンカー機能とドッキング機能を誤って使用するなどの軽微なミスの結果です。ただし、場合によっては、特定の効果のコントロールをオーバーラップさせたい場合があります。
コントロールがオーバーラップする場合、どのコントロールが一番上になるかを決定するのは z-index です。基本的に、すべてのコントロールは独自の番号付きレイヤーに存在します。z-index レイヤー 1 を持つコントロールは、z-index レイヤーのコントロールの上に表示されます。通常、コントロールのグループの z-index は、コントロールを追加する順序によって決定されるため、最後に追加したコントロールは常に最上位レイヤー (z-index は 0) に配置されます。 .
ただし、これらのオプションは変更できます。
GetChildIndex()
コントロールの z-index を決定または設定するには、Controls コレクションのおよびメソッドを使用できます。SetChildIndex()
コントロールを z-index の 3 番目のレイヤーに移動する例を次に示します。
Controls.SetChildIndex(ctrl, 2);
通常、この種の粒度の細かいコントロールは必要ありません。代わりに、コントロールを z-index (最下部のレイヤー) の後ろにドロップするか、上部に移動するだけで済みます。コントロールを右クリックし、[前に移動] または [最背面に移動] を選択して、設計時にこの機能を実現します。Control.BringToFront()
またはControl.SendToBack()
メソッドを使用して、同じタスクをプログラムで実行することもできます。
ctrl.BringToFront(); // This is equivalent to Controls.SetChildIndex(ctrl,0);
コードまたはデザイナーでコンポーネントを動的にロードするときですか? デザイナーにある場合は、[書式] -> [順序] -> [最背面へ移動]および[書式] -> [順序] -> [最前面へ移動]コマンドを使用できます。[最背面へ移動] および [最前面へ移動] は、コントロールを右クリックしたときのコンテキスト メニュー、およびフォーム デザイナで作業するときに自動的に表示される [レイアウト] ツールバーでも使用できます。
デザイナー ビューでは、[ドキュメント アウトライン] パネルを開いて現在のフォーム/コントロールのツリー構造を表示し、コンポーネントを上下にドラッグして前後に移動することもできます。コンテナの内外。
Zオーダーで遊んでみましたか?
関連項目: Control.SentToBackメソッド - ほとんどの Winform コントロールはこれをサポートする必要があります。