VB.Net高级窗体
在本章中,我们来学习以下概念和功能应用:
- 在应用程序中添加菜单和子菜单
- 在窗体中添加剪切,复制和粘贴功能
- 锚定和停靠控件在窗体中
- 模态窗体
在应用程序中添加菜单和子菜单
传统上,Menu
,MainMenu
,ContextMenu
和MenuItem
类用于在Windows应用程序中添加菜单,子菜单和上下文菜单。
现在,使用MenuStrip
,ToolStripMenuItem
,ToolStripDropDown
和ToolStripDropDownMenu
控件替换并添加功能到以前版本的菜单相关的控件。但是,为了向后兼容和将来使用,保留了旧的控制类。
先使用旧版本控件创建一个典型的Windows主菜单栏和子菜单,因为这些控件在旧应用程序中仍然有很多用处。
下面是一个例子中,显示了如何创建菜单栏菜单项:文件,编辑,视图和项目。文件菜单有子菜单新建,打开和保存。
双击窗体并将下面的代码放在打开的窗口中,参考以下代码的实现(项目:MenusSubMenus) -
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("&文件")
Dim myMenuItemEdit As New MenuItem("&编辑")
Dim myMenuItemView As New MenuItem("&查看")
Dim myMenuItemProject As New MenuItem("&工程")
'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("&新建")
Dim myMenuItemOpen As New MenuItem("&打开")
Dim myMenuItemSave As New MenuItem("&保存")
'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 = "Menu&SubMenu示例 - yiibai.com"
End Sub
End Class
当上面的代码执行并使用Microsoft Visual Studio工具栏上的“开始”按钮运行时,它将显示以下窗口:
Windows窗体包含一组丰富的类,用于创建具有现代外观和外观的自定义菜单。 MenuStrip
,ToolStripMenuItem
,ContextMenuStrip
控件用于高效地创建菜单栏和上下文菜单。
点击以下链接查看详细信息:
编号 | 控件 | 描述 |
---|---|---|
1 | MenuStrip | 它为窗体提供了一个菜单系统。 |
2 | ToolStripMenuItem | 它表示在MenuStrip 或ContextMenuStrip 上显示的可选选项。 ToolStripMenuItem 控件替换并添加了以前版本的MenuItem 控件的功能。 |
3 | ContextMenuStrip | 它代表一个快捷菜单。 |
在窗体中添加剪切,复制和粘贴功能
ClipBoard
类公开的方法用于在应用程序中添加剪切,复制和粘贴功能。 ClipBoard
类提供了在系统剪贴板上放置数据和从中检索数据的方法。
它有以下常用的方法:
编号 | 方法 | 描述 |
---|---|---|
1 | Clear |
删除剪贴板中的所有数据。 |
2 | ContainsData |
指示剪贴板上的数据是否处于指定格式或可以转换为该格式。 |
3 | ContainsImage |
指示剪贴板上的数据是位图格式还是可以转换为该格式。 |
4 | ContainsText |
指示剪贴板上是否有Text 或UnicodeText 格式的数据,具体取决于操作系统。 |
5 | GetData |
以指定的格式从剪贴板中检索数据。 |
6 | GetDataObject |
检索系统剪贴板上当前的数据。 |
7 | GetImage |
从剪贴板中检索图像。 |
8 | GetText |
根据操作系统,以Text 或UnicodeText 格式从剪贴板中检索文本数据。 |
9 | GetText(TextDataFormat) |
以指定的TextDataFormat 值指定的格式从剪贴板中检索文本数据。 |
11 | SetData |
清除剪贴板,然后以指定的格式添加数据。 |
12 | SetText(String) |
清除剪贴板,然后根据操作系统,以Text 或UnicodeText 格式添加文本数据。 |
以下一个例子,它显示如何使用Clipboard
类的方法剪切,复制和粘贴数据。参考以下步骤:
- 在窗体上添加一个富文本框控件和三个按钮控件。
- 将按钮的
Text
属性分别更改为“剪切”,“复制”和“粘贴”。
双击按钮在代码编辑器中添加以下代码(项目:Clipboard):
Imports System.Windows.Forms.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 = "剪切-复制-粘贴 - yiibai.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ClipboardData As New DataObject()
ClipboardData.SetData(DataFormats.Rtf, RichTextBox1.Rtf)
ClipboardData.SetData(DataFormats.Text, RichTextBox1.Text)
My.Computer.Clipboard.SetDataObject(ClipboardData)
RichTextBox1.SelectedText = ""
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim ClipboardData As New DataObject()
ClipboardData.SetData(DataFormats.Rtf, RichTextBox1.Rtf)
ClipboardData.SetData(DataFormats.Text, RichTextBox1.Text)
My.Computer.Clipboard.SetDataObject(ClipboardData)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim iData As IDataObject
iData = My.Computer.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工具栏上的“开始”按钮运行时,它将显示以下窗口:
输入一些文字并检查按钮的工作情况。
在窗体中锚定和停靠控件
锚定可将控件的锚点位置设置为其容器控件的边缘,例如窗体。 Control
类的Anchor
属性可设置这个属性的值。Anchor
属性获取或设置控件绑定到的容器的边,并确定控件的父级调整大小。
当将控件锚定到窗体时,控件将在窗体大小调整后保持其与窗体边缘及其锚定位置的距离。
可以从“属性”窗口中设置控件的“锚点”属性值:
例如,在窗体中添加一个Button控件,并将其Anchor
属性设置为Bottom
,Right
。 运行此窗体来查看Button
控件相对于窗体的原始位置。如下图所示 -
现在,当拉伸窗体放大时,Button
和窗体右下角之间的距离保持不变。
停靠控制装置将其对接到其容器的边缘之一。 在对接中,控制器完全填充容器的某个区域。Control
类的Dock
属性执行此操作。 Dock
属性获取或设置哪个控件边框停靠在其父控件上,并确定如何使用其父控件调整大小。
可以从“属性”窗口中设置控件的Dock
属性值为Bottom
:
例如,在窗体上添加一个Button
控件,并将其Dock
属性设置为Bottom
。运行此窗体来查看此Button
控件相对于窗体的原始位置。
现在,当拉伸窗体的时候,按钮就会随着窗体的大小自动调整。
模态窗体
模态窗体是在继续使用其他应用程序之前需要关闭或隐藏的窗体。所有对话框都是模态形式。MessageBox
控件也是一个模态窗体。
可以通过两种方式调用模态窗体:
- 调用
ShowDialog
方法 - 调用
Show
方法
举一个例子,下面创建一个模式窗体:一个对话框。参考以下步骤:
- 将Form1添加到应用程序,并将两个标签和一个按钮控件添加到Form1中。
- 将第一个标签和按钮的
Text
属性分别更改为“欢迎使用小牛知识库”和“输入你的名字”。保持第二个标签的Text
属性为空。设计视图效果如下 - - 在“解决方案资源管理器”中,找到项目名称,然后右键点击,在弹出的菜单中选择:添加->Windows窗体,添加一个新的Windows窗体:Form2,并将两个按钮,一个标签和一个文本框添加到Form2中。
- 将按钮的
Text
属性分别更改为“确定”和“取消”。 将标签的Text
属性更改为“输入您的姓名:”。 - 将Form2的
FormBorderStyle
属性设置为FixedDialog
,给它一个对话框边框。 - 将Form2的
ControlBox
属性设置为False
。 - 将Form2的
ShowInTaskbar
属性设置为False
。 - 将“确定”按钮的
DialogResult
属性设置为OK
,并将“取消”按钮设置为Cancel
。
最终设计的视图效果如下 -
在Form2.vb添加下面的代码:
Public Class Form2
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AcceptButton = Button1
CancelButton = Button2
End Sub
End Class
在Form1.vb添加下面的代码:
Public Class Form1
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
End Class
当上面的代码执行并使用Microsoft Visual Studio工具栏上的“开始”按钮运行时,它将显示以下窗口:
点击“输入你的名字”按钮显示第二个窗体:
点击“确定”按钮,将控制和信息从模态窗体恢复到第一个窗体,结果如下: