假设Panel中从上到下有3个Button:Button1、Button2、Button3。首先,我写了一个方法A:用foreach(Button ButtonName in Panel)的方法,将获取的Button全部放到一个Button[]数组中。此时查看Button[]数组,获取的Button在数组中的顺序是Button1、Button2、Button3。然后我写了一个方法B,方法是用修改Location的办法交换了Button2和Button3的Location。执行此方法,没问题,Button2和Button3在Panel中交换了位置。再次执行方法A,问题来了,获取的Button在数组中的顺序依然是Button1、Button2、Button3。问题1:再次执行A难道不应该是Button1、Button3、Button2吗?问题2:怎样修改方法A才能获得Button1、Button3、Button2的顺序呢?问题3:如何获取容器内指定位置的控件呢?
2、数组里顺序你自己可以调整,和location的顺序两回事
3、按创建顺序取
那能修改Button的创建顺序吗?因为如果控件多了,交换位置每次都要读取控件的顺序,数组是临时的,用完就回收了。
3.可以遍历找;也可以先用API ChildWindowFromPoint拿到句柄,然后通过Control.FromHandle获得相应的托管对象引用。---------------------------
你要改子窗口在父窗口Controls集合中的索引也可以,ControlCollection(Control.Controls的类型)公开了GetChildIndex和SetChildIndex两个函数来获取和修改子窗口在父窗口controls集合中的索引。
不过要注意上面说的,这个索引值在winform中还充当了z层叠顺序的角色,你改这个值实际上在修改控件的z层叠顺序,改的时候要考虑到这一点。
创建一个Dictionary,用来保存button.Name与button顺序的键值对,每次变换location的时候,同样变换这个Dictionary