- Visual Basic.NET程序設計
- 王香菊主編
- 731字
- 2019-01-09 14:39:18
項目1 初識VB.NET
學習目標
了解.NET技術及其應用體系結構;
熟練掌握.NET的安裝過程及系統要求和系統設置;
正確理解IDE環境并配置初始開發環境;
能夠創建Windows簡單窗體;
理解控件、對象、屬性、方法及事件等基本概念;
能夠熟練使用Label、TextBox與Button等基本控件;
掌握RadioButton、CheckBox控件的使用;
基本掌握LabelLink與PictureBox控件的使用。
預備知識
.NET 技術是微軟公司推出的一個全新的概念,它代表了一個集合、一個環境和一個可以作為平臺支持下一代 Internet 的可編程結構。.NET 是一種面向網絡、支持各種用戶終端的開發平臺環境,其目的就是將互聯網作為新一代操作系統的基礎,對互聯網的設計思想進行擴展。
.NET 的最終目標是讓用戶在任何地方、任何時間、利用任何設備都能訪問所需要的信息、文件和程序,用戶不需要知道這些文件放在什么地方,只需要發出請求,然后就可以接收處理的結果,后臺的復雜處理過程對用戶而言是透明的。
1.NET的開發平臺
.NET開發平臺包括.NET框架和.NET開發工具等組成部分,如圖1-1所示。.NET框架(Framework)是整個開發的基礎,包括公共語言運行庫(Common Language Run,CLR)和框架類庫。公共語言運行庫是.NET 的基礎,用戶可以將公共語言運行庫看做一個代理,一個在執行應用程序時管理代碼的代理,它提供核心服務,而且還強制實施嚴格的類型安全檢查,以確保代碼運行的安全性和可靠性。

圖1-1 .NET的開發平臺
.NET 開發工具包括 Visual Studio.NET 集成開發環境和.NET 編程語言,其中,Visual Studio.NET 集成開發環境用來開發和測試應用程序,.NET 編程語言包括 Visual Basic、Visual C++、C#等,它們主要用來創建運行在公共語言運行庫上的應用程序。
.NET 類庫是一個綜合性的、面向對象的可重用類型集合,用戶可以使用它開發包含從傳統的命令行或圖形用戶界面(GUI)應用程序到基于 ASP.NET 所提供的創新應用程序在內的應用程序。
2.VB.NET的特點
完全支持面向對象編程;
使用ADO.NET進行數據訪問;
能夠方便地進行Web應用程序的開發。
模塊1 VB.NET使用基礎
任務1 安裝Visual Studio 2005及IDE環境設置
任務要求
在開發應用程序之前,需要安裝相應的開發軟件,下面請你將 Visual Studio 2005 安裝在你的機器上,并設置其運行環境。
任務分析
(1)安裝Visual Studio 2005可以通過光盤或者硬盤上的文件來完成,這里以光盤為例;
(2)由于Visual Studio 2005提供了一組.NET的開發工具,在具體使用時可根據具體情況選擇適當的開發工具,因此在使用之前需要設置應用程序的開發及運行環境。
任務單
(1)通過光盤安裝Visual Studio 2005;
(2)了解并設置其運行環境。
任務解決方案
步驟1:檢查機器軟件及硬件系統
右擊“我的電腦”|“屬性”,選擇“常規”選項卡,檢查內存及操作系統版本。
步驟2:插入Visual Studio 2005光盤執行安裝
將光盤插入光驅,自動運行或雙擊打開 setup.exe 進行安裝,安裝過程如圖1-2至圖1-9所示。

圖1-2

圖1-3

圖1-4

圖1-5

圖1-6

圖1-7

圖1-8

圖1-9
勾選“我接受許可協議中的條款”前的復選框,在名稱中輸入公司名稱,也可不輸入
采用默認值,安裝常用功能;選擇自定義方式,用戶可以根據需要選擇安裝功能,本任務選擇自定義方式
當且僅當選擇自定義安裝方式時可見,用戶根據自己的使用需要選擇,但Visual Basic必選
開始安裝系統所需的文件
系統安裝成功
可根據需要選擇是否安裝 msdn,不安裝則單擊“退出”按鈕結束Visual Studio 2005的安裝
步驟3:設置運行環境
當用戶安裝完成后,在第一次啟動應用程序后,系統會提示選擇默認環境設置。如圖1-10所示,選擇“Visual Basic開發設置”,之后顯示起始頁,如圖1-11所示。

圖1-10

圖1-11
為了使用方便,可單擊菜單欄中的“工具”|“選項”,打開“選項”對話框,單擊“項目和解決方案”,展開后選擇“常規”選項,選中“創建時保存新項目”左側的復選框,用于在新建一個項目時確定項目的保存位置同時保存項目,如圖1-12所示。

圖1-12 “選項”對話框
知識梳理
1.軟、硬件要求
Visual Studio 2005是一種功能非常強大的集成開發環境,它可以使應用程序的開發過程更簡單、更高效,同時它也是一個比較大的應用軟件,對于系統和硬件都有比較高的要求。為了能夠順利安裝與使用 Visual Studio.NET 2005,不同的使用版本對軟、硬件要求也不盡相同,表1-1列出了常用版本的安裝要求。
表1-1 Visual Studio 2005安裝要求

2.環境設置
Visual Studio 2005提供多種編程語言,主要包含VB.NET、C#、C++、J#等,根據使用的需要及機器的配置情況,在安裝時可選擇其中的一部分或全部安裝。如果在安裝時選擇了多個編程語言,那么在啟動之前需要指定一個經常使用的編程語言,以方便用戶使用。
3.產品文檔(MSDN)
產品文檔是Visual Studio 2005的幫助文件,它包含Visual Studio 2005的編程技術信息及其他資料。Visual Studio 2005 的聯機幫助文檔采用超文本鏈接格式,如果安裝了MSDN,則在使用時可以隨時使用其中的幫助信息。在安裝過程中可以選擇安裝或不安裝,但是如果需要安裝MSDN,則硬盤所需的可用空間要大很多。
小試身手
由于光盤的讀取速度比硬盤慢,很多人寧愿選擇虛擬光盤來安裝大型的應用程序,請你試著利用虛擬光盤安裝Visual Studio 2005,并將默認的編程語言設置為C#。
任務2 IDE環境與應用程序的創建
任務要求
運用Visual Studio 2005新建一個項目,用以開發一個“學籍管理系統”應用程序的歡迎界面,要求在標題欄上能顯示“學籍管理系統”,且界面美觀、歡迎信息醒目;同時,要求提供一個按鈕,當單擊該按鈕后,能關閉該窗口。請充分借助于IDE環境快速完成此項工作。
任務分析
利用 Visual Studio 2005 可以創建滿足不同需要的應用程序,且借助于面向對象的開發技術,可以在一個應用程序中建立多個友好的人機交互界面。因此,創建一個應用程序其首要任務是建立一個項目文件,再在其中添加多個 Windows 窗體或相關內容,通過窗體可以完成用戶與應用程序之間的信息交互,且利用項目來管理多個不同的對象,如窗體等。
任務單
(1)啟動Visual Studio 2005,選擇VB程序設計語言;
(2)創建項目,選擇存放的路徑及項目名稱;
(3)創建窗體,設置窗體的屬性;
(4)添加控件及控件的事件處理程序;
(5)設置運行環境,調試運行應用程序。
任務解決方案
步驟1:啟動Visual Studio 2005,創建新項目
雙擊桌面上的圖標,打開 Visual Studio 2005,單擊執行菜單欄命令“文件”|“新建項目”,彈出“新建項目”對話框,在“項目類型”中選擇“Visual Basic”,在“模板”中選擇“Windows 應用程序”,單擊“瀏覽”按鈕選擇“E:\unit1”,在“名稱”欄后輸入“project1-1”,如圖1-13所示。

圖1-13 新建項目
步驟2:認識IDE窗口
打開IDE窗口如圖1-14所示,其中“Form1.vb”是系統自動為應用程序添加的一個窗體,它是窗體的主要工作區域;其窗口設置是一個默認設置,用戶也可以根據需要借用菜單欄或工具欄進行調整。窗口主要部分及功能如下。

