0

VB.Net でアプリを作成しました。子フォームは Showdialog() メソッドを使用して表示されるため、子が閉じられるまで親にはアクセスできません。

含まれる情報が削除されるように、子フォームを閉じるたびに破棄する必要があります。このために、子フォームの終了イベントに「Me.Dispose()」を配置しました。

ただし、多くの場合 (常にではありません)、子が閉じているときに親が最小化されますが、これは私が望んでいるものではありません。

それが起こらないようにする方法を知っている人はいますか?すべての助けに感謝します。

4

2 に答える 2

2

これを行うより良い方法は、フォームの終了イベントで Me.Dispose を使用するのではなく、モーダル ウィンドウを using ステートメントでラップすることです。たとえば、親フォームで次のようにします。

Using frm As New Form1
    frm.ShowDialog()
End Using
于 2012-11-29T13:06:03.080 に答える
1

ただし、多くの場合 (常にではありません)、子が閉じている場合、親は最小化されます

最小化されているわけではなく、別のアプリのウィンドウの後ろに消えています。デバッグ中の最も一般的な Visual Studio。ここでうまくいかないのは、Winforms がメイン ウィンドウを再度有効にする前に、フォームを破棄するのが早すぎることです。Windows ウィンドウ マネージャーは、フォーカスを与える別のウィンドウを探す必要があります。アプリのウィンドウはまだ無効になっているため、資格がないため、別のアプリのウィンドウが選択されます。そのウィンドウが十分に大きい場合 (「常にではない」場合)、それはあなたのウィンドウと重なって消え、最小化されたと思わせます。

これを解決するには、 ShowDialog が返されたにダイアログを破棄して、適切な方法で行います。これを行うには、常に Using ステートメントを使用します。定型コードは次のとおりです。

Using dlg = New YourDialogFormClass
    If dlg.ShowDialog() = DialogResult.Ok Then
        '' Use the dialog results
        ''...
    End If
End Using    '' <=== It gets disposed here
于 2012-11-29T13:22:26.337 に答える