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