圖1-14 默認窗口
① 解決方案資源管理器:主要用于管理應用程序中的所有文件。在該窗口中列出了解決方案名稱、項目名稱及項目中用到的所有窗體名稱、模塊名稱等。
② 屬性面板:用于顯示并設置每個對象的所有屬性。
③ 工具箱:包含了可以添加到應用程序的窗體上的對象和控件,這些對象和控件按類型分別放在不同的選項卡上,默認是自動隱藏的。
④ Windows 窗體編輯器:主要用于為應用程序設計用戶接口,是設計應用程序交互界面的主要工作區域。它是一個容器控件,可以在其中放置不同的控件并對控件進行布局調整。
⑤ 錯誤列表:當應用程序執行時,若存在語法錯誤,則在此處顯示錯誤信息,方便用戶定位錯誤并及時修改。
⑥ 常用工具欄:功能同其他應用程序。
⑦ 布局工具欄:當需要調整窗體中控件的大小、位置及排列方式時,可利用此工具欄快速實現。
除此之外,當右擊窗體區域、選擇“查看代碼”或雙擊窗體上某個對象時,會打開代碼窗口,該窗口區域主要用于編輯事件處理程序、用戶自定義變量或函數等。
步驟3:設計窗體
(1)單擊 Form1 窗體,單擊窗口右側的“屬性”按鈕,將 Text 屬性值設為“學籍管理系統”。
(2)將鼠標指向“工具箱”、展開“公共控件”,雙擊其中的 Button、Label 和PictureBox 控件,向窗體添加 3 個控件 Button1、Label1 和 PictureBox1,然后將這 3 個控件移動到合適的位置。
(3)單擊選中Button1控件,將其Text屬性值修改為“確定”。
(4)選中 Label1 控件,將其 Text 屬性值改為“歡迎使用學籍管理系統!”,將 Font 屬性值改為“隸書、四號”,將ForeColor屬性值改為“藍色”。
(5)單擊 PictureBox1 控件,單擊 Image 屬性右側的按鈕,打開對話框如圖1-15所示,選擇“本地資源”,單擊“導入”按鈕,選擇E:\unit1\images\dark.jpg文件(可以先回到操作系統下建立一個文件夾 E:\unit1\images,并任意復制一個圖片文件或者任選一個圖片文件),單擊“確定”按鈕,將SizeMode屬性值改為“Zoom”。

圖1-15 “選擇資源”對話框
步驟4:設計按鈕的事件處理程序
在“確定”按鈕上雙擊,打開代碼文件,在其中添加兩行代碼(以粗體顯示的),其余的為系統自動生成。
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() Application.Exit() End Sub End Class
步驟5:設置啟動窗體并運行程序
右擊“解決方案管理器”中的項目“project1-3”,選擇“屬性”選項打開窗口,將啟動窗體設為“Form1”(默認啟動窗體是Form1),按F5鍵進行調試運行。運行后的界面如圖1-16所示。

圖1-16 運行后的界面
自主探究
1.設置啟動項目與設置啟動窗體是否一樣?當有多個項目(如 proj1-1 和 proj1-2)時,如何將啟動窗體設置為proj1-2中的Form1?
2.如何進入窗體對應的代碼文件中?可以有幾種方法?請說明具體的操作方法。
3.一個應用程序對應的文件常用的有哪些?在解決方案資源管理器中所見的與在對應文件夾中所列的文件有何不同?
知識梳理
1.常用工具窗口介紹
(1)工具箱
當工作窗口是窗體設計器時,工具箱中的所有控件可用。默認狀態下,工具箱處于自動隱藏狀態,將鼠標光標放在“工具箱”上,工具箱會自動打開;也可以單擊“自動隱藏”按鈕,在工具箱的隱藏/顯示狀態之間切換,如圖1-17所示。

圖1-17 工具箱的隱藏與顯示
工具箱包括多個控件組,每個控件組又包含多個控件,每個控件組中的控件根據功能來劃分。主要控件組如圖1-17所示,單擊“+”可以展開相應的控件組,雙擊某個控件或單擊選擇某個控件然后拖放到窗體的對應位置,即可在窗體中添加一個相應的控件。
(2)資源管理器窗口
新建一個項目或打開一個項目后,項目的所有內容會顯示在解決方案資源管理器窗口中,單擊標準工具欄上對應的按鈕可顯示該窗口。在該窗口中雙擊某一個文件,或右擊*.vb 文件、選擇“查看設計器”,就能在主窗口中打開該文件。若右擊*.vb 文件、選擇“查看代碼”,可以打開當前窗體對應的代碼文件。
(3)屬性窗口
在 VB.NET 中,任何一個對象都有其特有的屬性,通過屬性窗口來設置不同對象的屬性。屬性窗口的打開方法有如下3種:
在窗體中指向某個控件后右擊、選擇“屬性”;
執行菜單命令“視圖”|“屬性窗口”;
單擊標準工具欄上的按鈕。
(4)代碼設計窗口
任何一個對象均可以對應一個或多個事件處理程序,用戶添加自定義的方法或變量也可以在代碼設計窗口中進行。代碼設計窗口的打開可采用如下方法之一:
右擊任意一個對象,選擇“查看代碼”;
在解決方案資源管理器中右擊*.vb,選擇“查看代碼”;
執行菜單命令“視圖”|“代碼”;
雙擊任意一個對象,打開代碼設計窗口,同時添加一個默認的事件處理程序。
2.應用程序的組成
通過任務 1 可以看出,利用 Visual Studio 2005 創建的應用程序即使只包含一個Windows 窗體,同樣也會有多個組成部分,如文件或文件夾等。為了有效地組織這些項目,.NET提供了兩種容器:項目與解決方案。一個解決方案可以包含一個或多個項目。
當創建一個應用程序后,在 IDE 環境中的“解決方案資源管理器”中,通常可顯示的文件只有Form1.vb,如圖1-18所示。

圖1-18 解決方案中的常用文件
此處的工具欄中有兩個常用的按鈕:
① 用于顯示所有的文件,一般是隱藏的,當單擊此按鈕時,其內容會變成如圖1-19所示的文件列表;

圖1-19 解決方案中的所有文件
② 用于查看代碼,當有事件處理程序需要修改時,通過該按鈕可以打開相應的代碼文件。
(1)Form1.vb及Form1.Designer.vb、Form1.resx文件
當用戶新建一個項目后,系統會自動添加 Form1.vb 文件,如果需要添加多個 Windows窗體文件,默認的文件名為 Form2、Form3、……。該文件是由用戶根據功能要求添加的各種對象組成的,這個文件對應兩個系統自動生成的文件,即 Form1.Designer.vb 和Form1.resx。前者是針對程序設計界面自動生成的代碼,主要包含窗體所有對象的聲明信息、Form1.cs中的Form1類構造函數Initialize()調用的方法,以及窗體銷毀時用于清理組件列表的Dispose()方法,該文件一般不通過編輯器修改;Form1.resx用來保存窗體所應用的所有資源,包括文字、圖像等。
(2)項目引用與名稱空間
添加項目引用的主要目的是讓 VB.NET 中的項目可以使用外部對象,如本任務中的Button、Form 類均包含在 System.Windows.Forms 名稱空間中,因此在項目中必須包含對其的引用。常用的項目引用如圖1-19所示。
名稱空間用于組織項目中定義的對象,每個名稱空間可以包含下級名稱空間。名稱空間的主要作用是防止對象名稱含義不清的問題出現,同時也可以簡化對類庫的引用。一個項目可以包含多個名稱空間。
當添加項目引用后,可以通過Imports語句來簡化對項目引用的訪問。
Imports語句具有如下語法:
imports 名稱空間
在代碼文件中,Imports語句必須位于代碼文件的首部。如果在代碼文件的首部有:
Improts System.Windows.Form
則在后面可以用 Dim frm As New Form 語句來代替 Dim frm As New System.Windows. Form.Form語句得到一個Form類的對象frm。
(3)AssemblyInfo.vb文件
AssemblyInfo.vb 文件是保存程序集信息的文件,一個程序集對應一個這樣的文件,其主要內容為程序集的版本信息,如程序集的版本號、說明、產品公司等。它由三部分內容組成:使用的名稱空間、一般信息、版權信息。
(4)Application.Designer.vb文件
該文件主要定義 OnCreateMainForm()方法,而該方法是應用程序的入口點,它指明了運行應用程序時的啟動窗體。當新建一個項目后,系統會自動將第一個 Form 窗體(默認的為 Form1)設置為當前應用程序的啟動窗體。在 Application.Designer.vb 文件中的部分內容如下:
Protected Overrides Sub OnCreateMainForm() Me.MainForm = Global.project1_3.Form1 End Sub
但該文件一般不用直接修改,如果要修改啟動窗體,可通過以下方法來進行:
右擊“解決方案資源管理器”中的項目名稱,選擇“屬性”,打開如圖1-20所示的窗口,在“程序集名稱”中顯示對應的項目名稱,在“啟動窗體”下的下拉列表框中選擇對應的窗體名稱,單擊按鈕關閉即可。

