Visual Basic 高级窗体
在本章中,让我们研究以下概念:
- 在应用程序中添加菜单和子菜单
- 在窗体中添加剪切、复制和粘贴功能
- 在窗体中锚定和停靠控件
- 模态窗口
在应用程序中添加菜单和子菜单
以前来讲,Menu、MainMenu、ContextMenu 和 MenuItem 类用于在 Windows 应用程序中添加菜单、子菜单和上下文菜单。
现在,MenuStrip、ToolStripMenuItem、ToolStripDropDown 和 ToolStripDropDownMenu 控件替换并向以前版本的菜单相关控件添加功能。然而,旧的控件类被保留下来,以便向后兼容和将来使用。
让我们首先使用旧版本控件创建一个典型的 Windows 主菜单栏和子菜单,因为这些控件在旧应用程序中仍然大量使用。
下面是一个实例,它显示了如何创建包含菜单项的菜单栏:File、Edit、View 和 Project。"File" 菜单具有 "New"、"Open" 和 "Save" 子菜单。
让我们双击窗体,并在打开的窗口中放置以下代码:
Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load'defining the main menu barDim mnuBar As New MainMenu()'defining the menu items for the main menu barDim myMenuItemFile As New MenuItem("&File")Dim myMenuItemEdit As New MenuItem("&Edit")Dim myMenuItemView As New MenuItem("&View")Dim myMenuItemProject As New MenuItem("&Project")'adding the menu items to the main menu barmnuBar.MenuItems.Add(myMenuItemFile)mnuBar.MenuItems.Add(myMenuItemEdit)mnuBar.MenuItems.Add(myMenuItemView)mnuBar.MenuItems.Add(myMenuItemProject)' defining some sub menusDim myMenuItemNew As New MenuItem("&New")Dim myMenuItemOpen As New MenuItem("&Open")Dim myMenuItemSave As New MenuItem("&Save")'add sub menus to the File menumyMenuItemFile.MenuItems.Add(myMenuItemNew)myMenuItemFile.MenuItems.Add(myMenuItemOpen)myMenuItemFile.MenuItems.Add(myMenuItemSave)'add the main menu to the formMe.Menu = mnuBar' Set the caption bar text of the form.Me.Text = "cankaoshouce.com"End SubEnd Class
当使用 Microsoft Visual Studio 工具栏上的 开始 按钮执行并运行上述代码时,它将显示以下窗口:

Windows 窗体包含一组丰富的类,用于创建具有现代外观、外观和感觉的自定义菜单。MenuStrip、ToolStripMenuItem、ContextMenuStrip 控件用于高效地创建菜单栏和上下文菜单。
单击以下链接查看其详细信息:
| 编号 | 控件 & 描述 |
|---|---|
| 1 | 它为窗体提供菜单系统。 |
| 2 | 它表示显示在 MenuStrip 或 ContextMenuStrip 上的可选选项 ToolStripMenuItem 控件替换以前版本的 MenuItem 控件并向其添加功能 |
| 3 | 它代表一个快捷菜单。 |
在窗体中添加剪切、复制和粘贴功能
ClipBoard 类方法用于在应用程序中添加剪切、复制和粘贴功能。ClipBoard 类提供了在系统剪贴板上放置数据和从中检索数据的方法。
它有以下常用方法 −
| 编号 | 方法名称 & 描述 |
|---|---|
| 1 | Clear 从剪贴板中删除所有数据。 |
| 2 | ContainsData 表示剪贴板上是否有指定格式的数据或可以转换为该格式的数据。 |
| 3 | ContainsImage 指示剪贴板上是否有 Bitmap 格式的数据或可以转换为该格式的数据。 |
| 4 | ContainsText 指示剪贴板上是否有 Text 或 UnicodeText 格式的数据,具体取决于操作系统。 |
| 5 | GetData 以指定格式从剪贴板检索数据。 |
| 6 | GetDataObject 检索当前在系统剪贴板上的数据。 |
| 7 | GetImage 从剪贴板检索图像。 |
| 8 | GetText 根据操作系统的不同,以 Text 或 UnicodeText 格式从剪贴板检索文本数据。 |
| 9 | GetText(TextDataFormat) 以指定的 TextDataFormat 值所指示的格式从剪贴板检索文本数据。 |
| 10 | SetData 清除剪贴板,然后以指定格式添加数据。 |
| 11 | SetText(String) 清除剪贴板,然后根据操作系统以 Text 或 UnicodeText 格式添加文本数据。 |
下面是一个实例,展示了如何使用 Clipboard 类的方法剪切、复制和粘贴数据。
使用以下步骤:
- 在窗体上添加一个富文本框控件和三个按钮控件。
- 将按钮的文本属性分别更改为剪切、复制和粘贴。
- 双击按钮,在代码编辑器中添加以下代码:
Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) _Handles MyBase.Load' Set the caption bar text of the form.Me.Text = "cankaoshouce.com"End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) _Handles Button1.ClickClipboard.SetDataObject(RichTextBox1.SelectedText)RichTextBox1.SelectedText = ""End SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) _Handles Button2.ClickClipboard.SetDataObject(RichTextBox1.SelectedText)End SubPrivate Sub Button3_Click(sender As Object, e As EventArgs) _Handles Button3.ClickDim iData As IDataObjectiData = Clipboard.GetDataObject()If (iData.GetDataPresent(DataFormats.Text)) ThenRichTextBox1.SelectedText = iData.GetData(DataFormats.Text)ElseRichTextBox1.SelectedText = " "End IfEnd SubEnd 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 方法中添加以下代码段:
Private Sub Form2_Load(sender As Object, e As EventArgs) _Handles MyBase.LoadAcceptButton = Button1CancelButton = Button2End Sub
在 Form1 的 Button1_Click 方法中添加以下代码段:
Private Sub Button1_Click(sender As Object, e As EventArgs) _Handles Button1.ClickDim frmSecond As Form2 = New Form2()If frmSecond.ShowDialog() = DialogResult.OK ThenLabel2.Text = frmSecond.TextBox1.TextEnd IfEnd Sub
当使用 Microsoft Visual Studio 工具栏上的 开始 按钮执行并运行上述代码时,它将显示以下窗口:

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

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