原文: http://zetcode.com/gui/vbwinforms/menustoolbars/

在 Visual Basic Winforms 教程的这一部分中,我们将讨论菜单和工具栏。

菜单栏是 GUI 应用中最可见的部分之一。 它是位于各个菜单中的一组命令。 在控制台应用中,您必须记住所有这些神秘命令,在这里,我们将大多数命令分组为逻辑部分。 有公认的标准可以进一步减少学习新应用的时间。

简单菜单

在第一个示例中,我们创建一个简单的菜单。

  1. ' ZetCode Mono Visual Basic Winforms tutorial
  2. '
  3. ' This program shows a simple
  4. ' menu. It has one action, which
  5. ' will terminate the program, when
  6. ' selected.
  7. '
  8. ' author jan bodnar
  9. ' last modified May 2009
  10. ' website www.zetcode.com
  11. Imports System.Windows.Forms
  12. Imports System.Drawing
  13. Public Class WinVBApp
  14. Inherits Form
  15. Public Sub New
  16. Me.Text = "Simple menu"
  17. Me.Size = New Size(220, 170)
  18. Me.InitUI
  19. Me.CenterToScreen
  20. End Sub
  21. Private Sub InitUI
  22. Dim ms As New MenuStrip
  23. ms.Parent = Me
  24. Dim fileItem As New ToolStripMenuItem("&File")
  25. Dim exitItem As New ToolStripMenuItem("&Exit", Nothing, _
  26. New EventHandler(AddressOf OnExit))
  27. exitItem.ShortcutKeys = Keys.Control Or Keys.X
  28. fileItem.DropDownItems.Add(exitItem)
  29. ms.Items.Add(fileItem)
  30. MainMenuStrip = ms
  31. End Sub
  32. Private Sub OnExit(ByVal sender As Object, ByVal e As EventArgs)
  33. Me.Close
  34. End Sub
  35. Public Shared Sub Main
  36. Application.Run(New WinVBApp)
  37. End Sub
  38. End Class

在我们的示例中,我们有一个菜单栏和一个菜单。 菜单内有一个菜单项。 如果选择菜单项,则应用关闭。

注意如何关闭应用。 我们可以使用 Ctrl + X 快捷方式或按 AltFE 键关闭它 。

  1. Dim ms As New MenuStrip

MenuStrip为我们的表单创建一个菜单系统。 我们将ToolStripMenuItem对象添加到MenuStrip中,这些对象代表菜单结构中的各个菜单命令。 每个ToolStripMenuItem可以是您的应用的命令,也可以是其他子菜单项的父菜单。

  1. Dim fileItem As New ToolStripMenuItem("&File")

在这里,我们创建一个文件菜单。

  1. Dim exitItem As New ToolStripMenuItem("&Exit", Nothing, _
  2. New EventHandler(AddressOf OnExit))

此行创建退出菜单项。

  1. exitItem.ShortcutKeys = Keys.Control Or Keys.X

我们提供了退出菜单项的快捷方式。

  1. fileItem.DropDownItems.Add(exitItem)

退出菜单项将添加到菜单对象的下拉项中。

  1. ms.Items.Add(fileItem)

在这里,我们将菜单对象添加到菜单栏中。

  1. MainMenuStrip = ms

MenuStrip已插入表格。

菜单和工具栏 - 图1

图:简单菜单

子菜单

每个菜单项也可以有一个子菜单。 这样,我们可以将类似的命令分组。 例如,我们可以将隐藏/显示各种工具栏(例如个人栏,地址栏,状态栏或导航栏)的命令放置在称为工具栏的子菜单中。

  1. ' ZetCode Mono Visual Basic Winforms tutorial
  2. '
  3. ' This program creates a submenu
  4. '
  5. ' author jan bodnar
  6. ' last modified May 2009
  7. ' website www.zetcode.com
  8. Imports System.Windows.Forms
  9. Imports System.Drawing
  10. Public Class WinVBApp
  11. Inherits Form
  12. Public Sub New
  13. Me.Text = "Submenu"
  14. Me.Size = New Size(380, 220)
  15. Me.InitUI
  16. Me.CenterToScreen
  17. End Sub
  18. Private Sub InitUI
  19. Dim ms As New MenuStrip
  20. ms.Parent = Me
  21. Dim fileItem As New ToolStripMenuItem("&File")
  22. Dim exitItem As New ToolStripMenuItem("&Exit", Nothing, _
  23. New EventHandler(AddressOf OnExit))
  24. exitItem.ShortcutKeys = Keys.Control Or Keys.X
  25. Dim import As New ToolStripMenuItem
  26. import.Text = "Import"
  27. Dim temp As New ToolStripMenuItem
  28. temp.Text = "Import newsfeed list..."
  29. import.DropDownItems.Add(temp)
  30. temp = New ToolStripMenuItem
  31. temp.Text = "Import bookmarks..."
  32. import.DropDownItems.Add(temp)
  33. temp = New ToolStripMenuItem
  34. temp.Text = "Import mail..."
  35. import.DropDownItems.Add(temp)
  36. fileItem.DropDownItems.Add(import)
  37. fileItem.DropDownItems.Add(exitItem)
  38. ms.Items.Add(fileItem)
  39. Me.MainMenuStrip = ms
  40. End Sub
  41. Private Sub OnExit(ByVal sender As Object, ByVal e As EventArgs)
  42. Me.Close
  43. End Sub
  44. Public Shared Sub Main
  45. Application.Run(New WinVBApp)
  46. End Sub
  47. End Class

