chinaqdl21 2021-11-01 18:35 采纳率: 100%
浏览 69
已结题

vb.net关于TabControl中嵌套子窗体的关闭事件

项目有3个窗体,分别是frmMDi form2 form3
frmMDI界面添加 TabControl

img

菜单/打开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、如果子窗体没有自动关闭,那么每次移除标签页,再次打开该子窗体时是重新实例化新的窗体还是继续显示第一次实例化的那个窗体。

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2021-11-01 21:58
    关注

    题主移除的是tab,并不是关闭winform,所以不会触发close事件。

    由于是new一个新的实例,所以和上次的form2实例不一样,是一个新的form2窗体,旧的form2实例等待gc回收

    题主可以用一个全局变量来验证,添加红色圈出的代码

    img


    有帮助麻烦点下【采纳该答案】,谢谢~~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月2日
  • 创建了问题 11月1日

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办