圖1-20 修改啟動窗體
說明:
當有多個項目時,可以通過右擊項目名稱、選擇“設為啟動項目”來改變啟動項目。
(5)其他文件
project1-3.sln:用來保存與解決方案相關的信息,也是應用程序的基礎文件,雙擊會打開應用程序。
project1-3.suo:與 project1-3.sln 存放在同一個文件夾中,存儲對 IDE 進行自定義的源數據。
project1-3.vbproj.user:用來保存用戶對項目的設置參數。
project1-3.vbproj:用來描述項目并列出項目中所包含的文件。
3.基本概念
(1)類與對象
在面向對象的程序設計中,類是核心,一個類可以包含多個變量、屬性和方法;通過
對類進行實例化可以得到一個對象,對象可以驅動事件完成應用程序的相應功能。
定義類的一般格式為:
Public Class 類名 語句體 End Class
當新建一個項目或者添加一個新窗體后,每個窗體都會對應一個類,如本任務中的Form1窗體就是一個類:
Public Class Form1 … End Class
當拖放一個控件到窗體上時,系統會自動建立一個類的對象,如Button1即是Button類的一個對象。與實際生活中一樣,對象就是實際存在的一個物體,除了自身具備的一些特征外,還可以對對象執行某種操作。
(2)屬性
屬性是對象的特征,如 Form1 對象的大小、背景顏色等,可以通過屬性面板或程序代碼進行設置或獲取其值。
(3)事件
事件是針對某一對象可以執行的某一動作。事件可分為系統事件和用戶事件。系統事件由操作系統觸發,用戶事件一般由用戶通過鍵盤或鼠標觸發,如鼠標在窗體上移動、單擊或雙擊等,事件可在任何對象上發生。用戶事件完成的任務由用戶編寫的事件處理程序來實現。
在某一個對象上可觸發的事件可通過右擊屬性窗口上的工具按鈕來查看,在相應的事件上雙擊,可自動進入代碼文件并形成事件處理程序頭。
(4)方法
方法是一組執行某一特定操作的一條或多條語句。在 VB.NET 中,方法有兩種類型:過程和函數。
小試身手
(1)啟動Microsoft Visual Studio 2005后,新建一個項目,并在該應用程序中設計一個窗體,用以顯示一個如圖1-21所示的窗體,其中所用的控件可以任意選取,當單擊“關閉”按鈕時退出應用程序。

圖1-21 示例窗體
(2)在項目Project1-3中添加上述窗體并完成相應的功能,要求在運行時以該窗體作為啟動窗體,請再次嘗試完成。
(3)請試著添加一個新窗體(窗體名稱為 mainfrm)在當前的項目中,讓窗體具有圖1-16所示的功能。
(4)在本解決方案中再添加一個項目stu1-3,并將項目project1-3中的Form1復制到項目stu1-3中,請嘗試完成。
模塊2 窗體和常用控件
任務1 窗體設計
任務要求
很多應用軟件進入時都有歡迎界面,現設計一個如圖1-22所示的歡迎界面(暫無文字等內容)。

圖1-22 歡迎界面
任務解決方案
步驟1:新建項目
新建項目,以“project1-2”為名保存在 E:\unit1 文件夾中,注意觀察資源管理器中有一個默認窗體Form1。
步驟2:新建窗體
在“項目”菜單中選擇“添加 Windows 窗體”,彈出如圖1-23所示對話框,采用默認值,直接單擊“添加”按鈕,在資源管理器中增加一個窗體Form2。

圖1-23 添加窗體對話框
步驟3:改變啟動窗體
在“項目”菜單中選擇“project1-2 屬性”,彈出如圖1-24所示對話框,在“啟動窗體”下拉列表中選擇“Form2”,然后關閉對話框。

圖1-24 設置啟動窗體對話框
步驟4:修改Form2的窗體名和標題
在屬性窗口中找到 Name 屬性,其默認值為“Form2”,修改為“hyfrm”;修改 Text屬性為“歡迎”。
步驟5:改變hyfrm窗體的大小和位置
單擊Size屬性前的“+”將其展開,修改Width屬性值為“500”,Height值為“350”;StartPosition屬性修改為“CenterScreen”。
步驟6:設置hyfrm窗體的外觀
單擊BackcColor屬性右邊的下拉按鈕,在彈出的選項卡中選擇“自定義”,任選一種顏色;設置FormBorderStyle屬性為“Fixed3D”;設置Maximizebox屬性和Minimizebox屬性值均為“False”。
步驟7:添加hyfrm窗體代碼
雙擊hyfrm窗體,打開代碼設計器,選擇click事件,輸入下列代碼:
Private Sub hyfrm_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Form1.Show() End Sub
步驟8:添加Form1窗體代碼
雙擊Form1窗體,打開代碼設計器,輸入下列代碼:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "第二界面" End Sub
步驟9:測試程序
知識梳理
面向對象程序設計中的對象包括窗體和控件,通過它們能快速設計出需要的應用程序界面。其中,窗體用來作為其他控件對象的載體和容器,控件則是添加到窗體上的對象,它們都有自身的屬性、方法和事件。
一個應用程序往往包含多個窗體,新建項目時系統提供一個默認窗體Form1,通過右擊項目名稱、選擇“添加Windows窗體”可以創建一個新的窗體,輸入窗體名稱。
當應用程序運行后,多個窗體并不同時顯示,將第一個出現在屏幕上的窗體稱為啟動窗體,通過啟動窗體可以調用其他窗體顯示。一個項目有且只有一個啟動窗體,調試時一般將被調試窗體設置為啟動窗體。
窗體有MDI和SDI兩類。MDI窗體是指多文檔窗體,典型的如Word,在Word應用程序主界面(父窗體)中可同時打開多個文檔(子窗體);SDI 窗體是指單文檔窗體,典型的如記事本,某一時刻只能打開一個文檔,新文檔打開的同時將關閉舊文檔。MDI 窗體的有關內容將在后面介紹。
1.窗體屬性
窗體的屬性很多,常用的窗體屬性如下所述。
(1)Name與text屬性
Name 屬性是指窗體名,系統提供的默認窗體名為“Form”加上數字,如 Form1、Form2,設計時可修改,如任務中改為hyfrm,但程序運行時該屬性為只讀。
窗體名是程序引用窗體時的唯一標識,如任務中 From1.Show()指定顯示 From1。如果是對當前窗體操作,則使用Me來代表窗體名,如任務中的Me.Text="第二界面"。
Text 屬性是指窗體的標題,創建時系統提供與窗體名一樣的默認標題,設計時可修改,如任務中修改窗體hyfrm的標題為“歡迎”,運行時也可修改,如任務中的Me.Text ="第二界面"。
之所以把這兩個屬性放在一起介紹是因為初學者往往分不清二者的區別,更有甚者將保存時的窗體文件名也與它們混淆,資源管理器中看到的擴展名為.vb的文件即為窗體文件。
(2)標題欄有關屬性
除Text屬性用于設置窗體的標題外,標題欄還涉及最大化、最小化等按鈕。
ControlBox 屬性:為 True 時有窗口控制菜單,為 False 時無窗口控制菜單。只有當 ControlBox 屬性為 True 時 Maximizebox、Minimizebox、HelpButton 屬性設置才有效。
注意:
ControlBox 屬性為 False 時窗體不顯示關閉按鈕,這時就無法關閉正在運行的窗體(可用“調試”菜單中的“停止調試”關閉),所以該屬性一般在所有工作完成后再設置。
Maximizebox/Minimizebox屬性:最大/最小化按鈕是否顯示,任務中已示例。
HelpButton屬性:是否顯示幫助按鈕。
Icon屬性:設置窗體圖標。圖標文件擴展名為.ico,可搜索該類文件后自行設置。
(3)外觀屬性
FormBorderStyle屬性:邊框樣式,有7個選項,如任務中用的是Fixed3D。
BackColor 屬性:設置窗體背景色,設置方法任務中介紹了一種,其他的將在后面介紹。
BackColorImage/BackColorImageLayout屬性:設置背景圖片及其顯示方式。
(4)位置與大小
窗體的大小可在設計時通過拖曳句柄粗略調節,也可設置其Width和Heigh屬性值進行調節。
StartPosition 屬性設置窗體在啟動時顯示在屏幕中的位置,CenterScreen 使得窗體啟動時顯示在屏幕中間,StartPosition屬性有5個選項。
窗體有三態:還原、最大化、最小化,通過設置 WindowsState 屬性即可改變窗體啟動時的狀態。
(5)設置鼠標指針
設置Cursor屬性可改變鼠標指針形狀。
2.窗體事件
窗體的事件中很多與窗體的狀態有關,每個事件間存在著一定的時間差,如 FormClosed和FormClosing,因而適用于不同場合,常用的事件主要有以下幾類。
(1)Load()
窗體裝入工作區時觸發該事件,常用來對屬性和變量進行初始化。
(2)FormClosed()
關閉窗體后觸發該事件。
(3)Activated()
在窗體被激活時觸發該事件。
(4)Deactivate()
在窗體失去焦點成為不活動窗體時觸發該事件。
(5)Click()/DBClick()
在窗體空白區域或無效控件上單擊/雙擊時觸發該事件。
(6)Paint()/Resize()
Paint():窗體被移動或縮放部分后或全部暴露時發生。
Resize():窗體第一次顯示或窗口狀態發生改變時(最大/最小化、縮放操作)觸發。
3.窗體方法
① Show()方法:顯示窗體。
② Hide()方法:隱藏窗體。
③ Refresh()方法:刷新窗體。
④ Activate()方法:激活窗體并給予焦點。
⑤ Close()方法:關閉窗體。
自主探究
請自行探索窗體的其他屬性、事件和方法。
小試身手
任務中的歡迎界面比較粗糙,請自行設計一個漂亮的歡迎頁。可參考 VS 的模板(在圖1-23所示對話框中選擇“初始屏幕”模板)。
任務2 公共控件(1)
任務要求
使用應用軟件前一般需要驗證用戶信息(賬號和密碼),本任務即設計一個實現該功能的用戶登錄窗口,要求該窗口不可以最大化和最小化,啟動后顯示在屏幕的正中央。
任務解決方案
步驟1:新建窗體
在項目“project1-2”中添加 Windows 窗體,窗體名為 loginfrm,并將 Text 屬性改為“用戶登錄”,FormBorderStyle 屬性改為 FixedDialog,Maximizebox、Minimizebox 屬性設置為False,StartPosition屬性設置為CenterScreen,Width值為300、Height值為240,如此得到一個窗體,如圖1-25所示。

