我有一個包含一個文本框的動態加載到窗體的用戶控件。 在表單啓動時,我啓動了usercontrol,並將其可見性標記設置爲'false'。 我想在用戶控件變得可見時自動觸發一個方法,因爲此方法將一些輸出寫入文本框,此方法應該只在usercontrol及其所有繼承的控件對用戶可見後纔開始執行。
我認爲paintEventHandler應該是當一個窗體及其繼承的控件在例如控件的可見性發生變化後重新繪製時觸發的最後一個事件。
因此,訂閱paintEventHandler應在表單完全重新繪製後觸發我訂閱的方法,但顯然不是,我的方法在我的文本框仍處於隱藏狀態時執行,僅在方法執行完畢後纔可見。
對此有何想法?如何在用戶控件完全可見後執行方法
private void processControl_SetActive(object sender, CancelEventArgs e)
{
this.BeginInvoke((MethodInvoker)delegate
{
this.Paint += new PaintEventHandler(processControl_Paint);
});
}
void processControl_Paint(object sender, PaintEventArgs e)
{
//Should only be called when everything is fully loaded and visible on the form.
//Application.DoEvents() ->probably bad idea??
AddStuffToTextBox();
}
你想從更高的水平完成什麼?例如,爲什麼在文本框不可見時向文本框添加文本是不可接受的?讓我們幫助您嘗試解決實際問題,這可能涉及與您在問題中概述的方法不同的方法。 – Eric 2009-07-29 12:01:18
sich沒有真正的問題。但是,如果在文本框行之後添加文本,並且在用戶實際看到文本框從一開始就被填滿之間存在一定的延遲,那將會很不錯。現在,在窗體仍在加載時寫入文本框的行只是在完成後立即出現。顯然,在'visibleChanged'事件上註冊並不能做到這一點。我更期待的是說,一個事件「我做現在載入和處理所有UI事件,你現在可以走了,並添加表格/使用任何控制」。 – Mez 2009-07-29 18:42:03