Yuan-Yu Tsai 蔡淵裕 辦公室: HB61
2 CHAPTER 5 表單與控制項的使用
3 WINDOWS 程式設計基本概念
建立 Windows 應用程式- 建立專案 4 專案名稱
表單與屬性視窗 5 工具箱:提供所有可 用的 Windows 控制項 表單,可以在表單 上佈置控制項,以 完成系統的功能 方案總管:管理專 案中的每一個檔案 屬性視窗:檢視 或修改物件屬性
屬性視窗的操作 6 屬性意義的文字說明 表單和控制項都是一種 元件,這邊顯示出我們 點選的元件的名稱 每個屬性都有 其意義 分類 字母順序
以屬性改變表單狀態 7
表單的常用屬性 8 常用屬性意義說明 BackColor 取得或設定表單的背景顏色 BackgroundImage 取得或設定表單的背景影像 ( 可以透過設定這個屬性讓表單的 背景是一張圖片 ) FormBorderStyle 取得或設定表單的框線樣式 ( 可以設定表單是否可以放大、縮 小 … 等 ) Icon 取得或設定表單的圖示 ( 表單在標題列左上角的圖示 ) Name 取得或設定表單的名稱 ( 用來辨別每一個表單,就是表單的名 字 ) Opacity 取得或設定表單的透明度等級 ( 其數值可以是從 0 到 1 的任何 數字 ) ShowIcon 取得或設定值 (True/False) ,指出表單的圖示是否會顯示在 表單的標題列中 ShowInTaskbar 取得或設定值 (True/False) ,指出表單是否顯示在 Windows 工作列中
表單的常用屬性 9 常用屬性意義說明 StartPosition 取得或設定表單在執行階段中的開始位置 TopMost 取得或設定值 (True/False) ,該值代表是否要將此表單顯示成 最上層的表單。一旦設為最上層顯示,無論如何都不會被其他 表單擋住 Visible 取得或設定值 (True/False) ,指出是否顯示表單 WindowState 取得或設定表單的視窗狀態 ( 放到最大、縮到最小、和一般 )
控制項的使用 10 拖曳控制項 到表單上 在表單上『 Double-Click 』 以切換到程式設計模式上
11 輸入程式碼 儲存表單與程式 碼之檔案名稱 輸入程式碼
12 執行 透過控制項的 事件來運作
事件驅動程式設計的觀念 Windows 程式設計是以『事件驅動 (Event-Driven) 』的 方式來運作 在畫面上佈置一個按鈕,並在這個按鈕裡面撰寫程式碼,當 使用者按下這個按鈕時,就執行該按鈕裡面所撰寫的程式碼 使用者按下滑鼠按鈕的動作,便稱之為『事件』,當使用者 按下佈置在表單上的按鈕,就會觸發按鈕的 Click 事件 按鈕控制項之事件 『 Click 』:滑鼠被按下時觸發的事件 『 MouseMove 』:滑鼠從按鈕上移動過去時觸發的事件 『 DoubleClick 』:使用者在滑鼠按鈕上 Double-Click 時觸發 的事件 程式碼即藏身在這種種事件的背後,每觸發一個事件, 就執行一段相對應的程式碼,以完成我們想要的功能 13
撰寫控制項 ( 以及表單 ) 事件的方式 14 先點選控制項名稱 再點選事件
控制項的屬性、事件、方法 15 意義 屬性 (Property) 透過屬性可以設定控制項的狀態,例 如顯示在其中 ( 或其上 ) 的文字、控制 項的背景顏色、或是其他控制項的 『特徵』 事件 (Event) 我們可以藉由撰寫控制項的事件程式 碼,來處理控制項所發生的事件,這 些事件可能是使用者所造成的 ( 例如按 下按鈕 ) ,或是系統產生的 ( 例如下載 完一個網路上的檔案 - 這也是一種事件 ) 方法 (Method) 方法則是程式碼可以對控制項所進行 的『動作』
控制項的屬性、事件、方法 16 EX : CH05-03 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.TextBox1.Focus( ) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.TextBox2.Focus( ) End Sub Focus :駐點,當鍵盤有輸入的動作 時,要由哪一個控制項來處理該動作 ( 意同要作用在哪一個控制項上 )
17 WINDOWS 表單的使用與特性
加入第二張表單 18
顯示第二張表單 EX : CH05-04 Private Sub Button1_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.Show( ) End Sub 19 在第一個表單上佈置了一個按 鈕,並撰寫程式碼,可透過 Show( ) 方法來顯示一張表單
表單的常用事件 20 EX : Form1_Load 事件 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = " 第一張表單...“ End Sub Me 就是代表『表單』本身 可以透過 Form_Load 事件 進行表單的初始化設定
表單的常用事件 21 EX : Form1_FormClosing 事件 Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing If MsgBox(" 您確定要關閉表單 ?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) = MsgBoxResult.Yes Then e.Cancel = False Else e.Cancel = True End If End Sub 表示要讓 MsgBox 顯示 Yes /No 按鈕,並出現問號的符 號 這段程式碼發生在表單關 閉之前,因此按下關閉表 單的按鈕之後,在關閉之 前會出現此提示訊息 參數 e 的內容會依照不同的 控制項和事件會有所不同
表單的事件 22 當一張表單被啟動之後,該表單上的所有控制項, 都會進入待命狀態,不管是使用者透過鍵盤滑鼠對表 單或是控制項進行了動作,而產生了事件,或是控制 項自發性的產生了一些事件,都會有相對應的事件程 式碼被呼叫 一但發生了事件,系統就會去找對應的事件處理 程式碼,並執行相關動作,動作執行完畢之後,又回 復到待命狀態,等待使用者的按鍵或是滑鼠 當在系統中同時建立並且顯示了兩張獨立的表單 時,這兩張表單就會有進入各自的待命狀態,各自的 事件也彼此獨立互不干擾。同樣的如果您一次撰寫了 兩個程式,並且同時執行,每一個獨立程式都會有著 各自的事件,彼此之間也互不干擾,就構成了 Windows 事件的多工運作模式
表單的常用事件 23 常用事件意義 Load 發生在表單第一次顯示之前 ( 多用於表單的初始化設定 ) Activated 發生於表單以程式碼或由使用者啟動時 FormClosing 發生於表單關閉之前 FormClosed 發生於表單關閉之後 ( 多半用於程式最後的處理動作,例如釋放 記憶體、關閉檔案 …) KeyDown 當按下按鍵時 ( 多半用於捕捉表單上的鍵盤動作,欲使用此事件 KeyPreview 屬性須先設為 True) KeyPress 當按下按鍵時 ( 欲使用此事件 KeyPreview 屬性須先設為 True) KeyUp 當放開按鍵時 ( 欲使用此事件 KeyPreview 屬性須先設為 True) LostFocus 發生於表單失去駐點時 ResizeBegin 發生於表單進入調整大小模式前 ResizeEnd 發生於表單結束調整大小模式後 ( 多半用於在表單調整過大小之 後,調整表單上的控制項位置 ) Paint 發生於重繪控制項時 ( 多用於有在表單上繪圖,需要更新繪圖內 容時 )
表單強制回應特性 24 當這個畫面出現時,除非您先 關閉這個畫面,否則底下的 IE 瀏覽器則無法操作,此為『強 制回應』視窗
表單強制回應特性 25 EX : Ch05-06 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.ShowDialog( ) End Sub
表單樣式 可以透過表單的「 FormBorderStyle 」屬性 設定,來決定表單要顯示出來的樣式 相關設定參數請參考課本第 5-30 頁 26
表單的特殊功能 27 EX : Ch05-06 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.ShowInTaskbar = Not Me.ShowInTaskbar Me.Label1.Text = Me.ShowInTaskbar End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Opacity = Val(Me.TextBox1.Text) / 100 End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Me.TopMost = Not Me.TopMost Me.Label2.Text = Me.TopMost End Sub 設定表單是否為最上層顯示 設定表單的透明度百分比 設定是否在工作列上顯 示表單名稱
28
29 控制項的使用方式
控制項的佈置與對齊 30 在設計階段,可以輕易的將 控制項拖曳到表單上,而拖曳到 表單上之後,當接近另一個控制 項時,會出現底下這樣的對齊線 條這些對齊線可以讓我們輕鬆的 把控制項對齊到另一個控制項的 邊界上,對於控制項的佈置有相 當大的幫助 或是同時選取若干個控制項並藉由「檢視 → 工具列 → 配置」來進行控 制項佈置設定
控制項的錨定 (Anchor) 31
控制項的錨定 (Anchor) 32
控制項的 Dock 33
通用控制項簡介 34
按鈕 (Button) 35 基本功能 提供一個可以讓使用者按下的『按鈕』,使用者 可以藉著按下這個按鈕,執行特定的功能或動作 使用時機 當您希望程式中的某些功能,在使用者按下按鈕 之後發生或是執行時,可以利用 Button 控制項來 完成 外觀
36 常用屬性值的型別 / 範圍值說明 TextString 預設為 button 設定控制項上的文字 Image System.Drawin g.Image none 設定控制項上的圖示 EnabledBooleanTrue 是否可用 ( 設為 False 時, 控制項為不可點選 ) VisibleBooleanTrue 是否隱藏 ( 設為 False 時, 控制項為隱藏狀態 ) 常用事件說明 Click 按下 Button 後所觸發的事件。 常用方法說明 Focus( ) 將控制項設為目前駐點 (Focus)
37 EX : CH05-10 'Button1_Click 事件 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim inputName As String ' 當 Button1_Click 事件發生,會跑出一個需要登入的視窗; 'inputName 為字串變數,會記錄使用者輸入的名字。 inputName = InputBox(" 請輸入姓名: ") ' 判斷 inputName 有沒有等於 'VB' , ' 等於 'VB' 才認為登入的人是合法使用者 If inputName = "VB" Then MsgBox(" 歡迎光臨 !VB!") Else MsgBox(" 錯誤的使用者 ") End If End Sub
38
標籤 (Label) 39 基本功能 顯示文字 使用時機 當您要讓文字顯示在表單上,且希望使用者不可 以更改時。大多數輸入方塊 (TextBox) 前的提示文 字,都是透過 Label 來完成的 外觀
40 常用屬性值的型別 / 範圍值說明 TextString 預設為控制 項本身名稱 設定出現在 Label 中 的文字。 Image System.Drawing.I mage N/A 設定 Label 上的圖示 EnabledBooleanTrue 是否可用 ( 設為 False 時,呈現灰階 狀態 ) VisibleBooleanTrue 是否隱藏 ( 設為 False 時,控制項為 隱藏狀態 ) 常用事件說明 Click 按下 Label 後所觸發的事件。
41 EX : Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Label1.Text = " 請輸入姓名: " End Sub 1. 直接透過 Label 的 Text 屬性來設定要顯示的文字 2. 透過程式碼,直接修改 Label 的「 Text 」屬性改變顯示的 文字
鏈結標籤 (LinkLabel) 42 基本功能 提供有連結功能且可以點選的 Label 控制項。 使用時機 當您希望程式透過類似超連結的機制,開啟其他 視窗、或是執行其他功能時。 外觀
43 常用屬性值的型別 / 範圍值說明 TextString 預設為 button 設定控制項顯示的文字 LinkVisitedBoolean 預設為 False 設定當連結被按過以後,是否 需要改變顏色。 VisitedLink Color System.Drawing.Color N/A 設定連結按過以後呈現的顏色。 EnabledBooleanTrue 按鈕是否可用 ( 設為 False 時,按 紐為不可點選 ) VisibleBooleanTrue 按鈕是否隱藏 ( 設為 False 時,按 紐為隱藏狀態 ) 常用事件說明 LinkClicked 當 LinkLabel 被點選時。 常用方法說明 Focus( ) 將控制項設為目前駐點 (Focus) 。
44 EX : Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked ' 當網頁被瀏覽過,更改連結的顏色 LinkLabel1.LinkVisited = True ' 當您已經將不同類型的檔案與系統上安裝的應用程式建立起關聯時, ' 可以用 Process.Start( 路徑 ) 的方法,直接開啟應用程式 Process.Start(" End Sub
文字盒 (Textbox) 45 基本功能 提供一個讓使用者可以輸入資料的文字方塊 使用時機 當您希望藉由輸入資料進行不同處理或運算時 外觀
46 常用屬性值的型別 / 範圍值說明 TextString 預設為控制項本身 名稱 設定控制項中顯示 的文字 MultilineBoolean 預設為 False TextBox 是否可以多 行顯示。 ScrollBars 列舉型別 (Both/ Horizontal/ None/ Vertical) 預設為 None 當 TextBox 多行顯示 時的捲軸樣式 ( 常與 Multiline 屬性配合 ) EnabledBooleanTrue 按鈕是否可用 ( 設為 False 時,按鈕為不 可點選 ) VisibleBooleanTrue 按鈕是否隱藏 ( 設為 False 時,按鈕為隱 藏狀態 ) 常用事件說明 TextChanged 當使用者在 TextBox 中鍵入每一個按鍵之後會自動觸發的事件。 Click 在控制項上按下滑鼠後所觸發的事件。 常用方法說明 SelectAll( ) 將控制項中的文字設為被選取的狀態
47 EX : Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click MsgBox(Me.TextBox1.Text) End Sub
Exercise 請利用上述之各種控制項製作出簡易的計 算機 48
49