圖1-25 用戶界面
步驟2:添加控件
在工具箱中展開公共控件,雙擊 Label 控件,添加 label1 和 label2 并將其移動到合適位置。
在窗體上添加 2 個 TextBox 控件 TextBox1、TextBox2,2 個 Button 控件 Button1、Button2。
步驟3:設置Text屬性
單擊 Label1 將其選中,在屬性窗口中修改其 Text 屬性為“用戶名:”,修改 Label2 的Text屬性為“密碼:”。
單擊Button1將其選中,在屬性窗口中修改其Text屬性為“確定(&O)”,修改Button2的Text屬性為“放棄(&C)”。
步驟4:設置Font屬性
由于這 6 個控件都有 Font 屬性,且設置成一樣的字體和大小,所以可同時設置。同時選中這些控件,修改Font屬性為小四號。
步驟5:調節控件的大小和位置
按圖1-26所示調節各控件的大小和位置。選中控件后拖動可將控件移動到指定位置,拖動句柄可改變控件大小。

圖1-26 用戶登錄界面
步驟6:編寫文本框事件代碼
雙擊用戶名文本框,進入代碼窗口,在事件下拉列表中選擇“KeyPress”,輸入:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows. Forms. KeyPressEventArgs) Handles TextBox1.KeyPress If Asc(e.KeyChar) = 13 Then TextBox2.Focus() End If End Sub
步驟7:編寫放棄按鈕代碼
雙擊“放棄”按鈕,進入代碼窗口,輸入:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub
步驟8:測試程序
知識梳理
從本任務開始我們將接觸各種各樣的控件,這些控件根據功能分成多個類別,如公共控件、容器等。本任務中介紹了3種常用控件,并通過它們熟悉控件的基本操作。
1.控件操作
(1)創建對象
在工具箱中單擊所需控件對象,在窗體中拖曳。
在工具箱中雙擊所需控件對象。
(2)對象的選定
在工具箱中先單擊“指針”,呈選擇狀態,然后可進行以下操作:
單擊對象選定一個。
按Ctrl(或Shift)鍵再單擊其他對象可選定多個。
用拖曳的方法圈住所需的對象。
(3)對象的復制
可用復制的方法生成新控件,復制產生的控件某些屬性是相同的,如大小,因而可生成一組屬性相似的控件,但VB.NET不支持控件數組。
(4)對象的刪除
選定要刪除的對象,按刪除鍵Del即可。
(5)對象大小和位置的調節
選定一個或多個控件后,用鼠標拖動句柄可改變控件大小,如果是其他部位則移動控件位置。由于 VB.NET 中提供標尺線,所以這種方式的定位也較精確。還可在屬性窗口用數字精確調節控件的大小和位置。
當控件調整合適后,為防誤操作可將控件鎖定,方法有二:一是執行菜單命令“格式”|“鎖定控件”;二是在屬性窗口中將Lock設置為True。
自主探究
請自行探索“格式”菜單的每個功能項。
2.控件常用屬性
控件的屬性很多,有些是某個控件特有的,有些是很多控件都具有的,在此介紹那些常用的、共有的屬性(但不是所有控件都有)。
另外要注意屬性間的區別,有些屬性只能在設計時修改(只讀),有些只能在代碼中修改,有些在設計、運行時都能修改。
(1)Name/Text
這兩個屬性與窗體中的大致相同,略有不同的是控件可以設置熱鍵,如任務中的確定按鈕;設置熱鍵的方法任務中已有,&符號后的第一個字符即為熱鍵。
(2)Location/Size
Location:控件在容器中的位置,其由 x、y 兩個參數組成,它們指明控件左上角的坐標。默認坐標系統以容器(如窗體)左上角為原點。
Size:控件大小,由Height、Width的值決定控件的高與寬,以像素為單位。
(3)Enabled/Visible
Enabled:控件是否允許操作,True為允許,False為禁止(灰化)。
Visible:控件是否可見,True為可見,False為不可見。
注意,無論灰化還是不可見,都是指在程序運行時而非在設計時。
(4)Font
改變控件的字形、字體等。Font由Name、Size等成員構成。
(5)ForColor/BackColor
這兩個屬性是指前景(正文)/背景顏色。表示顏色的方法有多種,常用的兩種方式如下。
顏色常量:如Red表示紅色,在屬性窗口中設置時可觀察到各種顏色常量。
RGB 色彩:用三個 0~255 的數字表示不同色彩,如 RGB(255,255,255)表示白色,RGB(255,0,0)表示紅色。在屬性窗口輸入時只需輸入形如(255,0,0)的數字即可。
(6)TabIndex和TabStop
任務中有兩個文本框,當用鼠標單擊某一文本框時,光標將在該文本框中閃爍,這時就可輸入數據,稱之為獲得焦點。焦點(Focus)是指具有接收用戶鼠標和鍵盤輸入的能力。具有焦點的應用程序才是活動窗口,具有焦點的控件才能接收輸入。
TabIndex:指控件的焦點順序。創建的第一個控件的TabIndex為0,其后依次為1、2、3…,當按Tab鍵時,焦點即按這一順序移動。可以通過修改TabIndex值來改變這一順序。
TabStop:控件焦點是否起作用,一旦設置為 False 則在焦點順序中跳過該控件,但TabIndex仍存在。
(7)TextAlign
控件文本的對齊方式,可以是左對齊、右對齊或居中。
(8)AutoSize
當其值為True時,控件能根據內容的大小自動調整自身大小。
自主探究
與窗體一樣,控件也有外觀屬性,請找到這些屬性并熟悉之。
3.有關Label、TextBox、Button的說明
Button 稱為命令按鈕,該控件通常用于執行某些操作。Label 稱為標簽,通常用來顯示靜態文本,顯示的文本不能編輯。TextBox 稱為文本框,主要用于文本的輸入、編輯、顯示等操作。
對于文本框,還需熟悉一些常用屬性。
MaxLength屬性:文本框中能容納的最大字符數。
ReadOnly 屬性:如果文本框中的內容僅用于顯示而不想讓用戶修改,可設置其為True。
PasswordChar 屬性:在密碼接收文本框中輸入密碼時不想顯示其內容,可通過該屬性來設置,通常用“*”來代替輸入的內容。
MultiLine屬性:值為True時,文本框由單行變成多行,多行文本一般需自動換行,是否自動換行由WordWrap屬性決定。
ScrollBars屬性:設置是否有滾動條及滾動條的形式。
Label 一般僅用于顯示文本,所以無須用到事件、方法,Button 常用 Click 事件,任務中已有實例。下面著重介紹文本框的事件和方法。
任務中步驟 6 的事件過程的功能是當在用戶名文本框中輸入完并回車時,焦點自動跳到密碼文本框。只要按鍵盤就會觸發 KeyPress 事件,其參數 e.KeyChar 是鍵盤輸入的最后一個字符,因為回車是不可見字符,只能通過ASCII碼來比較。
當文本框中的 Text 發生變化時將觸發 TextChanged 事件,例如,用鍵盤輸入“ABC”會發生三次 TextChanged 事件。TextChanged 事件與 KeyPress 事件有相似之處,有時可互相代替;但也有區別,KeyPress 事件的 e.KeyChar 能提供鍵盤最近一次輸入的字符,因而可獲得擊鍵信息,而程序運行時改變Text也將觸發TextChanged事件,因而它們可適用于不同的場合。
任務中的 TextBox2.Focus(),其作用是將焦點移到 TextBox2,Focus 是移動焦點的方法。當焦點移動時會觸發兩個事件:失去焦點事件Leave()和獲得焦點事件GotFocus()。例如:
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave If Trim(TextBox1.Text) = "" Then TextBox1.Focus() End If End Sub
該事件過程的功能是當TextBox1失去焦點時測試其Text是否為空,如果是空焦點回到該控件。由于KeyPress事件優先于Leave事件,所以驗證該過程前應先將KeyPress事件過程刪除。
自主探究
有一個與 Label 控件相近的控件 LinkLabel,其增加了超鏈接功能,屬性的差異主要為超鏈接方式和顏色的設置。請自行熟悉這些屬性,特別是以Link開頭的屬性。
小試身手
設計一個程序,文本框中只允許輸入數字,輸入其他字符將自動去掉。
任務3 公共控件(2)
任務要求
設計一個輸入學生檔案信息的應用程序界面。
任務解決方案
步驟1:新建窗體
在項目“project1-2”中添加 Windows 窗體,窗體名為 xsda,Text 屬性改為“學生檔案”,并按圖1-27所示將已掌握的控件添加到窗體上。

