我創建了一個帶有加載Panel
的Form
。這個想法是,我想顯示這個加載面板,直到我的動態創建的控件準備好顯示。防止Winforms控件在動態添加到控件集合時變爲可見
加載Panel
最初是可見的,然後在OnShown
事件期間,我創建我的控件並將其添加到頁面。我使用OnShown
的原因是Form
正在Mdi場景中使用,所以我需要它在我開始加載控件之前完全顯示(如果我在Load事件中嘗試這樣做,那麼Mdi Tab不會顯示,直到我的控制被加載)。
的問題是,有noticable忽悠我相信這是由於這樣的事實,當我加入我的控制到Controls
集合:
一)Visible屬性立即設置爲true。 b)儘管z-index似乎是正確的,我的控件似乎出現在加載面板的前面。
這裏是問題
protected override void OnShown(EventArgs e)
{
Debug.WriteLine(loadingPanel.Visible); //true
Debug.WriteLine(Controls.GetChildIndex(loadingPanel)); //0
Debug.WriteLine(myControl.Visible); //false
myControl.Visible = false;
Controls.Add(myControl);
//**
Debug.WriteLine(myControl.Visible); //true
Debug.WriteLine(Controls.GetChildIndex(loadingPanel)); //0
Debug.WriteLine(Controls.GetChildIndex(myControl)); //1
Debug.WriteLine(loadingPanel.Visible); //true
base.OnShown(e);
}
我希望我可以我的控件添加到集合,它會保持Visible = false
這樣我就可以設置Visible = true
當我控制的Load事件已完成的要點。相反,我的控制進入視野,我得到閃爍。有趣的是,如果我在任何時候都沒有設置loadingPanel.Visible = false
,那麼一旦我的控件完成加載,loadPanel會重新出現並隱藏我的控件。
任何想法?
您可以重寫paint方法並在OnShown方法中設置一個標誌,跳過任何繪畫操作直到添加完成。只是在黑暗中刺傷! – Charleh
@Charleh能否再詳述一下,聽起來可能是值得嘗試的東西?也許在一個答案? – OffHeGoes