C#Form应用程序中多个控件的Z顺序相同

时间:2010-08-02 00:57:45

标签: c# forms

我正在开发一个具有3种不同类型的自定义控件的应用程序 - 平面,连接器和元素。用户可以在画布上添加它们,移动,删除等等。到目前为止一切都很好。这三种类型的控件必须以特定的Z顺序出现,无论用户在画布上添加它们的顺序。这就是问题所在。

飞机必须位于最底部位置,元素必须位于最顶部位置,连接器必须位于平面和元素之间。无论用户如何在画布上添加它们以及从XML文件加载它们(可以通过保存它们的位置和其他属性等来创建),都必须如此。

我的问题是 - 实现我想要的Z排序的最佳方法是什么?多个控件可以具有相同的Z顺序(如上所述 - 所有平面必须位于最底层,依此类推......)

2 个答案:

答案 0 :(得分:1)

Z-Order由父控件集合中控件的索引决定,因此您必须在父控件集合中适当地对控件进行排序,以达到您想要的效果。

您可以挂钩容器的ControlAdded事件来监视添加控件的时间,并执行添加的相应控件类型的逻辑以正确定位。

您可能必须跟踪父控件中索引的每种控件类型的边界,并在添加控件时重新排列,以便将平面保留为最低索引,依此类推。

答案 1 :(得分:0)

Form.Controls.SetChildIndex()正在为我做这个伎俩。甚至可以使用ControlAdded()来设置子索引。感谢“Quintin Robinson”提出这个建议。

我用于我的目的的逻辑: 我为画布上的所有用户控件制作了3个不同的(逻辑)选项卡索引组。在添加/删除控件上,我快速重新索引画布上的所有控件。这样我总是有当前线性顺序的选项卡索引,因为每次画布上的控件数量发生变化时都会分配它们。

根据我对相似类型控件的Z顺序的要求,我重新索引它们。 (例如,所有元素都从0到i-1索引,连接器从i索引到j-1,平面从j索引到k-1;其中i,j,k分别是元素,连接器和平面的数量。)