VS2010 Designer Z-Order

时间:2011-05-26 11:06:20

标签: c# winforms visual-studio-2010 designer

我正在尝试更改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在后面不正确,就像它应该的那样。

enter image description here

更新

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);

2 个答案:

答案 0 :(得分:1)

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

的顺序

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

答案 1 :(得分:1)

我遇到了类似的问题,发现问题出现在Designer代码中。在我的基本表单中,caseHeader停靠在顶部。然后,我添加了formInstructions并将其停靠在顶部。因此,我的base在caseHeader下面有formInstructions。这是理想的外观。

在衍生形式中,外观相反。我研究了对接,自动调整,z顺序等等 - 一切都无济于事。

最后,我发现Designer正在改变各种控件的子索引。这就是我在Designer代码中为修复问题所做的:

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