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工具欄上的「開始」按鈕運行時,它將顯示以下窗口:
點擊「輸入你的名字」按鈕顯示第二個窗體:
點擊「確定」按鈕,將控制和信息從模態窗體恢復到第一個窗體,結果如下: