我在我的代碼中有一席之地,我正在動態地將控件添加到Top-Down排列的FlowLayoutPanel中。我需要控件以某種順序出現,所以我每次都在做的是清除FlowLayoutPanel.Controls集合,然後按照我希望它們出現的順序添加每個子控件。我的代碼是這樣的:將控件添加到FlowLayoutPanel時發生意外的索引更改
private void arrangement1()
{
flowLayoutPanel1.Controls.Clear();
flowLayoutPanel1.Controls.Add(control1);
flowLayoutPanel1.Controls.Add(control2);
flowLayoutPanel1.Controls.Add(control3);
}
大多數情況下,這個工程很好。但是,有一個特定的控件在其後面添加其他控件時不會保持它在控件集合中的位置。例如在以下代碼段中:
private void arrangement2()
{
flowLayoutPanel1.Controls.Clear();
flowLayoutPanel1.Controls.Add(control1);
flowLayoutPanel1.Controls.Add(movingControl);
//movingControl current is at index = 1 in Controls.
flowLayoutPanel1.Controls.Add(control2);
//control2 is now at index = 1, movingControl got bumped to index = 2 in Controls.
flowLayoutPanel1.Controls.Add(control3);
//control3 is now at index =2, movingControl got bumped to index = 3 in Controls.
}
這隻發生在首次將moveControl添加到控件時。如果我回去再次打電話給安排1和安排2。該控件將出現在預期的順序:
- 控制1
- movingControl
- 控制2
- CONTROL3
這似乎是在Controls.Add被代碼中的錯誤。無論是那個還是.Add行爲的文檔都是不完整的,因爲它並不總是添加到集合的末尾。有沒有人對這種情況發生的原因有所瞭解。最明顯的「修復」,就是隻要致電:
arrangement2();
arrangement1();
arrangement2();
然而,這似乎是一個非常貧窮的解決方案,其他一些潛在的問題。
在此先感謝您的幫助!
編輯:請注意,這些控件中的每一個都是自定義視圖類的成員,因此它們在控件集合清除後仍然存在。但是,這些控件不會以任何有序集合的形式存儲。他們只是這個自定義類的成員。上面顯示的代碼正常工作,如圖所示。但是,在我的GUI程序中,它具有所描述的錯誤行爲。我會發布更多的代碼,如果我有任何想法會有所幫助,但有很多代碼涉及這些peices。這是爲所描述的操作執行的所有代碼。
我真正在尋找的是什麼可能的情況導致Controls.Add添加控件不是在集合的最後一個索引。特別是在調用Clear()和NO Remove()調用之後。
有一個類似的問題 - 而不是使用Controls.Add(按鈕)我使用Button.parent = flowLayoutPanel。這樣做會導致更改順序 - 切換到controls.add將所有內容都按正確順序排列。 – 2010-09-09 17:42:52