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

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 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。