Visual Basic 高级窗体

在本章中,让我们研究以下概念:

  • 在应用程序中添加菜单和子菜单
  • 在窗体中添加剪切、复制和粘贴功能
  • 在窗体中锚定和停靠控件
  • 模态窗口

在应用程序中添加菜单和子菜单

以前来讲,MenuMainMenuContextMenuMenuItem 类用于在 Windows 应用程序中添加菜单、子菜单和上下文菜单。

现在,MenuStripToolStripMenuItemToolStripDropDownToolStripDropDownMenu 控件替换并向以前版本的菜单相关控件添加功能。然而,旧的控件类被保留下来,以便向后兼容和将来使用。

让我们首先使用旧版本控件创建一个典型的 Windows 主菜单栏和子菜单,因为这些控件在旧应用程序中仍然大量使用。

下面是一个实例,它显示了如何创建包含菜单项的菜单栏:File、Edit、View 和 Project。"File" 菜单具有 "New"、"Open" 和 "Save" 子菜单。

让我们双击窗体,并在打开的窗口中放置以下代码:

  1. Public Class Form1
  2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  3. 'defining the main menu bar
  4. Dim mnuBar As New MainMenu()
  5. 'defining the menu items for the main menu bar
  6. Dim myMenuItemFile As New MenuItem("&File")
  7. Dim myMenuItemEdit As New MenuItem("&Edit")
  8. Dim myMenuItemView As New MenuItem("&View")
  9. Dim myMenuItemProject As New MenuItem("&Project")
  10. 'adding the menu items to the main menu bar
  11. mnuBar.MenuItems.Add(myMenuItemFile)
  12. mnuBar.MenuItems.Add(myMenuItemEdit)
  13. mnuBar.MenuItems.Add(myMenuItemView)
  14. mnuBar.MenuItems.Add(myMenuItemProject)
  15. ' defining some sub menus
  16. Dim myMenuItemNew As New MenuItem("&New")
  17. Dim myMenuItemOpen As New MenuItem("&Open")
  18. Dim myMenuItemSave As New MenuItem("&Save")
  19. 'add sub menus to the File menu
  20. myMenuItemFile.MenuItems.Add(myMenuItemNew)
  21. myMenuItemFile.MenuItems.Add(myMenuItemOpen)
  22. myMenuItemFile.MenuItems.Add(myMenuItemSave)
  23. 'add the main menu to the form
  24. Me.Menu = mnuBar
  25. ' Set the caption bar text of the form.
  26. Me.Text = "cankaoshouce.com"
  27. End Sub
  28. End Class

当使用 Microsoft Visual Studio 工具栏上的 开始 按钮执行并运行上述代码时,它将显示以下窗口:

Windows 窗体包含一组丰富的类,用于创建具有现代外观、外观和感觉的自定义菜单。MenuStripToolStripMenuItemContextMenuStrip 控件用于高效地创建菜单栏和上下文菜单。

单击以下链接查看其详细信息:

编号控件 & 描述
1

MenuStrip

它为窗体提供菜单系统。

2

ToolStripMenuItem

它表示显示在 MenuStripContextMenuStrip 上的可选选项 ToolStripMenuItem 控件替换以前版本的 MenuItem 控件并向其添加功能

3

ContextMenuStrip

它代表一个快捷菜单。


在窗体中添加剪切、复制和粘贴功能

ClipBoard 类方法用于在应用程序中添加剪切、复制和粘贴功能。ClipBoard 类提供了在系统剪贴板上放置数据和从中检索数据的方法。

它有以下常用方法 −

编号方法名称 & 描述
1

Clear

从剪贴板中删除所有数据。

2

ContainsData

表示剪贴板上是否有指定格式的数据或可以转换为该格式的数据。

3

ContainsImage

指示剪贴板上是否有 Bitmap 格式的数据或可以转换为该格式的数据。

4

ContainsText

指示剪贴板上是否有 TextUnicodeText 格式的数据,具体取决于操作系统。

5

GetData

以指定格式从剪贴板检索数据。

6

GetDataObject

检索当前在系统剪贴板上的数据。

7

GetImage

从剪贴板检索图像。

8

GetText

根据操作系统的不同,以 TextUnicodeText 格式从剪贴板检索文本数据。

9

GetText(TextDataFormat)

以指定的 TextDataFormat 值所指示的格式从剪贴板检索文本数据。

10

SetData

清除剪贴板,然后以指定格式添加数据。

11

SetText(String)

清除剪贴板,然后根据操作系统以 TextUnicodeText 格式添加文本数据。

下面是一个实例,展示了如何使用 Clipboard 类的方法剪切、复制和粘贴数据。

