我正在尝试更改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 headerAndFooterRowCounts具有Dock.Right
然而,当渲染时,headerAndFooterRowCounts采用其父面板的整个右侧,而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);
答案 0 :(得分:1)
将控件添加到父级的Controls集合的顺序决定了z顺序。因此,解决此问题的最佳方法(AFAIK)是备份设计器文件,然后编辑控件添加到集合
的顺序如果您需要帮助,请发布代码。
答案 1 :(得分:1)
我遇到了类似的问题,发现问题出现在Designer代码中。在我的基本表单中,caseHeader停靠在顶部。然后,我添加了formInstructions并将其停靠在顶部。因此,我的base在caseHeader下面有formInstructions。这是理想的外观。
在衍生形式中,外观相反。我研究了对接,自动调整,z顺序等等 - 一切都无济于事。
最后,我发现Designer正在改变各种控件的子索引。这就是我在Designer代码中为修复问题所做的:
//this.Controls.SetChildIndex(this.caseHeader, 0);