当前位置: 首页 > 教程 > VB.Net >

VB.Net高级窗体

精华
小牛编辑
136浏览
2023-03-14

在本章中,我们来学习以下概念和功能应用:

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

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

传统上,MenuMainMenuContextMenuMenuItem类用于在Windows应用程序中添加菜单,子菜单和上下文菜单。
现在,使用MenuStripToolStripMenuItemToolStripDropDownToolStripDropDownMenu控件替换并添加功能到以前版本的菜单相关的控件。但是,为了向后兼容和将来使用,保留了旧的控制类。

先使用旧版本控件创建一个典型的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窗体包含一组丰富的类,用于创建具有现代外观和外观的自定义菜单。 MenuStripToolStripMenuItemContextMenuStrip控件用于高效地创建菜单栏和上下文菜单。

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

编号 控件 描述
1 MenuStrip 它为窗体提供了一个菜单系统。
2 ToolStripMenuItem 它表示在MenuStripContextMenuStrip上显示的可选选项。 ToolStripMenuItem控件替换并添加了以前版本的MenuItem控件的功能。
3 ContextMenuStrip 它代表一个快捷菜单。

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

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

它有以下常用的方法:

编号 方法 描述
1 Clear 删除剪贴板中的所有数据。
2 ContainsData 指示剪贴板上的数据是否处于指定格式或可以转换为该格式。
3 ContainsImage 指示剪贴板上的数据是位图格式还是可以转换为该格式。
4 ContainsText 指示剪贴板上是否有TextUnicodeText格式的数据,具体取决于操作系统。
5 GetData 以指定的格式从剪贴板中检索数据。
6 GetDataObject 检索系统剪贴板上当前的数据。
7 GetImage 从剪贴板中检索图像。
8 GetText 根据操作系统,以TextUnicodeText格式从剪贴板中检索文本数据。
9 GetText(TextDataFormat) 以指定的TextDataFormat值指定的格式从剪贴板中检索文本数据。
11 SetData 清除剪贴板,然后以指定的格式添加数据。
12 SetText(String) 清除剪贴板,然后根据操作系统,以TextUnicodeText格式添加文本数据。

以下一个例子,它显示如何使用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属性设置为BottomRight。 运行此窗体来查看Button控件相对于窗体的原始位置。如下图所示 -

现在,当拉伸窗体放大时,Button和窗体右下角之间的距离保持不变。

停靠控制装置将其对接到其容器的边缘之一。 在对接中,控制器完全填充容器的某个区域。
Control类的Dock属性执行此操作。 Dock属性获取或设置哪个控件边框停靠在其父控件上,并确定如何使用其父控件调整大小。

可以从“属性”窗口中设置控件的Dock属性值为Bottom

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

现在,当拉伸窗体的时候,按钮就会随着窗体的大小自动调整。

模态窗体

模态窗体是在继续使用其他应用程序之前需要关闭或隐藏的窗体。所有对话框都是模态形式。MessageBox控件也是一个模态窗体。

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

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

举一个例子,下面创建一个模式窗体:一个对话框。参考以下步骤:

  • Form1添加到应用程序,并将两个标签和一个按钮控件添加到Form1中。
  • 将第一个标签和按钮的Text属性分别更改为“欢迎使用小牛知识库”“输入你的名字”。保持第二个标签的Text属性为空。设计视图效果如下 -
  • 在“解决方案资源管理器”中,找到项目名称,然后右键点击,在弹出的菜单中选择:添加->Windows窗体,添加一个新的Windows窗体:Form2,并将两个按钮,一个标签和一个文本框添加到Form2中。
  • 将按钮的Text属性分别更改为“确定”“取消”。 将标签的Text属性更改为“输入您的姓名:”
  • Form2FormBorderStyle属性设置为FixedDialog,给它一个对话框边框。
  • Form2ControlBox属性设置为False
  • Form2ShowInTaskbar属性设置为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工具栏上的“开始”按钮运行时,它将显示以下窗口:

点击“输入你的名字”按钮显示第二个窗体:

点击“确定”按钮,将控制和信息从模态窗体恢复到第一个窗体,结果如下: