项目有3个窗体,分别是frmMDi form2 form3
frmMDI界面添加 TabControl
菜单/打开form2代码
Private Sub 窗体1ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 窗体1ToolStripMenuItem.Click
'//定义变量,记录窗体是否已经打开
Dim ls_open As Boolean = False
'//遍历TabPage页,查看页面是否已经打开
For Each a As TabPage In TabControl1.TabPages
If a.Name = "Tab_form2" Then
ls_open = True '如果查找到指定的页面
Me.TabControl1.SelectedTab = a '设置选中当前页
End If
Next
'//如果窗体没有打开,那么实例化并打开窗体
If ls_open = False Then
Dim ls_frm As New Form2 '//实例化一个窗体(窗体名称为form2)
Dim NewTabPage1 As New TabPage '//实例化一个tabpage页
NewTabPage1.Text = ls_frm.Text '//在tabpage页显示的页text内容
NewTabPage1.Name = "Tab_form2" '//TabPage页的name
Me.TabControl1.TabPages.Add(NewTabPage1) '//添加到当前的TabControl中
ls_frm.TopLevel = False '//设置窗体不是顶级窗体
ls_frm.Parent = NewTabPage1 '//设置窗体的父容器为新实例化的TabPage页
ls_frm.FormBorderStyle = Windows.Forms.FormBorderStyle.None '//设置新窗体不显示边框
ls_frm.Dock = System.Windows.Forms.DockStyle.Fill '//设置窗体的大小随父容器大小变化而变化
ls_frm.Show() '//装载窗体
Me.TabControl1.SelectedTab = NewTabPage1 '//将此TabPage页显示为选中
Else
'MessageBox.Show("窗体已经打开,不要重复打开此窗体!")
End If
End Sub
然后添加以下代码,双击移除tabpage
'双击tabControl标签,自动关闭此标签
Private Sub TabControl1_DoubleClick(sender As Object, e As EventArgs) Handles TabControl1.DoubleClick
'判断如果是“主窗体”,那么退出
If TabControl1.TabPages(TabControl1.SelectedIndex).Name = "TabPage1" Then
Exit Sub
End If
'???
If TabControl1.TabPages(TabControl1.SelectedIndex).Name = "Tab_form2" Then
End If
'关闭并移除标签页
TabControl1.TabPages.RemoveAt(TabControl1.SelectedIndex)
End Sub
问题如下:
1、移除标签页时,嵌入的子窗体是否自动关闭,子窗体的关闭事件并没有执行
2、如果子窗体没有自动关闭,那么每次移除标签页,再次打开该子窗体时是重新实例化新的窗体还是继续显示第一次实例化的那个窗体。