Visual Basic 高级窗体
在本章中,让我们研究以下概念:
- 在应用程序中添加菜单和子菜单
- 在窗体中添加剪切、复制和粘贴功能
- 在窗体中锚定和停靠控件
- 模态窗口
在应用程序中添加菜单和子菜单
以前来讲,Menu
、MainMenu
、ContextMenu
和 MenuItem
类用于在 Windows 应用程序中添加菜单、子菜单和上下文菜单。
现在,MenuStrip
、ToolStripMenuItem
、ToolStripDropDown
和 ToolStripDropDownMenu
控件替换并向以前版本的菜单相关控件添加功能。然而,旧的控件类被保留下来,以便向后兼容和将来使用。
让我们首先使用旧版本控件创建一个典型的 Windows 主菜单栏和子菜单,因为这些控件在旧应用程序中仍然大量使用。
下面是一个实例,它显示了如何创建包含菜单项的菜单栏:File、Edit、View 和 Project。"File" 菜单具有 "New"、"Open" 和 "Save" 子菜单。
让我们双击窗体,并在打开的窗口中放置以下代码:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'defining the main menu bar
Dim mnuBar As New MainMenu()
'defining the menu items for the main menu bar
Dim 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 bar
mnuBar.MenuItems.Add(myMenuItemFile)
mnuBar.MenuItems.Add(myMenuItemEdit)
mnuBar.MenuItems.Add(myMenuItemView)
mnuBar.MenuItems.Add(myMenuItemProject)
' defining some sub menus
Dim myMenuItemNew As New MenuItem("&New")
Dim myMenuItemOpen As New MenuItem("&Open")
Dim myMenuItemSave As New MenuItem("&Save")
'add sub menus to the File menu
myMenuItemFile.MenuItems.Add(myMenuItemNew)
myMenuItemFile.MenuItems.Add(myMenuItemOpen)
myMenuItemFile.MenuItems.Add(myMenuItemSave)
'add the main menu to the form
Me.Menu = mnuBar
' Set the caption bar text of the form.
Me.Text = "cankaoshouce.com"
End Sub
End 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 Form1
Private 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 Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
Clipboard.SetDataObject(RichTextBox1.SelectedText)
RichTextBox1.SelectedText = ""
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) _
Handles Button2.Click
Clipboard.SetDataObject(RichTextBox1.SelectedText)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) _
Handles Button3.Click
Dim iData As IDataObject
iData = Clipboard.GetDataObject()
If (iData.GetDataPresent(DataFormats.Text)) Then
RichTextBox1.SelectedText = iData.GetData(DataFormats.Text)
Else
RichTextBox1.SelectedText = " "
End If
End Sub
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
方法中添加以下代码段:
Private Sub Form2_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
AcceptButton = Button1
CancelButton = Button2
End Sub
在 Form1 的 Button1_Click
方法中添加以下代码段:
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
Dim frmSecond As Form2 = New Form2()
If frmSecond.ShowDialog() = DialogResult.OK Then
Label2.Text = frmSecond.TextBox1.Text
End If
End Sub
当使用 Microsoft Visual Studio 工具栏上的 开始 按钮执行并运行上述代码时,它将显示以下窗口:
单击 'Enter your Name' 按钮显示第二个窗口:
单击 OK 按钮将控件和信息从模式窗体返回到上一个窗体: