2016-12-20 6 views
0

免責事項:私はVB.netで初心者から若干中級までの経験があります。メインフォームを閉じたとき、または別のボタンクリックイベントでパネル内のフォームを破棄する方法は?

こんにちは、私はプロジェクトのデザインアイデアをいろいろ試していましたが、解決策が見つからないという問題に遭遇しました。私はいくつかのボタンとパネルがある勝利フォームを持っています。ユーザーがボタンを押すと、ボーダレスフォームがパネルにロードされます。これは問題です。メインフォームが閉じられていると、Visual Studioはデバッグを停止せず、おそらくパネルのフォームが破棄されないためです。

Win Form image

パネルフォームのインスタンスは、ボタンのクリックイベントで宣言されています。他のサブからそのインスタンスを破壊するにはどうすればいいですか?別のボタンをクリックすると、最初のパネルフォームは消えません。これを達成するより良い方法はありますか?私はまだ学んでいるので、問題を解決するためのさまざまな方法をすべて認識していないことがよくあります。みんな、ありがとう!

Public Class frm_Clients 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim search As New Search 
     search.TopLevel = False 
     search.Dock = DockStyle.Fill 
     Panel1.Controls.Add(search) 
     search.Show() 
    End Sub 

    Private Sub frm_Clients_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed 
     ' What should I write here? 
    End Sub 

End Class 
+0

「ボーダーレスフォームがパネルにロードされました」目的は何ですか?パネルはコンテナコントロールであるため、結果はコンテナ内のスーパーコンテナです。 – Plutonix

+0

@Plutonix - 良い点ですが、使用されたボタンに応じて重なり合うことなく多くの異なるコントロールをロードしたいのですが?私はデザイナーを混乱させたくないし、どのボタンがクリックされたかに応じて100種類のコントロールを隠して表示したくない。これにアプローチするよりスマートな方法について何か提案がありますか?ありがとう:) –

+0

パネルはコンテナコントロールです - それは多くの異なるコントロールを保持することができます。 – Plutonix

答えて

0

別のボタンを押したときにウィンドウを閉じるにはどうすればいいですか。

For Each form In Panel1.Controls.OfType(Of Form).ToList() 
     form.Close() 
    Next 

次に、search.Ownerをパネルを保持しているフォームに設定することをお勧めします。つまり、所有者が閉鎖されている場合、子供も閉じています。

search.Owner = Me 
関連する問題