使用以下步骤:

  • 在窗体上添加一个富文本框控件和三个按钮控件。
  • 将按钮的文本属性分别更改为剪切、复制和粘贴。
  • 双击按钮,在代码编辑器中添加以下代码:
  1. Public Class Form1
  2. Private Sub Form1_Load(sender As Object, e As EventArgs) _
  3. Handles MyBase.Load
  4. ' Set the caption bar text of the form.
  5. Me.Text = "cankaoshouce.com"
  6. End Sub
  7. Private Sub Button1_Click(sender As Object, e As EventArgs) _
  8. Handles Button1.Click
  9. Clipboard.SetDataObject(RichTextBox1.SelectedText)
  10. RichTextBox1.SelectedText = ""
  11. End Sub
  12. Private Sub Button2_Click(sender As Object, e As EventArgs) _
  13. Handles Button2.Click
  14. Clipboard.SetDataObject(RichTextBox1.SelectedText)
  15. End Sub
  16. Private Sub Button3_Click(sender As Object, e As EventArgs) _
  17. Handles Button3.Click
  18. Dim iData As IDataObject
  19. iData = Clipboard.GetDataObject()
  20. If (iData.GetDataPresent(DataFormats.Text)) Then
  21. RichTextBox1.SelectedText = iData.GetData(DataFormats.Text)
  22. Else
  23. RichTextBox1.SelectedText = " "
  24. End If
  25. End Sub
  26. End Class

当使用 Microsoft Visual Studio 工具栏上的 开始 按钮执行并运行上述代码时,它将显示以下窗口:

输入一些文本并检查按钮的工作方式。


在窗体中锚定和停靠控件

锚定(Anchoring)可将控件的锚点位置设置为其容器控件的边缘,例如窗体。 Control 类的 Anchor 属性可设置这个属性的值。Anchor 属性获取或设置控件绑定到的容器的边,并确定控件的父级调整大小。

当将控件锚定到窗体时,控件将在窗体大小调整后保持其与窗体边缘及其锚定位置的距离。

可以从 "属性" 窗口设置控件的定位属性值:

例如,让我们在窗体上添加一个按钮控件,并将其锚点属性设置为右下角。运行此窗体以查看按钮控件相对于窗体的原始位置。

现在,拉伸窗体时,按钮与窗体右下角之间的距离保持不变。

控件的停靠(Docking)意味着将其停靠到其容器的一个边缘。在 Docking 停靠中,控件将完全填充容器的特定区域。

Control 类的 Dock 属性执行此操作。 Dock 属性获取或设置哪个控件边框停靠在其父控件上,并确定如何使用其父控件调整大小。

您可以从 "属性" 窗口设置控件的停靠属性值:

例如,让我们在窗体上添加一个按钮控件,并将其 Dock 属性设置为 Bottom。运行此窗体以查看按钮控件相对于窗体的原始位置:

现在,拉伸窗体时,按钮会随着窗体调整自身大小。


模态窗体

模态窗体(Modal Forms)指这种窗体打开后,用户的鼠标焦点或者输入光标将一直停留在其上,无法使用非此窗体的其他功能,除非关闭该窗体。所有对话框都是模态形式。MessageBox 也是一种模式窗体。

可以通过两种方式调用模态窗体:

  • 调用 ShowDialog 方法
  • 调用 Show 方法

让我们举一个例子,我们将创建一个模态窗体,一个对话框。

使用以下步骤:

  • 向应用程序中添加窗体 Form1,并向 Form1 中添加两个标签和一个按钮控件。
  • 将第一个标签和按钮的文本属性分别更改为 'Welcome to cankshouce' 和 'Enter your Name'。保持第二个标签的文本属性为空。

  • 添加新的 Windows 窗体 Form2,并向 Form2 添加两个按钮、一个标签和一个文本框。
  • 将按钮的文本属性分别更改为 "OK" 和 "Cancel"。将标签的文本属性更改为 'Enter your name:'。
  • 将 Form2 的 FormBorderStyle 属性设置为 FixedDialog,为其提供对话框边框。
  • 将 Form2 的 ControlBox 属性设置为 False
  • 将 Form2 的 ShowInTaskbar 属性设置为 False
  • 将 "OK" 按钮的 DialogResult 属性设置为 - OK,将 "Cancel" 按钮设置为 Cancel

在 Form2 的 Form2_Load 方法中添加以下代码段:

  1. Private Sub Form2_Load(sender As Object, e As EventArgs) _
  2. Handles MyBase.Load
  3. AcceptButton = Button1
  4. CancelButton = Button2
  5. End Sub

在 Form1 的 Button1_Click 方法中添加以下代码段:

  1. Private Sub Button1_Click(sender As Object, e As EventArgs) _
  2. Handles Button1.Click
  3. Dim frmSecond As Form2 = New Form2()
  4. If frmSecond.ShowDialog() = DialogResult.OK Then
  5. Label2.Text = frmSecond.TextBox1.Text
  6. End If
  7. End Sub

当使用 Microsoft Visual Studio 工具栏上的 开始 按钮执行并运行上述代码时,它将显示以下窗口:

单击 'Enter your Name' 按钮显示第二个窗口:

单击 OK 按钮将控件和信息从模式窗体返回到上一个窗体: