【问题标题】:parent form containing MenuStrip control包含 MenuStrip 控件的父窗体
【发布时间】:2017-11-15 03:21:43
【问题描述】:

我正在构建一个简单的桌面应用程序。目前它使用一堆按钮在表单之间来回导航。

现在我决定在顶部添加一个小的 MenuStrip 控件来帮助导航。

我目前在每个表单中都有相同的 MenuStrip,重复代码如下:

Private Sub AddEngineToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AddEngineToolStripMenuItem.Click
    Dim frmShowEnginesForm = New frmShowEnginesForm()
    frmShowEnginesForm.Show()
    Me.Hide()
End Sub

Private Sub EnterSpecsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EnterSpecsToolStripMenuItem.Click
    Dim frmEnterEngineSpecsForm = New frmEnterEngineSpecsForm()
    frmEnterEngineSpecsForm.Show()
    Me.Hide()
End Sub

我希望稍微简化一下,这样如果我想添加另一个菜单项,我就不必遍历所有表单并全部更改。

有没有办法创建一种包含 MenuStrip 的父控件/表单,这样我就不必在所有表单中复制它?

谢谢!

【问题讨论】:

  • 可能在module 中添加一些Sub,您将在其中以所需的形式创建MenuStrip...但是,您需要调用sub,例如Public Sub CreateMenuStrip(frm As Form)....End Sub添加处理程序等,从每个 Form_Load...
  • @nelek 我不太确定我是否遵循。你能发布一个示例答案吗?谢谢!
  • 您可以使用菜单条和 ToolStripContiner 创建一个主窗体。然后制作您刚刚在容器中记录的其他表单面板(用户控件)。 (其实我觉得可以将表单停靠在表单中,但已经有一段时间了)

标签: vb.net winforms


【解决方案1】:

在您的项目中添加新的module 并使用以下代码:

Module Module1

    Public Sub CreateMenuStrip(frm As Form)
        'create new MenuStrip control
        Dim ms As New MenuStrip
        ms.Location = New Point(0, 0)
        ms.Dock = DockStyle.Top

        'create new toolstripmenuitem
        Dim itm As New ToolStripMenuItem
        itm.Name = "miAddEngine"
        itm.Text = "Add Engine"
        'add handler what will happen when you click on this item... same for next item
        AddHandler itm.Click, AddressOf AddEngineToolStripMenuItem_Click
        ms.Items.Add(itm)

        itm = New ToolStripMenuItem
        itm.Name = "miEnterSpecs"
        itm.Text = "Enter Specs"
        AddHandler itm.Click, AddressOf EnterSpecsToolStripMenuItem_Click
        ms.Items.Add(itm)

        '...
        'there you can, latter, add new item and bellow sub add subs which will handle click or whatever
        '...

        'add control to the form
        frm.Controls.Add(ms)

    End Sub

    'subroutines which will handle Click
    Private Sub AddEngineToolStripMenuItem_Click(sender As Object, e As EventArgs)
        MsgBox("open add engine form")
    End Sub

    Private Sub EnterSpecsToolStripMenuItem_Click(sender As Object, e As EventArgs)
        MsgBox("open enter specs form")
    End Sub

End Module

现在,从您的每个表单中,在加载时,请致电 CreateMenuStrip(Me)

例如,在 Form1 中:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CreateMenuStrip(Me)
End Sub

当然,您始终可以创建MDI Form 和他孩子的,例如将MenuStrip 放在MDIForm 的顶部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2021-01-29
    相关资源
    最近更新 更多