none
合并到MDI窗体中的子工具栏或子菜单栏如何插入到指定位置? RRS feed

  • 问题

  • 下面的例子是从网上找的VB.net2010实现主窗体与MDI子窗体合并菜单及工具栏的例子,想请教如何让合并的菜单或工具栏排序到主窗体具有多个MDI主菜单或主工具栏的指定位置呢?

    VB.net2010实现主窗体与MDI子窗体合并菜单及工具栏

    VB.net2010实现主窗体与MDI子窗体合并菜单及工具栏

    合并菜单及工具栏不是新技术也不是新话题,我只是把网上流行的C#代码用VB改写了下,分享给习惯了VB的朋友。

    代码不只适用于2010,以前的版本也可以跑,标题如此说只因为我提供的源码下载是VS2010的。

     合并子窗体菜单只需设置菜单的AllowMerge属性为True就可以了,合并工具栏的思路是在主窗体上定义接口,在子窗体中实现它。

     先看效果吧:

    未运行时主窗体:

    点击主窗体主菜单下的打开两次:

    目前貌似没什么问题,上代码:

    先贴主窗体源码:

    Imports System
    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Text
    Imports System.Windows.Forms

    Public Class MDI主窗体

    Private Sub 打开AToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 打开ToolStripMenuItem.Click
    ' 创建此子窗体的一个新实例。
    Dim ChildForm As New MDI子窗体
    ' 在显示该窗体前使其成为此 MDI 窗体的子窗体。
    ChildForm.MdiParent = Me

    'm_ChildFormNumber += 1
    ChildForm.Text = "窗口 " & Int(Rnd() * 10)

    ChildForm.Show()
    End Sub



    '声明接口,随后将在子窗体里实现
    Public Interface IMergeToolStrip
    ReadOnly Property MergeToolStrip() As ToolStrip
    End Interface

    Private Sub MDI主窗体_YLH_MdiChildActivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MdiChildActivate
    '先清除合并工具栏
    ToolStripManager.RevertMerge(ToolStrip1)

    If Me.ActiveMdiChild Is Nothing Then
    Return
    End If
    If TryCast(ActiveMdiChild, IMergeToolStrip).MergeToolStrip Is Nothing Then
    Return
    End If

    ToolStripManager.Merge(TryCast(ActiveMdiChild, IMergeToolStrip).MergeToolStrip, ToolStrip1)

    If ToolStrip1.Items.Count > 0 Then
    ToolStrip1.Visible = True
    Else
    ToolStrip1.Visible = False
    End If
    End Sub
    End Class

    子窗体代码

    Public Class MDI子窗体
    '实现MDI主窗体.IMergeToolStrip接口
    Implements MDI主窗体.IMergeToolStrip

    Public ReadOnly Property MergeToolStrip() As ToolStrip Implements MDI主窗体.IMergeToolStrip.MergeToolStrip
    Get
    'ToolStrip1为子窗口工具栏,默认属性要设为隐藏
    Return ToolStrip1
    End Get
    End Property

    Private Sub frmMain_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    'ToolStrip1为MDI窗体上的工具栏,在启动程序先隐藏,待到成功合并子窗体工具栏后再显示
    ToolStrip1.Visible = False
    MenuStrip1.Visible = False
    End Sub
    End Class
    2013年7月16日 18:26