2009-12-17 80 views
1

我正在開發Windows Mobile 5.0或更高版本.Net Compact Framework 2.0 SP2C#如何知道何時顯示錶單?

我有一個只有自定義控件的WinForm。當窗體完成加載並顯示控件時,我想調用該自定義控件的方法。

現在我使用激活事件,但每次關閉消息框時都會拋出這些事件。

當時是否有事件發生?

謝謝。

回答

6

只需使用激活事件,並在你的形式一個布爾值,設置爲true,當你已經呼籲您的自定義控制的方法。當表單的激活事件再次觸發時,您只需檢查此布爾值。

+0

我認爲這是一個糟糕的設計,使用全局布爾變量在激活事件中運行一次代碼。 – VansFannel 2009-12-18 14:04:33

+0

如果你使用這個hack,你不需要在整個生命週期中管理布爾值嗎? – Chris 2009-12-18 14:24:45

+0

它不是一個全局變量,它僅在表單本地。這個布爾管理很多嗎?不這麼認爲。在課堂上有一個布爾人來告訴他們已經初始化了,或者已經處理了,並且已經處理了,這是很正常的。標準的.NET表單有很多屬性告訴我們它的狀態。 'IsDisposed'是黑客嗎?不,我不這麼認爲。 - – user227997 2009-12-21 09:13:49

2

我不認爲你有Compact Framework的一個所示事件,但你應該能夠使用負載事件。將表單的可見屬性設置爲true,然後您應該能夠訪問您的自定義控件。

MyForm_Load(object sender, EventArgs e) 
{ 
    ' this procedure runs only once, when the form loads 
    ' make the form visible to the user now 
    this.Visible = true 
    ' the form is now visible 

    ' ... more code 
} 
+0

正如你可以在這裏看到:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.load.aspx Load事件發生在第一次顯示錶單之前。我想在窗體及其控件顯示時調用此方法。 – VansFannel 2009-12-17 20:36:56

+0

是的,我知道負載首先發生。但是設置this.Visible = true;在Load事件中應該是一個可行的解決方法。 – jac 2009-12-17 20:43:55

+0

我不理解你。設置Visible = true後,如何訪問我的控件。我明白控制是用這個屬性設置爲false創建的。然後我在Load事件上設置爲true,是不是? – VansFannel 2009-12-18 09:18:52

1

這是我做過什麼:

1)創建一個虛擬,空PictureBox控件形式

2)使用一個布爾變量來判斷何時在PictureBox的Paint事件是在窗體的Load事件之後呼籲並叫我自己OnShow中()函數

public partial class MyForm: Form 
{ 
    bool form_shown = false; 

    private void MyForm_Load(object sender, EventArgs e) 
    { 
     form_shown = true; 
    } 

    private void pictureDummy_Paint(object sender, PaintEventArgs e) 
    { 
     if (form_shown) 
     { 
      MyOnShow(); 
      form_shown = false;  
     } 
    } 
}