子窗體傳參給父窗體(Owner)

這幾天做項目時,遇到了這一問題:

...

frmSendSMS sms = (frmSendSMS)this.Owner;
sms.listView1.Items.Add(num);

...

報“未將對象引用設置到對象的實例”錯.我在網上搜了一下,終於找到問題的癥結了.最後結合MSDN整理如下(網絡真是個好東西,資料浩瀚.):

注:主要涉及到ShowDialog()方法,有一可選參數owner.

 

Form.ShowDialog()方法 (IWin32Window)

將窗體顯示爲具有指定所有者的模式對話框。

命名空間:System.Windows.Forms
程序集:System.Windows.Forms(在 system.windows.forms.dll 中)

 

 語法

Visual Basic(聲明)
Public Function ShowDialog ( _ owner As IWin32Window _ ) As DialogResult 
Visual Basic(用法)
Dim instance As Form Dim owner As IWin32Window Dim returnValue As DialogResult returnValue = instance.ShowDialog(owner)
C#
public DialogResult ShowDialog ( IWin32Window owner )
C++
public: DialogResult ShowDialog ( IWin32Window^ owner )
J#
public DialogResult ShowDialog ( IWin32Window owner )
JScript
public function ShowDialog ( owner : IWin32Window ) : DialogResult 

 

參數

owner

任何實現 IWin32Window(表示將擁有模式對話框的頂級窗口)的對象。

 

 

返回值

DialogResult 值之一。

異常

異常類型條件

ArgumentException

owner 參數中指定的窗體就是顯示的窗體。

InvalidOperationException

要顯示的窗體已經可見。

- 或 -

所顯示窗體被禁用。

- 或 -

顯示的窗體不是頂級窗口。

- 或 -

顯示爲對話框的窗體已經是模式窗體。

InvalidOperationException

當前進程不是以用戶交互模式運行。有關更多信息,請參見 UserInteractive

備註

可以使用此方法在應用程序中顯示模式對話框。調用此方法時,直到關閉對話框後,才執行此方法後面的代碼。可以將 DialogResult 值之一分配給對話框,方法是將該值分配給窗體上 ButtonDialogResult 屬性或通過使用代碼設置窗體的 DialogResult 屬性。此方法隨後返回該值。可以使用此返回值確定如何處理對話框中發生的操作。例如,如果關閉了對話框,並通過此方法返回了 DialogResult.Cancel 值,則可防止執行在調用 ShowDialog 之後的代碼。

當窗體顯示爲模式對話框時,單擊“關閉”按鈕(窗體右上角帶 X 的按鈕)會隱藏窗體並將 DialogResult 屬性設置爲 DialogResult.Cancel。與無模式窗體不同,當用戶單擊對話框的關閉窗體按鈕或設置 DialogResult 屬性的值時,.NET Framework 不調用 Close 方法。窗體轉而可以隱藏並可重新顯示,而不用創建該對話框的新實例。因爲未關閉顯示爲對話框的窗體,所以在您的應用程序不再需要該窗體時,必須調用該窗體的 Dispose 方法。

ShowDialog 方法的此版本使您得以指定將擁有所顯示的對話框的特定窗體或控件。如果使用此方法的沒有參數的版本,則顯示的對話框將自動歸應用程序的當前活動窗口所有。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章