2010-08-02 24 views
0

我正在研究一種具有3種不同類型的自定義控件 - 平面,連接器和元素的應用程序。用戶可以將它們添加到畫布上,移動,刪除它們等等。到目前爲止都很好。這3種控制類型必須以特定的Z順序出現,無論用戶將哪些順序添加到畫布上。這就是問題所在。C#Form應用程序中多個控件的相同Z順序

平面必須位於最底部位置,元素必須位於最高位置,連接器務必位於平面和元素之間。無論用戶如何在畫布上添加它們以及從XML文件加載它們(可以通過保存它們的位置和其他屬性等來創建它們),都必須是這種情況。

我的問題是 - 什麼是實現我想要的Z排序的最佳方法?多個控件可以具有相同的Z順序(如上所述 - 所有平面必須位於最底層,等等......)

回答

1

Z-Order由父級控件集合中控件的索引確定,所以您必須在父控制集合中適當地訂購控件才能達到您想要的效果。

您可以掛鉤容器的ControlAdded事件以監視何時添加控件,並執行添加的相應控件類型的邏輯以正確定位它。

您可能必須跟蹤父級控件中索引的每種控件類型的邊界,並在添加控件時重新排列,以使平面保持爲最低索引,依此類推。

0

Form.Controls.SetChildIndex()爲我做了訣竅。即使ControlAdded()也可以用來設置子索引。感謝「Quintin Robinson」對此建議。

我用於我的目的的邏輯: 我爲畫布上的所有用戶控件製作了3個不同的(邏輯)組標籤索引。在添加/刪除控件上,我快速重新編制畫布上的所有控件。這樣,我總是擁有當前的標籤索引線性順序,因爲每當畫布上的控件數發生變化時都會分配它們。

根據我對類似控制類型的Z順序的要求,我重新編制它們。 (例如,所有元素從0到i-1索引,連接器從i索引到j-1,平面索引從j到k-1;其中i,j,k分別是元素,連接器和平面的數量。

相關問題