圖1-27 “學生檔案”界面
步驟2:添加NumericUpDown控件
雙擊工具箱中的 NumericUpDown 控件,調整控件的大小和位置,將 Name 屬性改為NumUD1,設置 Minimum 屬性值為 14,Maximum 屬性值為 24,Increment 屬性值為 1, DecimalPlaces屬性值為0。
步驟3:添加RadioButton控件
雙擊工具箱中的 RadioButton 控件,向窗體添加兩個 RadioButton,分別修改 Text 屬性為“男”、“女”,調整其大小和位置,Name 屬性分別改為 RaBtn1、RaBtn2,修改 RaBtn1的Checked屬性為True。
步驟4:添加CheckBox控件
雙擊工具箱公共控件中的 CheckBox 控件,向窗體添加三個 CheckBox,分別修改它們的Text屬性為“體育”、“音樂”、“集郵”,調整其大小和位置。
步驟5:添加PictureBox控件
在工具箱公共控件中找到 PictureBox 控件,在窗體適當位置用拖曳的方法畫出一個適宜大小的PictureBox,在其屬性窗口中找到Image屬性并打開下層對話框,如圖1-28所示。

圖1-28 “選擇資源”對話框
選中“項目資源文件”,然后單擊“導入”按鈕,在出現的“打開”對話框中找到所需圖片并單擊“打開”按鈕,即可將選擇的圖片導入項目資源文件中,圖 1-28 中的 04.jpg 就是已導入的圖片。單擊“確定”后返回設計窗口,這時PictureBox控件中顯示該圖片,再修改PictureBox控件的SizeMode屬性為ZOOM。
注意觀察資源管理器中多了一個文件夾Resources,其下有一個文件04.jpg。
步驟6:編寫代碼
Dim xb As String="男" '在聲明部分定義
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim ah As String
If CheckBox1.Checked Then ah = ah + "體育"
If CheckBox2.Checked Then ah = ah + "音樂"
If CheckBox3.Checked Then ah = ah + "集郵"
TextBox2.Text="姓名:"+TextBox1.Text+Space(9)+"年齡:"+ Str(NumUD1.Value) + Space(9)
+ "性別:" + xb + Space(9) +"愛好:" + ah
End Sub
Private Sub RaBtn1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RaBtn1.Click
If RaBtn1.Checked Then xb = "男"
End Sub
Private Sub RaBtn2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RaBtn2.Click
If RaBtn2.Checked Then xb = "女"
End Sub
步驟7:測試程序
知識梳理
本任務是一個不完整的學生檔案信息錄入界面,輸入的學生信息需保存于磁盤文件中才能長期使用,這涉及文件知識和數據庫知識,這里僅用一個文本框輸出錄入的數據,以便觀察。在該任務中新出現了4種常用公共控件。
1.NumericUpDown控件
NumericUpDown 控件可稱為數碼器、微調按鈕等,其適用于一定范圍內有規則的數值數據,因為它除了能像文本框一樣接收數據外,還能通過上、下箭頭調節數值大小。
其Minimum屬性是指最小值,Maximum屬性為最大值,設置這兩個屬性后,數據只能在這二者的范圍內變動,變動的幅度由 Increment 屬性決定,如任務中是每次變動 1。當有小數時由DecimalPlaces屬性決定小數位數。
Value屬性返回該控件的當前值。
NumericUpDown 控件比較常用的事件是 ValueChanged(),即當控件值發生變化時觸發該事件。
2.RadioButton和CheckBox控件
RadioButton控件稱為單選按鈕,CheckBox控件稱為復選按鈕。二者很多地方都相同,其主要差異為單選按鈕類似于試卷上的單選題,只能在多個選項中選一個,例如任務中選了“女”選項則“男”選項自動變成未選狀態;而復選按鈕類似于多選題,可任意選擇其中的幾個、全部選項或一個都不選。
它們的屬性中最常用的是 Checked,設計時一組單選按鈕中只能設置其中一個的Checked 為 True 作為默認值,復選按鈕則可以任意設置。代碼中經常通過對 Checked 值的判斷進行程序流程控制,如任務中的多個IF語句。
任務中用到了RadioButton的Click() 事件,CheckBox與此相似。另外還有一個常用事件CheckedChanged(),對于它,應該很熟悉了。
3.PictureBox控件
PictureBox控件稱為圖片框,能用于顯示多種格式的圖形圖像。設計時可通過Image屬性加載圖片,任務中即如此。在圖 1-28所示對話框中選擇資源有兩種方式:一是本地資源,該方式圖片文件保留在原地,實際上是建立了一鏈接;另一種方式是項目資源文件,這種方式將圖片文件復制到Resources文件夾下。兩種方式各有利弊,可根據應用需要選擇。
如果要清除圖片,可在“屬性”窗口中選擇 Image 屬性,并右擊出現在圖像對象名稱左邊的小縮略圖像,選擇“重置”。
圖片框與圖片在大小及高寬比例上的差異可通過 SizeMode 來調節,任務中的 ZOOM為按比例縮放,其他選項的含義請自行探索。
若要在程序運行時加載圖片,可用以下方法:
PictureBox2.Image = Image.FromFile("E:\unit\04.jpg")
小試身手
請分別設計單選題和多選題的界面。
任務4 容器
任務要求
在上一個任務的基礎上增加“政治面貌”信息,并優化布局。
任務分析
一個應用程序界面通常會分成幾個功能區域,在此將窗體拆分為上、下兩個區域,上窗口用于輸入,下窗口用于輸出。
任務要求增加政治面貌,其選項可分為群眾、團員、共產黨員和民主黨派,單選。這時就出現了新問題,窗體上的6個單選按鈕混淆不清,因而需將它們分組。
任務解決方案
步驟1:新建窗體
在項目“project1-2”中添加 Windows 窗體,窗體名為 xsdanew,其他設置與上個任務相似。
步驟2:添加SplitContainer控件
在工具箱“容器”中雙擊 SplitContainer 添加一個 SplitContainer1 控件,該控件由Panel1 和 Panel2 兩部分組成。選中 SplitContainer1(用右鍵快捷菜單較方便),修改Orientation屬性值為Horizontal,界面如圖1-29所示。

