我有動態加載(並銷燬)不同類型的用戶控件到需要的表單上的代碼。用戶控件使用其父級的屬性將某些值加載到控件中,如文本框和複選框。問題是,在該行:從孩子訪問ParentForm並確保添加孩子
activeControl = new userControl1(params...);
我的構造函數顯然會嘗試還不存在裝載場(它們屬於父窗體),因爲它沒有被添加到父窗體,直到在userControl1創建後。
我試着用用戶控件的ParentChanged事件來解決這個問題,所以它在加載字段之前一直等到它的父對象被設置。這裏的問題是,當我銷燬userControl1並創建一個userControl2時,父級更改並嘗試從null ParentForm(我原本的確切問題)中加載字段。
是否有解決此問題的首選方法?顯然,我可以添加類似
if(this.ParentForm == null) { return; }
到ParentChanged事件或類似的規定。但是,這感覺既優雅也不安全。我俯瞰一些事件或完成這一首選方式?
經常在事件檢查null是一個好主意(不錯的想法)。在InitializeComponent()事件觸發期間,必須被忽略。這些假事件期間列表框和組合框的行索引爲-1,並且在事件處理程序中檢查索引> = 0是正常的。 – jdweng
你從「ParentForm」訪問的實際內容是什麼?如果您將'ParentForm'強制轉換爲其他子類型,通常在用戶控件內部訪問父表單並不是一個好主意。 –