VS2010 Designer Z-Order

Ian*_*Ian 6 c# designer visual-studio-2010 winforms

我正在尝试更改VS2010设计器中某些停靠面板的z顺序.但是,每当我保存设计器,关闭它并重新打开它时,z顺序已经恢复到我改变它之前的状态.

我已尝试使用文档大纲和SendToBack上下文菜单,但两者的行为方式相同.我也注意到在另一个解决方案中它确实有效,.designer.cs文件实际上并没有改变(我假设控制添加顺序会指示z顺序).

有没有其他方法可以做到这一点?我真的不想在运行时这样做...

编辑

this.mainPanel.BackColor = System.Drawing.SystemColors.Control;
this.mainPanel.Controls.Add(this.pnlRangeSelector);
this.mainPanel.Controls.Add(this.headerAndFooterRowCounts);
Run Code Online (Sandbox Code Playgroud)

pnlRangeSelector有Dock.Top headerAndFooterRowCounts有Dock.Right

但是,当渲染时,headerAndFooterRowCounts将占据其父面板的整个右侧,而pnlRangeSelector将获取左侧部分.

这告诉我,pnlRangeSelector并不像它应该的那样正确地在后面.

在此输入图像描述

UPDATE

int i = 0;
String output = String.Empty;
foreach (var c in this.mainPanel.Controls)
{
    if (c == pnlRangeSelector) { output += "RangeSelector at : " + i.ToString() + "\r\n"; }
    else if (c == this.headerAndFooterRowCounts) { output += "HeaderAndFooter at : " + i.ToString() + "\r\n"; }
    i++;
}
MessageBox.Show(output);
Run Code Online (Sandbox Code Playgroud)

似乎顺序总是RangeSelector = 0,HeaderAndFooter = 1.即使我在此之前调用以下内容:

this.mainPanel.Controls.SetChildIndex(this.pnlRangeSelector, 1);
this.mainPanel.Controls.SetChildIndex(this.headerAndFooterRowCounts, 0);
Run Code Online (Sandbox Code Playgroud)

Ern*_*rno 2

将控件添加到父级 Controls 集合中的顺序决定了 z 顺序。因此,解决此问题的最佳方法(据我所知)是备份设计器文件,然后编辑控件添加到集合中的顺序

如果您需要帮助,请发布代码。