パネルの子コントロールのコレクション全体を並べ替えて、表示される順序を変更できます。
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 にあります。コントロールをフォーム/パネルにドロップすると、順序が逆になる場合があります。デザイナーが生成したファイルを見て、注文を見てください。