0

VB.NET のヘルプが必要です。どこが間違っているのかわかりません

背景: SplitContainer コントロールを使用するマスター フォームがあります。分割の PANEL1 には MenuStrip があり、Panel2 は関連する外部フォームを呼び出すために使用されます。ここに画像の説明を入力

コード (以下を参照):関数ResetSplitContainerPanel2は Panel2 をクリアし、SetFormAttributesToLoadInPanel2

問題: Panel2 はSettingSplitContainer.Panel2.Controls.Clear()クリアされますが、フォームは依然として編集可能モードでフォームを維持します。同じフォームをもう一度呼び出すと、以前に入力した値が表示されます

期待される出力:新しいフォームのロード時に、PANEL2 に以前にロードされたフォームは完全に破棄される必要があります

Private Sub ResetSplitContainerPanel2()
    SettingSplitContainer.Panel2.Controls.Clear()
End Sub

Private Function SetFormAttributesToLoadInPanel2(ByVal formNameToChange As Form) As Boolean
        On Error GoTo errHandler

        formNameToChange.IsMdiContainer = False
        formNameToChange.ShowInTaskbar = False
        formNameToChange.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        formNameToChange.ControlBox = False
        formNameToChange.TopLevel = False
        formNameToChange.Text = ""
        formNameToChange.Visible = True
        formNameToChange.Width = SettingSplitContainer.Panel2.Width
        formNameToChange.Height = SettingSplitContainer.Panel2.Height

        SetFormAttributesToLoadInPanel2 = False
        Exit Function

errHandler:
        MsgBox("Error Description: " & Err.Description, vbOKOnly, "Error")
        SetFormAttributesToLoadInPanel2 = True
        Exit Function
    End Function

あなたの助けに感謝

4

2 に答える 2

1

Clear の代わりに dispose メソッドを使用してみます。

Dim f As Form = TryCast(SettingSplitContainer.Panel2.Controls(0), Form)
if f IsNot Nothing then
   f.Dispose()
Endif

フォームが Panel2.Controls コレクションの最初のコントロールとして SplitContainer に追加されているかどうかは不明です。ただし、これは単に確認するためのものです。

この変更の根本的な理由は、この回答で見つけることができます

于 2012-06-04T11:05:21.087 に答える
0

Panel2 を削除し、その領域を空白のままにして Form1 を表示し、Form1 を MdiContainer = True にすることもできます。

次に、開きたいフォームごとに使用します

form2.mdiparent = form1

その後、使用する必要があるのは単純な form2.show() だけです。

于 2012-06-05T03:07:37.507 に答える