0

在 VB.NET 中需要一些帮助,不知道我在哪里做错了

背景:我有一个使用 SplitContainer 控件的主窗体。拆分的PANEL1携带MenuStrip,Panel2用于调用相关的外部表单在此处输入图像描述

代码(见下文):函数ResetSplitContainerPanel2清除 Panel2 并使用SetFormAttributesToLoadInPanel2

问题:虽然SettingSplitContainer.Panel2.Controls.Clear()清除了 Panel2 但表单仍保持可编辑模式。如果我再次调用相同的表单,我可以看到我之前输入的值

预期输出:在加载新表单时,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

我将尝试使用 dispose 方法而不是 Clear:

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 回答