我试图在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占据Left的一部分。

这向我暗示了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)是备份设计器文件,然后编辑将控件添加到集合中的顺序

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

关于c# - VS2010 Designer Z顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6137514/

10-12 12:43
查看更多