590 likes | 783 Views
視窗程式設計 第十四章 進階輸出入元件. 鄧姚文 http://www.ywdeng.idv.tw. 大綱. 核取方塊 (CheckBox) 選項鈕 (RadioBut ton) 群組方塊 (GroupBox) 列表盒 (ListBox) 下拉式清單 (Combobox) 水平捲軸 (HScrollBar) 與垂直捲軸 (VScrollBar) 功能表 (MainMenu) 與快速鍵功能表 (Context Menu) 圖片盒 (Picturebox) RichTextBox 對話框 Timer DateTimePicker MonthCalendar.
E N D
視窗程式設計第十四章 進階輸出入元件 鄧姚文 http://www.ywdeng.idv.tw
大綱 • 核取方塊(CheckBox) • 選項鈕(RadioBut ton) • 群組方塊(GroupBox) • 列表盒(ListBox) • 下拉式清單(Combobox) • 水平捲軸(HScrollBar) 與垂直捲軸(VScrollBar) • 功能表(MainMenu) 與快速鍵功能表(Context Menu) • 圖片盒(Picturebox) • RichTextBox • 對話框 • Timer • DateTimePicker • MonthCalendar
核取方塊(CheckBox) • 應用:複選題 • 重要屬性如下: • Checked 屬性 是否被勾選 • Text 屬性 選項內的文字
字型(Font) • 透過各個控制項的 Font 屬性,設定控制項內的字型 • Font 建構子: Font(string fontFaminy, float emSize, FontStyle style) • FontStyle 樣式 • FontStyle.Regular 正常 • FontStyle.Bold 粗體字 • FontStyle.Itlic 斜體字 • FontStyle.Strikeout 刪除線 • FontStyle.Underline 畫底線
練習 • 寫一個字型測試程式,以 CheckBox 測試各種 FontStyle • 提示:若 A 為一個位元變數 • A | 1 = 1 (OR) • A & 0 = 0 (AND) • A ^ 1 = ~A (XOR)
1 4 - 2 選項鈕(RadioButton) • 應用:單選題 • 同一表單上僅能有一個 RadioButton 的 Checked=True • 重要屬性 • Checked該選項是否被選中 • Text 選項內的文字
練習 • 以 RadioButton 為先前的字型測試範例加上字型名稱(Font Family)的選項
群組方塊(GroupBox) • 將同表單上的元件分成不同的群組 • 同一表單上僅能有一個 RadioButton 的 Checked=True,以不同的 GroupBox 區隔各組 RadioButton
練習 • 以 RadioButton 配合 GroupBox,為先前的字型測試程式加入字型大小(emSize)選項
列表盒(ListBox) • ListBox 以清單的方式列出所有的選項,供使用者選擇,避免人為輸入錯誤 • 重要屬性: • Items[] 各個選項 • SelectedIndex 被選中的選項索引值 • SelectedItem 被選中的項目
範例14-4a • 試設計三個列表盒於表單:左邊放入藥品名稱、中間放入重量右邊放入患者所需處方藥品。 • 當使用者依序按一下藥品名稱、重量後, 右邊列表盒即輸出藥品及重量; 當使用者按一下右邊處方藥品, 即應刪除該項指定藥品。
下拉式清單(ComboBox) • ComboBox 是一種結合ListBox 與Edit 的輸入控制項, 使用者於ComboBox中所點選的項目, 可以直接放入Text 屬性, 因此可以簡化程式的撰寫, 但ComboBox 一次只能點選一個項目, 因此特別適用一次只點選一個項目的場合。其待選項目(Items) 亦可使用屬性視窗或撰寫程式設定, 其方法同上一小節的ListBox。
練習 • 修改字型測試範例,使用 ComboBox 選擇體的顏色。
水平捲軸(HScrollBar) 與垂直捲軸(VScrollBar) • 使用捲軸控制輸出的大小 • HScrollBar 水平放置 • VScrollBar 垂直放置都相同。
HScrollBar & VScrollBar 常用屬性 Value 屬性 取得或設定捲軸的值。 Maximum 屬性 捲軸可移動的最大值。 Minimum 屬性 捲軸可移動的最小值
HScrollBar & VScrollBar 常用屬性 LargeChange 屬性 當使用者用滑鼠按一下捲軸盒至捲軸端點箭頭鈕之間的區域時, 可移動捲軸, 而此移動的大小, 稱為LargeChange 。 SmallChange 屬性 當使用者用滑鼠按一下捲軸盒至捲軸兩端的箭頭鈕時, 可令捲軸盒移動, 而此移動的大小, 稱為SmallChange 。
HScrollBar & VScrollBar 事件 ValueChanged 事件 當捲軸值改變時, 產生此事件。 Scroll 事件 當捲軸值改變時, 產生此事件。
練習 • 顯示水平捲軸與文字值 • 最小值 0 • 最大值 100 • 當使用者移動捲軸時,以文字方塊顯示其值 • 當使用者改變文字方塊內的數值時,改變捲軸的值。
練習 • 以三個捲軸分別代表光的三原色:紅、綠、藍(R 、G、B),以一個 Label 顯示調色後的結果,當使用者調整捲軸值時,改變顏色 • 紅綠藍三原色的值最大 255,最小 0 • 調色方式: • Label1.BackColor = Color.FromArgb(int red, int green, int blue)
功能表(MainMenu) • 所有Windows 的應用程式均有功能表選單, 提供功能選單(例如File 、Edit 及Help) 及功能選項(如File 選單的New、Open 及Save 等選項), C#的MainMenu 即是協助使用者製作此功能表的物件。以下範例即是示範功能表的使用。
範例14-7a • 請以MainMenu 重作範例14-3a 的字型大小及邊界樣式設定。
快速鍵功能表(ContextMenu) • 當使用者按一下滑鼠右鍵時所出現的功能表, 稱為快速鍵功能表(ContextMenu)。其製作與編輯方式均同MainMenu, 唯一要注意的是ContextMenu製作完成之後, 要將啟動ContextMenu 物件的ContextMenu 屬性點選為ContextMenu, 請看以下範例說明。
範例14-7b • 製作快速鍵功能表。
1 4 - 8 圖片盒(Picturebox) PictureBox 元件可用來展示Bitbmps (*.bmp)、Icons (*.ico)、EnhancedMetafiles (*.emf)、Metafiles (*.wmf) 及JPEG (*.jpg 或*.jpeg) 等圖片, 其常用屬性如下: • BorderStyle 屬性 PictureBox 外框的樣式, 共有3 種型式, 分別是None 、FixedSingle 及Fixed3D, 讀者可自行測試, 了解其變化。 • Image 屬性 取得或設定PictureBox 顯示的影像。 • SizeMode 屬性 指示如何顯示影像, 共有4 種模式, 分別介紹如下:
Normal 影像放置在PictureBox 的左上 角,如果影像大於包含它的 PictureBox,就會被裁剪, 如右圖 所示。 • AutoSize 將PictureBox 的大小調整為與 其所包含影像的大小, 其效果如 右圖所示。
CenterImage 如果PictureBox 大於影像, 顯像即置中顯示, 如果影像大於PictureBox, 圖片即放在PictureBox 中央, 而外緣被裁剪, 如下圖左所示。 • StretchImage PictureBox 內的影像會延伸或縮小, 以調整為最適合PictureBox 的大小,如下圖右所示。
範例14-8a • 示範PictureBox 圖片盒。
範例14-8b 影像的移動與縮放。 題目分析 • 1. 物件的Top 與Left 屬性是控制元件在表單的位置, 若要改變元件的位置, 只要重設這兩個屬性即可。 • 2. 物件的Height 與Width 屬性是控制元件的大小, 所以重設這兩個屬性值可改變元件的大小。 • 3. SizeMode 屬性若點選StretchImage, 則影像可配合元件的大小而調整大小。 • 4. Button 元件有一個Image 屬性可設定其圖示, 本例即利用四個Button 控制PictureBox 的上下左右移動, 為了使圖示能充分表現上下左右的效果, 筆者於c:\CsBook\ch14\ 資料夾中放入了四個箭號圖示供其設定。
1 4 -9 RichTextBox RichTextBox 元件提供比標準TextBox 元件更進階的功能。例如, 可直接載入或儲存文字檔, 不同區段的文字可有不同的字型與顏色設定等。本節將介紹如何以RichTextBox 元件實作一個簡單的文字處理器, 以下是幾個常用的屬性。 • SelectedText 屬性 取得或設定RichTextBox 中選取的文字。 • SelectionLength 屬性 取得或設定RichTextBox 中選取的字元數。 • SelectionStart 屬性 取得或設定選取文字的起點。
SelectionFont 取得或設定目前文字選取範圍的字型。 • SelectionColor 取得或設定目前文字選取範圍的文字顏色。 以下是一些常用的方法。 • LoadFile 方法 將檔案載入RichTextBox 中, 其語法如下: public void LoadFile( string path, RichTextBoxStreamType fileType ) ; 其中path 是檔案名稱與路徑; fileType 是載入檔案的資料流類型, 此參數必須指定一個RichTextBoxStreamType 型別的資料流類型, 以下介紹3 種常用的資料流類型。 • PlainText 包含空格的純文字資料流。
RichText RichText 格式(RTF) 的資料流。 • UnicodePlainText 以Unicode 編碼包含空格的純文字資料流。例如, 以下敘述可載入一純文字檔案, 其檔案路徑與名稱為"c:\CsBook\ch14\doc1.txt"。 richTextBox1.LoadFil e (" c: \ \ CsBook \ \ c h14 \ \ doc1. t x t " , RichTextBoxStreamType.PlainText); • SaveFile 方法 將RichTextBox 的內容儲存至檔案, 其語法如下: public void SaveFile( string path, RichTextBoxStreamType fileType ) ; 其中path 與fileType 同上述的LoadFile 方法。例如, 以下敘述可將RichTextBox 的內容, 以純文字的類型儲存, 其檔案路徑與名稱為"c:CSBookch14doc2.txt"。 richTextBox1. SaveFile (" c : \ \ CsBook \ \ ch14 \ \ doc1. t x t " , RichTextBoxStreamType.PlainText);
Copy 方法 將RichTextBox 中目前選取範圍的文字複製到剪貼簿中。例如, 以下敘述可在richTextBox1 物件中複製目前選取文字。 r i c hTe x tBo x 1 .C o p y ( ) ; • Cut 方法 將RichTextBox 中目前選取範圍的文字移到剪貼簿中。例如, 以下敘述可在richTextBox1 物件中剪下目前選取文字。 r i c h T e x t Bo x 1 .C u t ( ) ; • Paste 方法 將剪貼簿的內容貼入RichTextBox 中。例如, 以下敘述可在richTextBox1物件中執行貼上的動作。 r i c h Te x tB o x 1 . P a s t e ( ) ;
SelectAll 方法 選取RichTextBox 中所有的文字。例如, 以下敘述可選取richTextBox1 物件中的所有文字。 r i c h T e x t b o x 1 . S e l e c t Al l ( ) ; • Undo 方法 將RichTextBox 中上次的編輯作業復原。例如, 以下敘述可復原richTextBox1 物件最近一次的編輯作業。 r i c hTe x t B o x 1 . Undo ( ) ;
Find 方法 搜尋RichTextbox 內容中的文字, 共有7 種多載, 在此僅介紹最常用的一種, 其語法如下: public int Find( string str ) ; 在RichTextBox 中搜尋指定字串, 若找到則傳回符合該字串第一個字元的位置, 否則傳回負值。例如, 以下敘述可在richTextBox1 物件中搜尋字串"Rich"。 r i c hT e x t B o x 1 . F i n d ( "R i c h " ) ; • Focus 方法 設定RichTextBox 的輸入焦點。例如, 以下敘述可於找到"Rich" 字串後,將其設為輸入焦點。 richTextBox1.SelectionStart = richTextBox1.Find("Rich"); richTextBox1.SelectionLength = "Rich".Length; r i c hT e x tB o x 1 . F o c u s ( ) ;
範例14-9a • 示範RichTextBox 的使用。
1 4 - 10 對話框 • 在前面章節的程式中, 不論是取檔或存檔以及設定字型等動作, 都是在程式中直接鍵入檔名或字型來完成上述的功能, 如此不僅缺乏彈性, 也尚失了Windows 程式所擁有的高互動性精神, 本節所要介紹的對話框, 即為改善上述缺點, 學會本章的內容, 將可使讀者開發更具互動性的程式。本節將介紹OpenFileDialog (取檔)、SaveFileDialog (存檔)、FontDialog (字型)、ColorDialog (顏色) 等常用的對話框。
OpenFileDialog • OpenFileDialog 可讓使用者透過對話框取得檔案路徑與名稱, 它可取各種類型檔案, 但一般在使用時皆會設定Filter 屬性, 控制所能截取的檔案類型。下圖為OpenFileDialog 對話框。
SaveFileDialog • SaveFileDialog 可讓使用者透過對話框設定儲存檔案的路徑與名稱, 它可設定任何檔案類型, 但一般都會視實際需要而設定Filter 屬性, 控制使用者可存檔類型。下圖為SaveFileDialog 對話框。
常用屬性與方法 關於以上兩種檔案對話框的常用屬性與方法說明如下: • FileName 屬性 所欲存取的檔案名稱, 若於檔案對話框選取檔案, 會傳回一包含路徑與副檔名的檔名字串; 若沒有選取任何檔案則傳回空字串("")。
Filter 屬性 檔案過濾屬性, 可指定所要存取的檔案類型, 例如上圖之OpenFileDialog對話框, 就設定了BMP 、JPG 及GIF 等3 種檔案類型, 此時使用者在對話框中僅能看見此3 種類型的檔案。以下敘述將示範Filter 屬性的設定方式, 其中說明敘述與篩選條件以及不同篩選項目都以垂直線(|) 隔開; 其次, 同一篩選項目的條件中, 若有多種檔案類型, 可以分號(;) 相隔。 openFileDialog1.Filter = " 影像檔(*.BMP;*.JPG;*.GIF) | *. B M P ; * . JPG; * .GI F | 所有檔案(*.*) | * . * " ;
FilterIndex 屬性 取得或設定檔案對話框中目前所選取之篩選條件的索引編號。 • DefaultExt 屬性 取得或設定預設的副檔名。 • ShowDialog 方法 開啟對話框, 如果使用者按一下對話框中「確定」, 則傳回DialogResult.OK; 否則傳回DialogResult.Cancel 。例如, 以下敘述可開啟openFileDialog1 物件的對話框, 若使用者按下「確定」, 則將檔案載入。 if (openFileDialog1.ShowDialog() == DialogResult.OK) { pictureBox1.Image = Image.FromFile(openFileDialog1.FileName); }
範例14-10a • 同範例14-8a, 但使用檔案對話框存取影像檔案。
FontDialog FontDialog 如右圖,是一個字型設定的對話框, 其常用的屬性與方法如下: • Color 屬性 取得或設定選取字型的顏色。
Font 屬性 取得或設定選取的字型。 • ShowEffects 屬性 是否顯示指定刪除線、底線和文字色彩等選項。例如, 上圖是字型對話框的ShowEffects 屬性設定為True 的結果; 下圖是ShowEffects 設定為False的結果。
ShowApply 屬性 於對話框中是否顯示" 套用" 按鈕。例如, 右圖含有套用鈕, 上圖則無。
ShowDialog 方法 開啟對話框, 其使用方式與檔案對話框相同, 讀者可參考前面OpenFileDialog 的介紹。例如, 以下程式可將RichTextBox 元件中所選取的文字重設字型。 / / 設定字型 private void mFont_Click(object sender, System.EventArgs e) { f o n tDi a l o g 1 . C o l o r = r i c hTe x tB o x 1 . F o r eC o l o r ; f o n tDi a lo g 1 . F o n t = r i c h Te x tB o x 1 . F o n t ; f o n tDi a l o g 1 . S ho w Ef f e c t s = t r u e ; f o n tDi a l o g 1 . S h o w A p p l y= t r u e ; if(fontDialog1.ShowDialog() == DialogResult.OK) { / / 將當前選定的文字改變字型 r i c hTextBox1.Se l e c t i o n F o n t = f o n tDi a l o g 1 . F o n t ; / / 將當前選定的文字改變顏色 richTextBox1.SelectionColor =fontDialog1.Color; } }
ColorDialog • ColorDialog 如右圖,可以用來設定物件的顏色, 其常用的屬性和方法如下:
Color 屬性 取得或設定使用者所選取的色彩。 • AllowFullOpen 屬性 禁止或啟用自訂色彩按鈕, 下圖左是設定為True 的結果; 下圖右是設定為False 的結果。
FullOpen 屬性 當開啟對話框時, 是否可以看到對話框中用來自訂色彩的部份, 下圖是設定為True 的結果, 上圖左是設定為False 的結果, 使用者必須點選「定義自訂色彩按鈕」才可看到下圖的結果。
ShowDialog 方法 其使用方式同OpenFileDilog 。例如, 以下程式可設定RichTextBox 元件的背景顏色。 / / 設定背景顏色 private void mColor_Click(object sender, System.EventArgs e) { c o l o r Di a lo g 1 . Al l owF u l lOp e n= t r u e ; c o l o rDi a l o g 1 . F u l lOp e n = t r u e ; colorDialog1.Color= richTextBox1.BackColor; if (colorDialog1.ShowDialog() == DialogResult.OK) { richTextBox1.BackColor = colorDialog1.Color; } }