圖1-29 SplitContainer水平拆分
步驟3:調節區域大小
將鼠標移到中間分隔線上,當鼠標呈上下雙向箭頭時向上、向下拖曳,調節面板的大小。
步驟4:復制控件
用復制的方法將圖1-27中的控件分別復制到Panel1和Panel2中,其中用于顯示的文本框在Panel2中,其余皆在Panel1中,如圖1-30所示,調整面板的大小和控件位置(要使控件在Panel中居中,同樣可用“格式”菜單中的“在窗體中居中”)。

圖1-30 Panel布局
步驟5:給單選和復選按鈕分組
雙擊工具箱“容器”中的Panel,這時在窗體上增加了一個Panel,其name為Panel1,無顯示文本。選中兩個單選按鈕、剪切,選中 Panel1、粘貼,然后如圖1-30所示、調節它們的位置和大小。3個復選按鈕同樣操作后放置在新建的Panel2中。
步驟6:添加政治面貌選項
添加政治面貌標簽和 Panel3,調整它們的位置和大小。單擊工具箱中的單選按鈕,在Panel3的范圍內拖曳,依次添加4個單選按鈕。如圖1-31所示調節各控件的位置。

圖1-31 最終布局
步驟7:測試程序
運行后可發現所有虛線框都消失了。
能力拓展
性別和政治面貌的選項都是由單選按鈕組成的,試著分析去掉 Panel1、Panel3 前后有何區別。
知識梳理
1.容器
容器是指能包容其他對象的對象,如前面講過的窗體。容器對象從邏輯上封裝其他對象從而形成邏輯層次,在本任務中,窗體是最高層,SplitContainer1 將窗體分為兩個面板Panel1 和 Panel2,這是第二層,第二層上除姓名、年齡標簽和文本框等控件外還有容器Panel1、Panel2和Panel3,它們均處于第三層,Panel1、Panel2和Panel3中的對象則處于第四層。只要將對象移動或添加到容器虛框范圍內,則該對象包容于該容器,將對象移出容器虛框則解除包容關系。
VB.NET 的容器僅從邏輯上封裝其他對象,因而對象的調用無須指定父容器,從而避免了過長的路徑,例如,將前一任務的代碼復制到本任務中就能直接使用。當然需要時也可指定,后面集合中有相關介紹。
除窗體外其他容器都用于控件的分組。對控件分組的原因有三個:第一是為獲得清楚的用戶界面而將相關窗體元素進行可視分組;第二是編程分組,例如對單選按鈕進行分組;最后一個原因是為了在設計時將多個控件作為一個單元來移動。其中編程分組知識將在集合部分學習。
2.與容器有關的屬性及操作
(1)Anchor屬性
該屬性可設置控件綁定到的容器的邊緣并確定控件如何隨其父級一起調整大小。除窗體外,每個控件和容器均有該屬性。
(2)Dock屬性
該屬性定義要綁定到容器的控件邊框,如選擇 Right 則控件的右邊框與父容器的右邊綁定。
(3)在父容器中停靠
操作前首先要選中容器,選中后分組容器的右上角都有一個黑三角,單擊打開,其中有一個選項即為“在父容器中停靠/取消在父容器中停靠”。當控件在父容器中停靠時,容器將充滿整個父容器,該操作取決于Dock屬性是否設置為Fill。
(4)移動控件和調節大小
選中容器后除右上角的黑三角外其左上角有一個十字形箭頭(在父容器中停靠除外),可拖曳移動容器。當然,無論位置或是大小均可通過屬性窗口精確調節。
除以上屬性外還有邊框線等的設置,如任務運行時虛線都消失,分區不明顯,可以將SplitContainer1的BorderStyle屬性改為FixedSingle即能顯示邊框線。
(5)Margin/Padding
Margin 屬性指定該控件與另一控件邊距之間的距離;Padding 屬性指定控件內部的間距,是容器特有的。它們均由上、下、左、右4個參數組成。
3.常用容器
(1)Panel和GroupBox
這二者功能相似,區別是Panel可以有滾動條而無標題,GroupBox 正好相反。
(2)SplitContainer
該控件相當于由兩個 Panel 和一個拆分器組成,通過拆分器可以調節這兩個 Panel 的大小,因而其特有屬性較多,主要如下。
① Orientation屬性
該屬性決定拆分器的方向,當該屬性設置為 Vertical 時,拆分器將垂直放置,從而產生左面板和右面板;當該屬性設置為Horizontal時,將產生上、下面板。
② FixedPanel屬性
該屬性決定調整 SplitContainer 控件大小后,哪個面板將保持原來的大小。
③ IsSplitterFixed屬性
該屬性決定是否可以通過鍵盤或鼠標來移動拆分器。
(3)TabControl
該控件顯示多個選項卡,選項卡中可包含圖片和其他控件。可以使用該選項卡控件來生成多頁對話框,還可以用來創建用于設置一組相關屬性的屬性頁。
該控件的 TabPages 屬性指定選項卡的數目。每一個單獨的選項卡都是一個 TabPage 對象。單擊選項卡時,將為該TabPage對象引發 Click 事件。
PictureBox2.Image = Image.FromFile("E:\unit\04.jpg")
小試身手
繼續完善單選題和多選題界面,增加“已做”和“未做”標記。
模塊3 系統對話框的使用
任務要求
任務1 OpenFileDialog和SaveFileDialog的使用
利用VB.NET創建一個Windows應用程序,用來將一個文本文件或rtf文件中的內容讀取并顯示出來,要求僅能夠讀取指定格式的文件,并能將修改后的文件以相應的格式保存到相應的文件名中。
任務分析
(1)若要打開或保存一個指定的文件,在 Visual Studio 2005 中系統提供了OpenFileDialog和SaveFileDialog兩個控件可以實現。
(2)打開文件后必須有一個控件來接收并顯示其中的內容,可以借助于RichTextBox來完成。
(3)應用程序與用戶之間的交互命令可以借助菜單也可以通過按鈕來實現,在本任務中通過設置3個按鈕“打開”、“保存”、“退出”來實現。
任務單
(1)啟動Visual Studio 2005,新建一個項目;
(2)添加控件,設置控件屬性;
(3)添加控件代碼;
(4)測試程序。
任務解決方案
步驟1:啟動Visual Studio.net,新建一個項目Project1-3
單擊“開始”|“程序”|“Microsoft Visual Studio 2005”|“Microsoft Visual Studio 2005”命令菜單,執行“文件”|“新建項目”命令,在 “新建項目”對話框的“項目類型”列表中選擇“Visual Basic”,在“模板”列表中選擇“Windows 應用程序”,名稱為“Project1-3”、位置為E:\unit1。
步驟2:添加控件,設置控件屬性
在 Form1 窗體上添加一個 RichTextBox 控件、一個 OpenFileDialog 控件、一個SaveFileDialog控件、三個Button控件,其中OpenFileDialog和SaveFileDialog控件在系統托盤中顯示。修改 Form1 的 Text 屬性為“小小記事本---文檔 1”,如圖1-32所示。將其余控件的屬性按表1-2進行設置。
表1-2 控件的屬性