在此示例中,我们创建一个子菜单。 子菜单导入具有三个菜单项。

  1. Dim import As New ToolStripMenuItem
  2. import.Text = "Import"

ToolStripMenuItem可以是菜单或菜单项。 在这里它将作为子菜单。

  1. Dim temp As New ToolStripMenuItem
  2. temp.Text = "Import newsfeed list..."
  3. import.DropDownItems.Add(temp)

在这里,我们创建一个菜单项并将其添加到“导入”子菜单。

菜单和工具栏 - 图2

图:子菜单

检查菜单项

下一个代码示例演示如何创建选中的菜单项。

  1. ' ZetCode Mono Visual Basic Winforms tutorial
  2. '
  3. ' This program creates a checked
  4. ' menu
  5. '
  6. ' author jan bodnar
  7. ' last modified May 2009
  8. ' website www.zetcode.com
  9. Imports System.Windows.Forms
  10. Imports System.Drawing
  11. Public Class WinVBApp
  12. Inherits Form
  13. Dim sb As Statusbar
  14. Public Sub New
  15. Me.Text = "Check menu item"
  16. Me.Size = New Size(380, 220)
  17. Me.InitUI
  18. Me.CenterToScreen
  19. End Sub
  20. Private Sub InitUI
  21. sb = New StatusBar
  22. sb.Parent = Me
  23. sb.Text = "Ready"
  24. Dim mainMenu As New MainMenu
  25. Dim file As MenuItem = mainMenu.MenuItems.Add("&File")
  26. file.MenuItems.Add(New MenuItem("E&xit", _
  27. New EventHandler(AddressOf OnExit), Shortcut.CtrlX))
  28. Dim view As MenuItem = mainMenu.MenuItems.Add("&View")
  29. Dim viewStatusBar As New MenuItem("View StatusBar")
  30. viewStatusBar.Checked = True
  31. view.MenuItems.Add(viewStatusBar)
  32. Me.Menu = mainMenu
  33. AddHandler viewStatusBar.Click, AddressOf Me.ToggleStatusBar
  34. End Sub
  35. Private Sub ToggleStatusBar(ByVal sender As Object, ByVal e As EventArgs)
  36. Dim check As Boolean = sender.Checked
  37. If check
  38. sb.Visible = False
  39. sender.Checked = False
  40. Else
  41. sb.Visible = True
  42. sender.Checked = True
  43. End If
  44. End Sub
  45. Private Sub OnExit(ByVal sender As Object, ByVal e As EventArgs)
  46. Me.Close
  47. End Sub
  48. Public Shared Sub Main
  49. Application.Run(New WinVBApp)
  50. End Sub
  51. End Class

我们有两个菜单。 文件和查看。 “查看”菜单具有一个菜单项,用于切换状态栏的可见性。

  1. Dim mainMenu As New MainMenu

在此示例中,我们使用MainMenu控件。 要创建菜单栏,我们可以使用MainMenuMenuStrip控件。 后者具有一些附加功能。

  1. viewStatusBar.Checked = True

默认情况下会选中此菜单项,因为状态栏从应用的开始就可见。

  1. Dim check As Boolean = sender.Checked
  2. If check
  3. sb.Visible = False
  4. sender.Checked = False
  5. Else
  6. sb.Visible = True
  7. sender.Checked = True
  8. End If

我们确定菜单项是否被选中。 我们根据check值显示和隐藏状态栏和复选标记。

菜单和工具栏 - 图3

图:选中菜单项

图像,分隔符

我们将进一步增强对MenuStrip控件的了解。 我们将创建一个带有图像的菜单项,并显示如何使用分隔符将其分开。

  1. ' ZetCode Mono Visual Basic Winforms tutorial
  2. '
  3. ' This program shows how to add images and
  4. ' separators to menu items
  5. '
  6. ' author jan bodnar
  7. ' last modified May 2009
  8. ' website www.zetcode.com
  9. Imports System.Windows.Forms
  10. Imports System.Drawing
  11. Public Class WinVBApp
  12. Inherits Form
  13. Public Sub New
  14. Me.Text = "MenuStrip"
  15. Me.Size = New Size(250, 200)
  16. Me.InitUI
  17. Me.CenterToScreen
  18. End Sub
  19. Private Sub InitUI
  20. Dim menuStrip As New MenuStrip
  21. Dim titem1 As New ToolStripMenuItem("File")
  22. menuStrip.Items.Add(titem1)
  23. Dim titem2 As New ToolStripMenuItem("Tools")
  24. menuStrip.Items.Add(titem2)
  25. Dim subm1 As New ToolStripMenuItem("New")
  26. subm1.Image = Image.FromFile("new.png")
  27. titem1.DropDownItems.Add(subm1)
  28. Dim subm2 As New ToolStripMenuItem("Open")
  29. subm2.Image = Image.FromFile("open.png")
  30. titem1.DropDownItems.Add(subm2)
  31. titem1.DropDownItems.Add(New ToolStripSeparator)
  32. Dim subm3 As New ToolStripMenuItem("Exit")
  33. subm3.Image = Image.FromFile("exit.png")
  34. titem1.DropDownItems.Add(subm3)
  35. AddHandler subm3.Click, AddressOf Me.OnExit
  36. Controls.Add(menuStrip)
  37. MainMenuStrip = menuStrip
  38. End Sub
  39. Private Sub OnExit(ByVal sender As Object, ByVal e As EventArgs)
  40. Me.Close
  41. End Sub
  42. Public Shared Sub Main
  43. Application.Run(New WinVBApp)
  44. End Sub
  45. End Class

