C# VS2010设计器Z顺序

C# VS2010设计器Z顺序,c#,winforms,visual-studio-2010,designer,C#,Winforms,Visual Studio 2010,Designer,我正在尝试更改VS2010设计器中某些停靠面板的z顺序。然而,每次我保存设计器、关闭它并重新打开它时,z顺序都会恢复到我更改它之前的状态 我尝试过使用文档大纲和SendToBack上下文菜单,但两者的行为方式相同。我还注意到,在另一个可行的解决方案中,.designer.cs文件实际上并没有改变(我假设控件添加顺序会指示z顺序) 我还有别的办法吗?我真的不想在运行时这样做 编辑 this.mainPanel.BackColor = System.Drawing.SystemColors.Cont

我正在尝试更改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);
pnlRangeSelector具有Dock.Top HeaderandFootherrowCounts有码头,对吗

但是,在渲染时,HeaderAndFootrRowCounts将占据其父面板的整个右侧,而pnlRangeSelector将占据左侧部分

这对我来说意味着pnlRangeSelector在后面的位置并不像预期的那样正确

更新

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);
似乎顺序总是RangeSelector=0,HeaderAndFooter=1。即使我在这之前打过电话:

this.mainPanel.Controls.SetChildIndex(this.pnlRangeSelector, 1);
this.mainPanel.Controls.SetChildIndex(this.headerAndFooterRowCounts, 0);

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


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

我遇到了类似的问题,发现问题出在设计器代码中。在我的基础表格中,caseHeader停靠在顶部。然后,我添加了formInstructions并将其停靠到顶部。因此,我的基地在案件标题下有表格说明。这是理想的外观

在派生形式中,外观是相反的。我研究了对接、自动调整大小、z-顺序等,但都没有用

最后,我发现Designer正在更改各种控件的子索引。这是我在Designer代码中解决问题的方法:

//this.Controls.SetChildIndex(this.caseHeader, 0);

控件已按正确顺序添加(首先是后台面板,然后是前台面板)。是否声明或添加到集合?你能把密码寄出去吗?你需要颠倒顺序。先添加最后一个。。。这是违反直觉的,但我用一个窗体上的两个按钮进行了测试。交换它们实际上没有什么区别,渲染方式完全相同。这对我来说确实有所不同。你有没有可能下载完整的代码?我注意到您需要在编辑设计器文件之前关闭所有文件。这更接近于确定问题的根源:对于我来说,对于某个特定控件,可能对于其他控件,设计器正在通过调用
SetChildIndex()
来破坏Z顺序。但是,如果您在Designer中对其进行注释,Designer将在下次保存时还原您的编辑。所以这不是一个解决方案。