• vb.net详解MDI窗体操作方法


    MDI窗体可以避免打开窗体的时候被无数个子窗体困扰,我将为大家一一的介绍一下vb.net中MDI窗体的操作方法

    一、如何创建MDI窗体?

    1、创建mdi主窗体

    新建建立一个默认空白的Windows应用程序,在Form1窗体的属性窗口中找到IsMDIContainer 属性,设置为 True


    2、创建MDI子窗体

    在vb.net中,mdi子窗体就是普通的窗体,无需更改其属性。所有直接新建一个Form2

    3、添加代码

            Dim frm2 As New Form2
            Form2.Show()

    此时你只需要简单的实例化一下显示出来就可以了,非常简单吧。


    二、显示MDI窗口列表

    用过带有子窗体的程序的朋友一定知道,很多程序都带显示它它本身打开的子窗体列表的功能,那么它是怎么实现的呢


    现在在父窗体中修改你的MenuScript1控件的MdiWinddowListItem属性为你要设置的菜单即可。



    三、排列子窗体

    你只需要在你的单击操作中填入以下代码即可

     Private Sub ToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem2.Click
            Me.LayoutMdi(MdiLayout.TileHorizontal) '水平平铺
        End Sub
    
        Private Sub ToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem3.Click
            Me.LayoutMdi(MdiLayout.TileVertical) '垂直平铺
        End Sub
    
        Private Sub ToolStripMenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem4.Click
            Me.LayoutMdi(MdiLayout.Cascade) '层叠
        End Sub


    看一下效果图





    四、VB.NET 如何防止重复打开MDI子窗体?

    Private Sub 窗体1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 窗体1ToolStripMenuItem.Click
            Dim frm2 As New Form2
            CheckForm(frm2, "Form2")
            frm2.WindowState = FormWindowState.Normal
            ShowForm(Form2)
        End Sub
    
        '*****************************************************************************
        '*过程名称:CheckForm
        '*参数说明:MDIChildForm——需检测的窗体;MDIChildFormName ——检测窗体的名字
        '*功能说明:首先检测是否有MDI子窗体,如果没有,则创该MDI子窗体的窗体实例
        '*                    如果有,则检测当中有没有其窗体实例,有则激活;没有则创建其窗体实例
        '*****************************************************************************
        Private Sub CheckForm(ByVal MDIChildForm As Form, ByVal MDIChildFormName As String)
            If Me.MdiChildren.Length < 1 Then
                '如果没有任何一个MDI子窗体,则创该MDI子窗体的窗体实例
                ShowForm(MDIChildForm)
                Exit Sub
            Else
                Dim x As Integer
                Dim frmyn As Boolean
                For x = 0 To (Me.MdiChildren.Length) - 1
                    Dim tempChild As Form = CType(Me.MdiChildren(x), Form)
                    If tempChild.Name = MDIChildFormName Then
                        frmyn = True
                        '检测到有该MDI子窗体,设为TRUE 并退出循环
                        Exit For
                    Else
                        frmyn = False
                    End If
                Next
                If frmyn = False Then
                    '在打开的窗体中没检测到则新建
                    ShowForm(MDIChildForm)
                Else
                    '在打开的窗体中检测到则激活
                    Dim MDIChildFrm As Form = CType(Me.MdiChildren(x), Form)
                    MDIChildFrm.Activate()  '使子窗体激活
                    MDIChildFrm.WindowState = FormWindowState.Normal
                End If
            End If
        End Sub
    
        '**************************************************
        '*过程名称:ShowForm
        '*参数说明:MDIChildForm ——需创建实例的窗体
        '*功能说明:创建窗体实例
        '**************************************************
        Private Sub ShowForm(ByVal MDIChildForm As Form)
            Dim MDIChildFrm As Form = MDIChildForm
            MDIChildFrm.MdiParent = Me ' 定义MDI子窗体
            MDIChildFrm.Show() '打开窗体
        End Sub
    
    
        Private Sub MenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles MenuStrip1.ItemClicked
    
        End Sub
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim frm2 As New Form2
            CheckForm(frm2, "Form2")
            frm2.WindowState = FormWindowState.Maximized
        End Sub
    End Class
    



    好了,关于MDI子窗体的先介绍到这,有什么不足或者不正确的地方,提出来一起交流。


  • 相关阅读:
    一个.java文件内只能写一个class吗
    Ubuntu下手动安装NextCloud
    基于 Ubuntu + nextCloud 搭建自己的私人网盘
    Ubuntu系统Apache 2部署SSL证书
    交叉验证与训练集、验证集、测试集
    [LeetCode] Restore IP Addresses
    [LeetCode] Decode Ways
    [LeetCode] Subsets II
    [LeetCode] Gray Code
    vector 的resize 和 reserve
  • 原文地址:https://www.cnblogs.com/jinfulin/p/3797710.html
Copyright © 2020-2023  润新知