我们的代码示例中有两个菜单。 文件和工具。 在文件中,我们有三个带有图像的菜单项。 我们还有一个分隔符。 在此示例中,PNG 图像必须位于当前工作目录中。

  1. Dim subm1 As New ToolStripMenuItem("New")
  2. subm1.Image = Image.FromFile("new.png")
  3. titem1.DropDownItems.Add(subm1)

在这里,我们创建第一个菜单项。 要将图像添加到项目,我们将Image属性设置为图像。 我们使用静态FromFile方法从指定的文件创建一个Image

  1. titem1.DropDownItems.Add(New ToolStripSeparator)

在这里,我们向“文件”菜单添加分隔符。

菜单和工具栏 - 图4

图:图像 s and separator

工具栏

菜单将我们可以在应用中使用的所有命令分组。 使用工具栏可以快速访问最常用的命令。 ToolBar控件用于显示ToolBarButton控件。 我们可以通过创建ImageList将图像分配给按钮。 然后,我们将图像列表分配给工具栏的ImageList属性,并为每个ToolBarButton将图像索引值分配给ImageIndex属性。

  1. ' ZetCode Mono Visual Basic Winforms tutorial
  2. '
  3. ' This program creates a toolbar
  4. '
  5. ' author jan bodnar
  6. ' last modified May 2009
  7. ' website www.zetcode.com
  8. Imports System.Windows.Forms
  9. Imports System.Drawing
  10. Public Class WinVBApp
  11. Inherits Form
  12. Dim sb As Statusbar
  13. Public Sub New
  14. Me.Text = "Toolbar"
  15. Me.Size = New Size(250, 220)
  16. Me.InitUI
  17. Me.CenterToScreen
  18. End Sub
  19. Private Sub InitUI
  20. Dim toolBar As New ToolBar
  21. toolBar.Parent = Me
  22. Dim toolBarIcons As New ImageList
  23. Dim saveb As New ToolBarButton
  24. Dim exitb As New ToolBarButton
  25. saveb.ImageIndex = 0
  26. saveb.Tag = "Save"
  27. exitb.ImageIndex = 1
  28. exitb.Tag = "Exit"
  29. toolBar.ImageList = toolBarIcons
  30. toolBar.ShowToolTips = True
  31. toolBar.Buttons.AddRange(New ToolBarButton() {saveb, exitb})
  32. toolBarIcons.Images.Add(New Icon("new.ico"))
  33. toolBarIcons.Images.Add(New Icon("exit.ico"))
  34. AddHandler toolBar.ButtonClick, AddressOf Me.OnClicked
  35. End Sub
  36. Private Sub OnClicked(ByVal sender As Object, _
  37. ByVal e As ToolBarButtonClickEventArgs)
  38. If e.Button.Tag.Equals("Exit")
  39. Me.Close
  40. End If
  41. End Sub
  42. Public Shared Sub Main
  43. Application.Run(New WinVBApp)
  44. End Sub
  45. End Class

在我们的示例中,我们在工具栏上显示了两个按钮。

  1. Dim toolBar As New ToolBar

在这里,我们创建ToolBar控件。

  1. toolBar.ImageList = toolBarIcons

创建图像列表。

  1. Dim saveb As New ToolBarButton
  2. Dim exitb As New ToolBarButton

这是两个工具栏按钮。

  1. saveb.ImageIndex = 0

我们确定图像列表中的哪个图标将用于保存工具栏按钮。

  1. toolBar.Buttons.AddRange(New ToolBarButton() {saveb, exitb})

ToolBarButton控件已添加到工具栏。

  1. toolBarIcons.Images.Add(New Icon("new.ico"))
  2. toolBarIcons.Images.Add(New Icon("exit.ico"))

图标将添加到图像列表。

  1. If e.Button.Tag.Equals("Exit")
  2. Me.Close
  3. End If

如果按钮的标签等于"Exit",我们将关闭该应用。

菜单和工具栏 - 图5

图:工具栏

Visual Basic Winforms 教程的这一部分是关于菜单和工具栏的。