2009-02-26 20 views
3

VB6コードをVB.NETに変換する途中で、アプリケーションに残っている開いているすべてのフォームを閉じる予定の次のコードを置き換える必要があります。VB.NETで開いているフォームをすべてアンロードするにはどうすればよいですか?

'close all sub forms 
For i = My.Application.OpenForms.Count - 1 To 1 Step -1 
    'UPGRADE_ISSUE: Unload Forms() was not upgraded. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="875EBAD7-D704-4539-9969-BC7DBDAA62A2"' 
    Unload(My.Application.OpenForms(i)) 
Next i 

TFMによって示されるように)私はCloseUnload機能を交換しましたが、コンパイラはOpenFormsMy.Applicationのメンバーではないと文句を言い。

オープンフォームにはどこでアクセスできますか?

答えて

11

OpenFormsプロパティはFormCollectionを返します。すべてのフォームを処理するためにコレクションを反復処理できます。大丈夫(そうでない場合は冗長)に見える、と私は他のすべてをコンパイルできるように私は同じようにすぐにそれをテストすることができるでしょう

'close all sub forms 
For i = System.Windows.Forms.Application.OpenForms.Count - 1 To 1 Step -1 
    Dim form As Form = System.Windows.Forms.Application.OpenForms(i) 
    form.Close() 
Next i 

私はこの解決策を発見

For each f as Form in My.Application.OpenForms 
f.Close() 
Next 
+0

私のコンパイラはOpenForms(VS 2008)を認めない... 2つのバージョンの間で変更できましたか? – brasskazoo

+0

これはVS 2008のドキュメントにあります。 http://msdn.microsoft.com/en-us/library/eh13dca9.aspx – MarkJ

+0

VB2008 EXpress Editionで試してみました。それは私のために働く - まさにそれが錫の上に言うことをする – MarkJ

5

Application.Exitはほぼ同じことを行います。

私はすべてのフォームが閉じられていても、アプリケーションを終了したいとします。

+1

電源プラグを抜くことでも同様の結果が得られます。いくつかの副作用は気にしないでください:-))) –

+0

+1はしばしば欠けています。 ;-) – Cerebrus

+1

Application.Exitメソッドを呼び出してアプリケーションを終了すると、Form.ClosedイベントとForm.Closingイベントは発生しません。実行する必要があるこれらのイベントのいずれかに検証コードがある場合、Exitメソッドを呼び出す前に、開いている各フォームに対してForm.Closeメソッドを個別に呼び出す必要があります。 – MarkJ

7

、...。

+0

for-eachを適用するもう1つの方法です(反復回数が多い場合はわずかなパフォーマンスの差があります)。 – Cerebrus

+0

通常、Application.OpenFormsを使用することができます。通常は、「Imports System.Windows」があります。とにかくフォーム。 –

+0

ああ...それは私が行方不明だったもの、輸入! – brasskazoo

1

My.Application.OpenFormsには、アプリケーションフレームワークを使用するためにVB.Netアプリケーションが必要です(「プロジェクトプロパティ」、「アプリケーション」、「アプリケーションフレームワークを有効にする」を参照)。

Application Frameworkを使用していない場合は、代わりにApplication.OpenForms(System.Windows.Forms名前空間)を使用できます。

関連する問題