在Winform自定义的控件开发中,突然发现Controls集合没有一般IList所对应的Insert方法, 这是为什么呢?不是实现了IList中的方法么?
呵呵,不要忘记实现借口可以显示实现,这样ControlCollection类虽然实现了IList,但是影藏了Insert等方法,并且提供了SetChildIndex这个方法,MS希望如果需要调整Control在Controls里的位置,先Add这个Control,然后在用SetChildIndex这个方法调整,这是为什么呢?让我们反编译一个SetChildIndex这个方法,看看到底做了什么。
if (child == null)
{
throw new ArgumentNullException("child");
}
int childIndex = this.GetChildIndex(child);
if (childIndex != newIndex)
{
if ((newIndex >= this.Count) || (newIndex == -1))
{
newIndex = this.Count - 1;
}
base.MoveElement(child, childIndex, newIndex);
child.UpdateZOrder();
LayoutTransaction.DoLayout(this.owner, child, PropertyNames.ChildIndex);
}