圖1-32 Form界面
步驟3:添加控件代碼
(1)雙擊“退出”按鈕,添加代碼。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Application.Exit() End Sub
(2)雙擊“打開”按鈕,添加代碼。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click OpenFileDialog1.Title = "打開" SaveFileDialog1.FileName = "" OpenFileDialog1.Filter = "rtf(*.rtf)|*.rtf|txt(*.txt)|*.txt" OpenFileDialog1.DefaultExt = "*.rtf" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK And OpenFileDialog1. FileName.Length > 0 Then DisplayText.LoadFile(OpenFileDialog1.FileName) End If End Sub
(3)雙擊“保存”按鈕,添加代碼。
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click SaveFileDialog1.Title = "保存" SaveFileDialog1.FileName = "文檔1.rtf" SaveFileDialog1.Filter = "rtf(*.rtf)|*.rtf|txt(*.txt)|*.txt" SaveFileDialog1.DefaultExt = "*.rtf" If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK And SaveFileDialog1. FileName.Length > 0 Then DisplayText.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.RichText) End If
步驟4:測試程序
執行菜單命令“調試”|“啟動”或按 F5 鍵測試該程序。單擊“打開”按鈕顯示打開文件對話框,然后可以選擇一個txt或rtf格式的文件,打開后文件顯示在RichTextBox中,當單擊“保存”按鈕時,先顯示另存為文件對話框將RichTextBox中的內容保存在給定的一個文件名中。單擊“退出”按鈕,退出應用程序。
能力拓展
該項目中打開和保存的文檔只能是 txt 或 rtf 格式,那么可以打開其他類型的文檔嗎?可以的話代碼需要如何修改?
自主探究
(1)如果指定打開的文件類型是.doc、.txt、.rtf 或所有文件中的一種時,可以通過什么屬性來進行設置?如何對該屬性賦值?
(2)在 OpenFileDialog 對話框打開后,用戶如何知道打開的文件名?是通過什么屬性實現的?
(3)當用戶調用了一個 ShowDialog()方法在打開或保存的對話框中單擊了“打開”或“保存”按鈕時,程序代碼中如何對此進行判斷?DialogResult 是一個什么樣的數據類型?它提供了哪些值?
知識梳理
1.CommonDialog類
對話框是一個在另一個窗口中顯示的窗口,通過對話框可以讓用戶與應用程序隨時進行信息交互。通用對話框常常用于從用戶處獲取一般性的信息,類似于 Windows 中經常用到的一些標準的對話框,比如文件的打開、保存及打印等。.NET 提供了通用對話框CommonDialog 類,在用戶開發的應用程序中可以通過這些通用對話框類來快速實現特殊對話框的功能。
CommanDialog 是對話框的基類,其中每個類用于提供特定的功能。所有對話框的使用方式都是類似的,其方法常用的是 ShowDialog()和 Reset(),ShowDialog()用來顯示對話框,并返回一個DialogResult實例;而Reset()則把對話框的屬性設為默認值。
CommonDialog類中包括以下幾個常見的類:
(1)FileDialog
(2)ColorDialog
(3)FontDialog
(4)PrintDialog
(5)PrintPreviewDialog
FileDialog 類用于處理文件操作,例如打開或保存一個文件。FileDialog 類是由OpenFileDialog 類和 SaveFlieDialog 類組成的,它們分別對應 OpenFileDialog 對話框和SaveFlieDialog 對話框。在 VB.NET 中,只有 OpenFileDialog 和 SaveFileDialog 對話框控件,而沒有FileDialog控件。
2.OpenFileDialog類
(1)OpenFileDialog類的使用
如果用戶需要一個打開文件的對話框,只要從工具箱中拖放一個OpenFileDialog控件即可,此時該控件放在窗體的系統托盤中,與其他控件不同的一點是該控件在運行時不會自動顯示,它需要通過調用ShowDialog()方法來顯示。
例如:向窗體拖放一個控件OpenFileDialog1,然后在Button1按鈕的單擊事件處理程序中通過如下代碼來實現在窗體中單擊Button1按鈕后顯示一個打開文件的對話框:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click OpenFileDialog1.ShowDialog() End Sub
OpenFileDialog 類提供了標準的“打開”對話框,該對話框由 Windows 提供,它主要用于向用戶提供文件選擇功能。OpenFileDialog類利用ShowDialog()方法來顯示對話框,用戶選擇的參數可以通過對話框控件的相關屬性來傳遞。OpenFileDialog 類的常用屬性如表1-3所示。
表1-3 OpenFileDialog類的常用屬性

在打開文件對話框中,用戶可以設置需要打開的文件類型,也可以指定默認的文件類型。屬性 Filter 用于指明需要打開的文件類型,FilterIndex 屬性通過索引號來指明默認的文件類型。如下示例指明了打開該文件的三種類型及默認的文件類型為*.rtf:
OpenFileDialog1.Filter="Text documents (*.txt)|*.txt|rtf文件(*.rtf)|*.rtf|All Files |*.*"; OpenFileDialog1.FilterIndex=2
篩選器可以顯示多個部分,每個部分用“|”分隔符分開,且每個部分都需要由兩個字符串組成,第一個字符串定義在列表中顯示的文本,如 Text documents (*.txt)、rtf 文件(*.rtf)、All Files,第二個字符串用于指定要在對話框中顯示的文件擴展名,如*.txt、*.rtf 、*.*,且篩選器的前、后都不允許有空格。
當程序中通過 DialogShow()方法調用一個對話框后,該方法返回一個 DialogResult 實例,其值有None、No、OK、Abort、Cancel、Ignore、Retry、Yes,默認值是None。根據單擊的按鈕是“確定”還是“取消”,對話框將返回 DialogResult.OK 或 DialogResult.Cancel。如果單擊了“確定”按鈕,則通過對話框的 FileName 屬性返回文件的文件名,單擊了“取消”按鈕,則 FileName 屬性值是一個空字符串。如果選擇了“打開”按鈕,選中的文件名通過FileName屬性返回,當MultiSelect屬性設置為True時,表示用戶可以選擇多個文件,此時FileName返回一個由所有選中文件的文件名組成的字符串數組,但FileName屬性所包含的文件順序與選中它們的順序相反,即 FileName 數組中的第一個字符串是最后選中的一個文件的文件名。
(2)RichTextBox控件與文件的讀寫
.NET 提供了兩個方法,即 LoadFile()與 SaveFile()方法,LoadFile()方法用于將文件中的內容讀取出來放入RichTextBox中,SaveFile()方法用于將RichTextBox控件中的內容寫入文件。簡單用法如下:
RichTextBox1.LoadFile(OpenFileDialog1.FileName) RichTextBox1.SaveFile(SaveFileDialog1.FileName)
其中,OpenFileDialog1.FileName 指明要加載到控件中的文件名和路徑,文件可以是 rtf格式或標準ASCII格式的文本文件。
說明:
FileName屬性的值包含文件所在路徑和文件名,即文件的絕對路徑。
3.SaveFileDialog類
SaveFileDialog類提供了標準的“保存”對話框,它也是由Windows提供的。使用這個對話框可以向用戶提供保存文件的功能。SaveFileDialog 類的使用同 OpenFileDiaolg 類,只是所用的屬性稍有不同,常用的屬性如表1-4所示。
表1-4 SaveFileDialog類的常用屬性

小試身手
試著編寫一個 VB.NET 應用程序,要求能夠將選定的文件內容讀出來放入一個RichTextBox控件內,文件可以是txt文件或rtf文件,并且在窗體的標題欄中顯示所打開文件的詳細路徑。效果如圖1-33所示。

圖1-33 練習
任務2 ColorDialog和FontDialog的使用
任務要求
項目 Project1-3 能夠讀寫指定格式的某個文件,但是文檔中文字的格式比較單一,為了使文字的格式更加豐富,請修改該項目,增加文字設置和顏色設置的功能,使文檔更加美觀。
任務分析
(1)在Visual Studio 2005中顏色的設置可以用ColorDialog控件實現;
(2)字體的設置可以用FontDialog控件實現。
任務單
(1)打開項目Project1-3,添加控件,設置控件屬性;
(2)添加控件代碼;
(3)測試程序。
任務解決方案
步驟1:打開項目Project1-3,添加控件,設置控件屬性
啟動 Visual Studio 2005,打開項目 Project1-3,然后添加兩個 Button 控件,一個ColorDialog控件,一個FontDialog控件,如圖1-34所示,并將各控件的屬性按表1-35所示進行設置。

圖1-34 應用程序界面
表1-5 新增控件的屬性

