1

パネルを使用してさまざまなコントロールと GDI 描画を含むレイヤー システムを使用していますが、表示される順序を変更したいと考えています。パネルでメソッドを使用しBringToFront()ましたが、これにより前面に表示されますが、追加したコントロールは他のコントロールの背後に表示されたままです。これらのコントロールを同様に表示する方法はありますか?

ありがとう。

編集:

これらのパネルは透明であることを付け加えておきます。そして、次のようにコントロールをパネルに追加しますpanelName.Controls.Add(newControl);

4

2 に答える 2

0

パネルの子コントロールのコレクション全体を並べ替えて、表示される順序を変更できます。

Panel panel; //your top-most panel; this can be as well a Form

for (int i = 0; i < panel.Controls.Count; i++)
{
    panel.Controls.SetChildIndex(
        panel.Controls[i], panel.Controls.Count - 1 - i
    );
}

この例を単純にするために、コレクションは逆順にソートされますが、必要に応じて新しい子インデックスを計算するロジックを自由に追加できます。
明らかに、ここで重要なのはSetChildIndexメソッド (ドキュメント) であり、コレクション内のコントロール インデックスを再配置できます。

その型 (または別の単一の型) のオブジェクトのみを並べ替えたい場合Panelは、LINQ を使用してすばやく行う方法があります。

List<Panel> sorted = panel.Controls.OfType<Panel>().ToList();
sorted.Sort((p1, p2) => p1.TabIndex.CompareTo(p2.TabIndex));
panel.Controls.Clear();
panel.Controls.AddRange(sorted.ToArray());

これにより、すべてのパネルがタブ インデックスを比較して並べ替えられます (例として)。これを他のプロパティに変更するのは簡単です。

もう 1 つの最も一般的な「間違い」は、*.Designer.cs-file にあります。コントロールをフォーム/パネルにドロップすると、順序が逆になる場合があります。デザイナーが生成したファイルを見て、注文を見てください。

于 2013-11-05T16:31:34.033 に答える
-1

パネル上のコントロールのリスト ( Panel.Controls に含まれる) をループして、それらを前面に表示することもできます。

例: - 3 つのボタン b1、b2、および b3 を持つパネル p1 があるとします。

p1 を前面に出し、すべてのコントロールを行うには:

p1.BringToFront();
foreach(var c in p1.Controls){ c.BringToFront();}
于 2013-11-05T15:57:58.557 に答える