VB.Net高級窗體

在本章中,我們來學習以下概念和功能應用:

  • 在應用程序中添加菜單和子菜單
  • 在窗體中添加剪切,複製和粘貼功能
  • 錨定和停靠控件在窗體中
  • 模態窗體

在應用程序中添加菜單和子菜單

傳統上,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工具欄上的「開始」按鈕運行時,它將顯示以下窗口:

VB.Net高級窗體

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工具欄上的「開始」按鈕運行時,它將顯示以下窗口:

VB.Net高級窗體

輸入一些文字並檢查按鈕的工作情況。

在窗體中錨定和停靠控件

錨定可將控件的錨點位置設置爲其容器控件的邊緣,例如窗體。 Control類的Anchor屬性可設置這個屬性的值。Anchor屬性獲取或設置控件綁定到的容器的邊,並確定控件的父級調整大小。

當將控件錨定到窗體時,控件將在窗體大小調整後保持其與窗體邊緣及其錨定位置的距離。

可以從「屬性」窗口中設置控件的「錨點」屬性值:

VB.Net高級窗體

例如,在窗體中添加一個Button控件,並將其Anchor屬性設置爲BottomRight。 運行此窗體來查看Button控件相對於窗體的原始位置。如下圖所示 -

VB.Net高級窗體

現在,當拉伸窗體放大時,Button和窗體右下角之間的距離保持不變。

VB.Net高級窗體

停靠控制裝置將其對接到其容器的邊緣之一。 在對接中,控制器完全填充容器的某個區域。
Control類的Dock屬性執行此操作。 Dock屬性獲取或設置哪個控件邊框停靠在其父控件上,並確定如何使用其父控件調整大小。

可以從「屬性」窗口中設置控件的Dock屬性值爲Bottom

VB.Net高級窗體

例如,在窗體上添加一個Button控件,並將其Dock屬性設置爲Bottom。運行此窗體來查看此Button控件相對於窗體的原始位置。

VB.Net高級窗體

現在,當拉伸窗體的時候,按鈕就會隨着窗體的大小自動調整。

VB.Net高級窗體

模態窗體

模態窗體是在繼續使用其他應用程序之前需要關閉或隱藏的窗體。所有對話框都是模態形式。MessageBox控件也是一個模態窗體。

可以通過兩種方式調用模態窗體:

  • 調用ShowDialog方法
  • 調用Show方法

舉一個例子,下面創建一個模式窗體:一個對話框。參考以下步驟:

  • Form1添加到應用程序,並將兩個標籤和一個按鈕控件添加到Form1中。
  • 將第一個標籤和按鈕的Text屬性分別更改爲「歡迎使用易百教程」「輸入你的名字」。保持第二個標籤的Text屬性爲空。設計視圖效果如下 -
    VB.Net高級窗體
  • 在「解決方案資源管理器」中,找到項目名稱,然後右鍵點擊,在彈出的菜單中選擇:添加->Windows窗體,添加一個新的Windows窗體:Form2,並將兩個按鈕,一個標籤和一個文本框添加到Form2中。
  • 將按鈕的Text屬性分別更改爲「確定」「取消」。 將標籤的Text屬性更改爲「輸入您的姓名:」
  • Form2FormBorderStyle屬性設置爲FixedDialog,給它一個對話框邊框。
  • Form2ControlBox屬性設置爲False
  • Form2ShowInTaskbar屬性設置爲False
  • 「確定」按鈕的DialogResult屬性設置爲OK,並將「取消」按鈕設置爲Cancel

最終設計的視圖效果如下 -

VB.Net高級窗體

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工具欄上的「開始」按鈕運行時,它將顯示以下窗口:

VB.Net高級窗體

點擊「輸入你的名字」按鈕顯示第二個窗體:

VB.Net高級窗體

點擊「確定」按鈕,將控制和信息從模態窗體恢復到第一個窗體,結果如下:

VB.Net高級窗體