步驟2:添加控件代碼
(1)雙擊“Font”按鈕,添加代碼。
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click FontDialog1.ShowColor = True FontDialog1.ShowDialog() DisplayText.ForeColor = FontDialog1.Color DisplayText.Font = FontDialog1.Font End Sub
(2)雙擊“Color”按鈕,添加代碼。
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click ColorDialog1.AllowFullOpen = True ColorDialog1.SolidColorOnly = False ColorDialog1.ShowDialog() DisplayText.ForeColor = ColorDialog1.Color End Sub
步驟3:測試程序
執行菜單命令“調試”|“啟動”或按 F5 鍵測試該程序。當單擊“字體”按鈕時會彈出字體設置對話框,然后對打開的一個 rtf 格式文件中的文字進行字體的設置;當單擊“顏色”按鈕時會彈出顏色設置對話框,通過這個對話框可以設置打開文件中字體的顏色。
能力拓展
項目中的字體和顏色的設置都是以全文檔的方式進行的,能不能單獨設置一部分文字的字體和顏色?如果要修改,則代碼如何修改?
自主探究
(1)該項目中的字體設置也有顏色的設置,考慮到已經有顏色設置的按鈕了,能不能將字體設置中包含的顏色設置的功能去掉呢?如果可以的話,代碼要如何修改?
(2)在對文本設置字體時,字體的設置信息一般包括幾部分?分別是什么?
(3)如果用戶還需要設置文本的背景色,該如何進行?
知識梳理
1.FontDialog控件
FontDialog 類的使用可以方便用戶選擇字體,允許用戶改變字體、樣式、字號和字體的顏色。其用法與前兩個對話框相似,通過 ShowDialog()方法顯示 FontDialog 對話框,單擊“確定”按鈕后對話框返回一個值,即 DialogResult.OK,利用 Font 屬性可以讀取選中的字體,如果將該屬性值送給相應控件的 Font 屬性,則可以實現按要求設置對象的字體。其常用的屬性如表1-6所示。
表1-6 FontDialog控件的常用屬性

2.ColorDialog控件
ColorDialog 類提供允許用戶從調色板選擇顏色以及把顏色添加到調色板的功能,控件的常用屬性如表1-7所示。
表1-7 ColorDialog控件的常用屬性

小試身手
試著編寫一個 VB.NET 應用程序,借助通用對話框通過不同的按鈕實現文本框中文本的顏色和字體的設置,同時還能將 RichTextBox 中的內容存入一個 rtf 格式的文件中。在RichTextBox 中的內容沒有保存過時,標題欄顯示“小小記事本---文檔 1.rtf”,如果保存過,則窗體的標題欄顯示“小小記事本---文件的文件名”,界面如圖1-35所示。

圖1-35 練習
任務3 PrintDialog和PrintPreviewDialog的使用
任務要求
一個應用程序的功能大多數都包含打印與打印預覽的功能。當一個文檔編輯結束以后還需要打印出來,一般來說,打印之前為了確保打印的質量還需要預覽一下,請設計一個應用程序,實現簡單的打印及打印預覽功能。
任務分析
(1)在Visual Studio 2005中打印預覽功能可以用PrintPreviewDialog控件實現;
(2)打印功能可以用PrintDialog控件實現。
任務單
(1)打開項目,添加控件,設置控件屬性;
(2)添加控件代碼;
(3)測試程序。
任務解決方案
步驟1:打開項目Project1-3,添加控件,設置控件屬性
啟動 Visual Studio 2005,打開項目 Project1-3,然后添加兩個 Button 控件、一個PrintDialog 控件、一個 PrintPreviewDialog 控件和一個 PrintDocument 控件,如圖1-36所示,按表1-8設置控件屬性。
表1-8 新增控件的屬性


圖1-36 應用程序界面
步驟2:添加控件代碼
(1)雙擊“打印預覽”按鈕,添加代碼。
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub
(2)雙擊“打印”按鈕,添加代碼。
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click PrintDialog1.Document = PrintDocument1 PrintDialog1.ShowDialog() End Sub
(3)雙擊“PrintDocument1”控件,添加 PrintPage()事件處理程序代碼,該方法由系統通過PrintDocument1自動調用。
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System. Drawing. Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage '通過DrawString()方法可以使用字號為28個像素點的Arial字體、加粗、紅色畫筆,在坐標 (30,20)的位置開始輸出文本內容;Graphics類的方法可以在打印紙張上繪制出有關的文本內容; e.Graphics.DrawString(DisplayText.Text, New Font("Arial", 28, FontStyle. Underline), Brushes. Red, 30, 20) End Sub
步驟3:測試程序
執行菜單命令“調試”|“啟動”或按 F5 鍵測試該程序。單擊“打印預覽”按鈕彈出預覽窗口,RichTextBox 中的內容即會在窗口中顯示出來,如圖1-37所示,可查看本文檔打印的效果。

圖1-37 縮放25%后的預覽效果
說明:
(1)如果要出現預覽的效果,計算機必須安裝打印機的驅動程序。
(2)由于打印功能比較復雜,這里僅介紹最簡單的打印文本的方法,且在本任務中不能對字體的大小、顏色等進行控制,只是通過 Graphics.DrawString()方法預覽固定的字體大小、顏色等來顯示相應的信息。
能力拓展
一般來說,在打印之前還需要設置紙張的大小,上、下、左、右頁邊距,以及紙張是橫排還是豎排,那么在VB.NET中是如何進行頁面設置的呢?
自主探究
(1)打印與打印預覽在使用上有什么異同?
(2)在應用程序中能夠實現打印與打印預覽,其前提條件是什么?
知識梳理
在 Visual Studio 2005 中實現打印預覽時需要用到兩個類,即 PrintDocument 類和PrintPreviewDialog類,如果實現打印則需要使用PrintDocument類和PrintDialog類,它們分別對應工具箱中的3 個控件,其中PrintDocument控件是一個最重要的控件,它用于設置要打印或預覽內容的屬性,通過PrintDocument控件的PrintPage事件來指定需要打印或預覽的內容。
在 Visual Studio 2005 中要調用默認的打印對話框或打印預覽對話框,一個簡單的方法是通過拖放一個 PrintDialog 控件或 PrintPreviewDialog 控件,以及一個 PrintDocument 控件到設計窗體中來實現。與通用對話框的使用相似,添加后的控件顯示在系統托盤中,當運行應用程序時,需要將對話框顯示在窗體中,可通過 ShowDialog()方法來實現,通過DialogResult獲取用戶在打印對話框中單擊的按鈕,如果要使用打印功能,則在Windows應用程序中調用Print()方法即可進行打印。
1.PrintPreviewDialog類
在實際打印之前,可以使用Windows提供的PrintPreviewDialog控件預覽文檔,該控件提供了一個對話框,該控件還允許用戶打印、放大、設置頁面布局選項和在頁面間切換、關閉對話框。
要想實現打印預覽,需要將 PrintPreviewDialog 控件的 Document 屬性設置為某個PrintDocument對象,用來表示將要打印的文檔。如:
PrintPreviewDialog1. Document=PrintDocument1
打印預覽對話框也可以看成是一個窗體,因為它擁有作為一個窗體所擁有的所有屬性。PrintPreviewDialog類的常用屬性如表1-9所示。
表1-9 PrintPreviewDialog類的常用屬性

2.PrintDialog類
PrintDialog類提供標準的Print對話框,由Windows提供。使用這個對話框處理與打印有關的操作,例如指定打印機或者打印的頁。PrintDialog類使用戶可以打印一個文件的所有頁、打印指定規范的頁,或者打印選定的區域。使用這個類的 ShowDialog 方法可顯示 Print對話框,可以操作這個類的屬性來指定單個打印工作的設置或者一臺打印機的設置,其常用屬性如表1-10所示。
表1-10 PrintDialog類的常用屬性

小試身手
如果有如圖1-38所示Form1窗體及“Preview”按鈕事件處理程序,請完善應用程序,實現對RichTextBox中的內容進行預覽。

圖1-38 Form1窗體
“Preview”按鈕事件處理程序:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim PrintDocument1 As System.Drawing.Printing.PrintDocument = New System.Drawing. Printing. PrintDocument() Dim PrintPreviewDialog1 As PrintPreviewDialog = New PrintPreviewDialog() PrintPreviewDialog1.MaximizeBox = False PrintPreviewDialog1.Text = "打印預覽窗口" PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub
復習與提示

- Hands-On Internet of Things with MQTT
- 精通特征工程
- Windows環境下32位匯編語言程序設計
- 自動控制理論(非自動化專業)
- The Python Workshop
- 內模控制及其應用
- 運動控制系統
- Ansible 2 Cloud Automation Cookbook
- HBase Essentials
- Moodle 2.0 Course Conversion(Second Edition)
- Flash CS5二維動畫設計與制作
- 基于Quartus Ⅱ的數字系統Verilog HDL設計實例詳解
- CPLD/FPGA技術應用
- 數據庫技術:Access 2003 計算機網絡技術
- 局域網應用一點通