2011-05-26 20 views
6

我正在嘗試更改VS2010設計器中某個停靠面板的z順序。但是,每次我保存設計師時,關閉它並重新打開它,z順序已經恢復到它改變之前的狀態。VS2010 Designer Z-Order

我試過使用文檔大綱和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

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

似乎順序總是RangeSelector = 0,HeaderAndFooter = 1。即使我調用下面的只是在此之前:

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

回答

1

控件添加到父級控件集合的順序決定了z順序。因此,解決此問題的最佳方法(AFAIK)是對設計器文件進行備份,然後編輯控件的順序已添加到集合

如果您需要幫助,請發佈代碼。

+0

控件已按正確順序添加(背景面板第一個,前景面板下一個)。 – Ian 2011-05-26 12:12:18

+0

聲明或添加到集合?你能發佈代碼嗎? – 2011-05-26 12:14:04

+0

添加了設計者的添加代碼。 – Ian 2011-05-26 12:18:44

1

我有一個類似的問題,發現問題出現在設計器代碼中。在我的基本形式中,caseHeader被停靠在頂部。然後,我添加了formInstructions並將其停靠在頂部。因此,我的基地在caseHeader下面有formInstructions。這是所需的外觀。

在派生形式中,外觀相反。我研究了對接,自動調整,z-order等等 - 都無濟於事。

最後,我發現Designer正在改變各種控件的子索引。這是我在設計器代碼中修復此問題的方法:

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

這更接近於確定問題的根源:對於我來說,對於某個特定的控件或者對其他人來說,Designer是通過調用SetChildIndex()來顛覆Z順序的。但是,如果您在Designer中對其進行註釋,Designer會在下次保存時恢復編輯。所以這不是一個解決方案。 – binki 2018-02-27 22:33:18