2009-09-03 8 views
0

スタイルデータのセットを処理するWinFormsアプリケーションを開発しています。ユーザーが別のセットのラベルをクリックすると、このスタイルプリセットから別のセットを編集するようにダイアログが表示されます。VB.NET:この場合、ダイアログを閉じて再度開く方法は?

しかし、ユーザーがいずれかのオプションをクリックしてダイアログが閉じると、すべてがリフレッシュされ、フォームを再度読み込む必要があるという問題に直面しています。良いオプション。

私はこれを行うモジュールのパブリックサブ、入れて試してみた:

Public Sub CloseOpenStyleDlg() 
    KeepOrDiscardPrompt.Close() 
    StylesDlg.Close() 
    StylesDlg.ShowDialog() 
End Sub 

をしかし、すぐにそのサブがプロンプトから呼び出されるように、アプリケーションがクラッシュします。 (デバッグ時にエラーを表示せず、単にクラッシュします)特定のダイアログから、ダイアログを閉じ、それが親であり、親を再び開く必要がありますか? (親のすべてのDialog_Load()コードをトリガーする)

ありがとうございます! :)

答えて

1

ダイアログを再度インスタンス化する必要があります。たとえば、コードを取得する場合:

Public Sub CloseOpenStyleDlg() 
    KeepOrDiscardPrompt.Close() 
    StylesDlg.Close() 
    StylesDlg = new StylesDlg() 
    StylesDlg.ShowDialog() 
End Sub 
+0

ありがとう=)私はForm_Load()の外でコードを再配置しましたが、今からほとんどのベストプラクティスに従います(ひどく書かれたコードはそれほど難解です!)、あなたの例は疑問を解決しましたどのようにフォームを再オープンするか、それは選択された=) –

0

フォームが閉じられると、オブジェクト内で作成されたすべてのリソースが閉じられ、フォームが破棄されます。

Windowインスタンスを再利用する場合は、代わりにStylesDialog.Hide()関数を使用してください。

+0

ただし、hideはForm_Load()イベントを再度呼び出しますか?直感的には、それは目に見えないものにするが、終わらないようなものだったと思う。 –

+0

私はそれをテストしませんでしたが、Showをもう一度呼び出すときにForm_Load()が呼び出されないと思います。 –

+0

フォームを非表示にしても、Loadイベントは発生しません。再度呼び出す必要がある初期化コードがある場合、Form_Loadメソッドから削除して別のメソッドに入れて明示的に呼び出すことができます。 – snarf

関連する問題