2012-04-18 11 views
1

これらの違いは何ですか?VB.NETで別のフォームの違いを呼び出す

A.)

Using xForm as New frmCall() 
     xForm.ShowDialog() 
End Using 

B.)

Dim xForm as new frmCall() 
xForm.ShowDialog() 
xForm.Dispose 

C.)

frmCall.Show() 

彼らはすべてのフォームを示しています、私はそれに違いがあることを知っています。それは何ですか?

答えて

3

Dispose()(Reedの対象)とは別に、Show()とShowDialog()は大きな違いがあります。

ShowDialog()はブロッキングコールです。これは、画面上にポップアップしたダイアログが閉じられるまでメソッドが終了しないことを意味します。ダイアログはアプリケーションの上にあり、下の他のフォームとの対話を妨げます。これはすべて「モーダル」動作と呼ばれます。

Show()はブロックされません。このメソッドは、フォームを表示してから続けます。この方法でいくつかのフォームを表示し、制限なしでそれらの間をクリック/切り替えできます。

2

最初の2つの例は非常に似ています。

主な違いは、最初のケースでは、ShowDialog内で例外が発生した場合でもDispose呼び出しが発生することです。 "B"では、ShowDialogで例外を発生させた場合、Dispose呼び出しは決して発生しません。

最後のオプションは、frmCallインスタンスでDisposeを呼び出しません。

+0

Disposeが呼び出されないという事実は決して起こらないということを意味するものではありません。とにかく、ガベージコレクションはそれを世話することになっています。それはいつのまにか分かりません。 – Neolisk

+0

@Neolisk 'Dispose()'は決して呼び出されないという事実は決して起こらないことを意味します。適切に実装されたクラスは、ファイナライザ(必要な場合)を提供し、ファイナライザ内から保護された 'Dispose(ブール)'メソッドを呼び出すでしょうが、実際の 'IDisposable.Dispose'メソッドは、使用ブロック内の変数) –

+0

私はIDisposableを実装するすべてのクラスがそれを行うと仮定したので、ユーザーは必要ないでしょう。しかし、あなたが正しいです、実装は異なる場合があります。理想主義のために残念。 – Neolisk

関連する問題