第十章 常用控制項 ( 二 ) 10.1 ListBox/CheckedListBox /ComboBox 清單控制項 10.2 ImageList 影響清單控制項 10.4 HScrollBar/VScrollBar/ TrackBar 捲軸控制項 10.5 RichTextBox 豐富文字方塊 10.3 MonthCalendar/DateTime Picker 日期時間控制項 備註 : 可依進度點選小節
10.1.1 ListBox 清單控制項 清單控制項提供文字選項供使用者選取清單控制項大小是固定, 選項太多透過捲軸移動 清單選項可分多行顯示 可單選也可多選可單選也可多選 清單中文字項目輸入方式可在設計階段輸入, 也可在程式執行階段使用 Add 方法來新增項目 2
二. ListBox 常用屬性 3
4
三. ListBox 常用方法 1. Add 方法 在執行階段新增清單項目, 加入的項目自動加到清單的最後面 寫法 : listbox1.items.add( 航海王 ); 2. AddRange 方法 一次新增多個項目 可將存放在字串陣列中的項目一次就加入到清單控制項中 寫法 : string[] Drama = new string[]{" 變形金剛 2", " 哈利波特 "}; listbox1.items.addrange(drama); 5
3. Insert 方法在執行階段將文字項目插入到清單中所指定索引值的位置, 不是最後面 加入一個項目成為第三項目 ( 索引值為 2) 寫法 : listbox1.items.insert(2, " 冰原歷險記 3- 恐龍現身 "); 4. Remove 方法在執行階段, 將清單控制項的文字項目移除, 可指定索引值或項目名稱來做移除 移除一個項目名稱為移除一個項目名稱為 來自地獄 的選項, 寫法 : listbox1.items.remove( 來自地獄 ); 若要移除第三個項目 ( 索引值為 2), 寫法 : listbox1.items.remove(listbox1.items[2]); 6
5. Clear 方法在執行階段, 將 listbox1 清單控制項所有選項全部移除, 寫法 : listbox1.items.clear(); 6. SetSelected 方法在執行階段, 設定清單控制項中指定項目被選取或不被選取 設定第二個項目被選取, 第三個項目不被選取 : listbox1.setselected(1, true) ; // 第二個項目被項取 listbox1.setselected(2, false); // 第三個項目不被選取 7
7. ClearSelected 方法 SetSelected 方法將參數設為 false, 可取消選取清單控制項中指定項目 如想一次將選取的項目全部取消選取, 就可用 ClearSelected 方法 如取消使用者所有選取項目的寫法如下 : listbox1.clearselected(); 8. GetSelected 方法在執行階段, 取得清單控制項中指定項目被選取或不被選取 如傳回值為 true 表該項目被選取 ; 傳回值為 false 則未被選取 如檢查第二個項目是否被選取, 若被選取則將項目名稱顯示在標籤控制項上面, 寫法 : if (listbox1.getselected(1)) label1.text = listbox1.items[1].tostring(); else label1.text = "" ; 8
9. SelectedIndexChange 常用事件最常用的事件, 當控制項的 SelectedIndex 屬性改變, 會觸動本事件 可將使用者選擇項目時要處理的程式碼寫在此事件處理函式中 10. 多選處理若要提供多選處理, 先將該控制項的 SelectionMode 屬性值設為 MultiSimple 或 MultiExtended, 以便讓使用者進行多選, 9
button1_click 事件處理函式透過 for 迴圈逐一判斷 listbox1 第 I 個項目是否被選取, 若被選取將項目累加至 show 字串變數,for 迴圈執行完後透過訊息方塊顯示 show 字串變數多選的結果 範例 :ListBox1.sln private void button1_click(object sender, EventArgs e) { string show = ""; for (int i = 0; i < listbox1.items.count; i++) { if (listbox1.getselected(i)) { show += listbox1.items[i] + ","; }. } MessageBox.Show(show, " 選擇電影 "); } 10
11
10.1.2 CheckedListBox 核取方塊清單控制項 核取方塊清單控制項比 ListBox 前面多一個核取方塊可視為 ListBox 和 CheckBox 的結合 CheckedListBox 控制項可同時選取多個項目 ListBox 清單控制項透過 SelectionMode 屬性來設定單選或多選 ComboBox 僅能單選 ListBox 和 CheckedListBox 也可多行顯示 12
一. CheckedListBox 常用屬性 13
二. CheckedListBox 常用方法與事件 1. Add 方法程式執行階段新增核取方塊清單項目的方法所加入的項目會自動加到清單的最後 checkedlistbox1.items.add( 朵拉,true); checkedlistbox1.items.add( Momo 歡樂谷,false); 14
2. SetSelected 方法可在程式執行階段, 設定核取方塊清單控制項中指定項目是否被選取 例 : 設定第二個項目被選取, 第三個項目不被選取 : checkedlistbox1.setselected (1, true) ; checkedlistbox1.setselected (2, false); 3. GetItemChecked 方法在程式執行階段, 知道核取方塊清單控制項中指定項目被選取或不被選取 傳回值 true 表該項目被選取 ; 傳回值 false 未被選取 15
4. ItemCheck 事件 事件當使用者勾選或取消勾選項目時會觸動本事件 將使用者勾選或取消勾選項目時, 要處理程式碼寫在 ItemCheck 事件處理函式中 事件 - 為預設事件, 當控制項項目被點選時會觸動本事件 - 若 CheckOnClick=False( 按兩下才勾選 ) 時, 第 1 次點選只會觸動 SelectedIndexChanged 事件 第 2 次勾選或取消勾選時, 先觸動 ItemCheck 事件, 再是 SelectedIndexChanged 事件 - 若 CheckOnClick = True( 只要按一下就勾選 ) 時, 點選先觸動 ItemCheck 事件, 再是 SelectedIndex 5. SelectedIndexChanged 事件 Changed 事件 - 將使用者選擇項目時, 要處理的程式碼寫在 SelectedIndex Changed 事件處理函式中 事件處理函式中 16
三. CheckedListBox 多選處理 CheckedListBox 提供多選透過下面程式碼 : - 當完成多選 checkedlistbox1 的項目後 - 按鈕執行 button1_click 事件處理函式 - 在此函式透過 for 迴圈逐一判斷 checkedlistbox1 第 i 個項目是否被選取 - 若被選取將項目累加至 show 字串變數 - for 迴圈執行完, 接著透過訊息方塊顯示 show 字串變數多選的結果 範例 :CheckedList Box1.sln 17
private void button1_click(object sender, EventArgs e) { } string show = ""; for (int i = 0; i < checkedlistbox1.items.count; i++) { } if (checkedlistbox1.getitemchecked (i)) { } show += checkedlistbox1.items[i] + ","; MessageBox.Show(show, " 選擇電影 "); 18
19
10.1.3 ComboBox 下拉式清單控制項 下拉式清單控制項和 ListBox 清單控制項大致相同 主要差別清單控制項在表單中的大小固定, 在下拉式清單控制項多下拉鈕, 且當按下拉鈕, 下拉式清單控制項才顯示清單項目, 節省版面空間 20
21
二. ComboBox 常用事件 1. TextChanged 事件當在下拉式清單控制項的文字方塊中輸入文字資料時, 就會觸動本事件 使用者點選下拉式清單控制項中的項目時, 文字方塊中的內容改變就會觸動本事件 將使用者輸入文字資料時, 要處理的程式碼寫在 TextChanged 事件處理函式中 22
2. SelectedIndexChanged 事件 下拉式清單控制項預設的事件是 SelectedIndex Changed 事件 當控制項的項目被點選時, 就會觸動本事件 使用者點選下拉式清單控制項的項目時, 文字方塊中的內容也會改變, 會同時觸動 TextChanged 事件 兩個事件的先後順序是 TextChanged 先觸動, 然後 SelectedIndexChanged 事件接著觸動 通常將使用者選擇項目時要處理的程式碼寫在 SelectedIndexChanged 事件處理函式中 23
在表單左邊有一個下拉式清單控制項, 其中有四個武俠小說作者 右邊有一個清單控制項, 有十個武俠小說著作的項目 當按下拉式清單控制項選擇作者後, 標籤控制項上面會顯示該作者名字以及著作名稱 所有初值設定均在表單的 Form1_Load 事件處理函式中設定 1. 作者 : 金庸著作 : 神雕俠侶, 天龍八部, 倚天屠龍記, 射鵰英雄傳 " 2. 作者 : 古龍著作 : 絕代雙嬌, 天涯明月刀, 楚留香傳奇 3. 作者 : 臥龍生著作 : 飛燕惊龍 4. 作者 : 溫瑞安著作 : 少年鐵手, 四大名補會京師 24
Step1 設計輸出入介面 25
Step2 撰寫程式碼 // FileName : SearchBook.sln 01 string[] Writer = new string[] { " 金庸 ", " 古龍 ", " 臥龍生 ", " 溫瑞安 " }; 02 string[][] Book = new string[4][]; 03 04 private void Form1_Load(object sender, EventArgs e) 05 { 06 cbowriter.items.addrange(writer); 07 Book[0] = new string[] { " 神雕俠侶 ", " 天龍八部 ", " 倚天屠龍記 ", " 射鵰英雄傳 " }; 08 Book[1] = new string[] { " 絕代雙嬌 ", " 天涯明月刀 ", " 楚留香傳奇 " }; 09 Book[2] = new string[] { " 飛燕惊龍 " }; 10 Book[3] = new string[] { " 少年鐵手 ", " 四大名補會京師 " }; 11 for (int i = 0; i <= Book.GetUpperBound(0); i++) 12 { 13 lstbook.items.addrange(book[i]); 14 } 15 } 16 26
17 private void cbowriter_selectedindexchanged(object sender, EventArgs e) 18 { 19 lblbook.text = Writer[cboWriter.SelectedIndex] + " 的作品有 \n"; 20 for (int i = 0; i <= Book[cboWriter.SelectedIndex].GetUpperBound(0); i++) 21 { 22 lblbook.text += Book[cboWriter.SelectedIndex][i] + ", "; 23 } 24 } 27
10.2 ImageList 影像清單控制項 影像清單控制項可預先儲存很多圖檔, 等需要時再將影像清單指定給某個控制項, 更換欲顯示的圖形 通常 ImageList 中儲存的圖檔都是小圖示, 以免佔用過多的記憶空間 工具箱中的 Label LinkLabel Button RadioButton CheckBox TabControl TreeView 等控制項都有 ImageList 屬性, 只要在表單上有建立 ImageList 控制項, 在設計階段都會出現 ImageList 屬性下拉式清單中 可在表單上建立多組影像清單控制項, 以供上面控制項依需求選用 在執行階段 PictureBox 控制項也可選取 ImageList 清單的圖片置入 PictureBox 控制項上 將 imagelist1 第一張圖置入 picturebox1 控制項上, 寫法 : picturebox1.image = imagelist1.images[0]; 28
10.2.1 ImageList 常用屬性 29
10.2.2 ImageList 圖檔的載入與移除 ImageList 影像清單控制項儲存的圖檔, 可透過 ImageSize 屬性調整成相同的大小, 圖形大小或比例最好相同, 以免造成變形 儲存的圖檔, 可透過 ColorDepth 屬性調整成相同的色彩位元數, 建議設定以所有圖片清單中色彩最高者為準, 以免色彩失真 30
一. 如何在設計階段載入圖檔 在 ImageList 中加入和移除小圖片, 操作方法類似 PictureBox 因為 ImageList 可以載入多張圖片, 因此會出現 影像集合編輯器影像集合編輯器 來協助管理圖片來協助管理圖片 1. 在屬性視窗中的 Images 屬性值的右邊鈕上按一下, 出現左下圖 影像集合編輯器影像集合編輯器 31
若要移除影像清單中的圖像, 選取要移除的圖檔, 再按 鈕即可 若要移動圖檔在集合中的順序, 先選取要移動的 圖檔, 再按 或 鈕來調整該圖檔在集合中的 位置 32
二. 如何在執行階段載入圖檔使用 Add 和 Image.FromFile 方法或 new Bitmap() 物件來設定 Images 屬性值, 達到載入圖檔的目的到載入圖檔的目的 語法 : 語法 1: // path 為檔案路徑 imagelist1.images.add(image.fromfile(path)); 語法 2: imagelist1.images.add(new Bitmap(path)); [ 例 1] 下面兩種寫法寫法皆可載入 ok.bmp 圖檔 1 imagelist1.images.add(image.fromfile( ok.bmp )); 2 imagelist1.images.add(new Bitmap( ok.bmp )); [ 例 2] 若將 imagelist1 第一張圖放入 picturebox1 上顯示 picturebox1.image=imagelist1.images[0]; 33
三. 如何在執行階段移除圖檔 使用 RemoveAt 方法來移除 Images 集合中的一張圖片 語法 : imagelist1.images.removeat(index); 如要移除所有圖片, 可用 Clear 方法 語法 : imagelist1.images.clear(); 34
當你在 三個不同的按鈕上按一下, 會將按鈕上的圖示顯示於圖片方塊控制項中圖片方塊控制項中, 本例請用 ImageList 影像清單控制項存入上面三個小圖示檔 FACE0. ICO FACE1.ICO FACE2.ICO 35
Step1 設計輸出入介面 36
Step2 撰寫程式碼 // FileName : ImageListDemo.sln 01 private void Form1_Load(object sender, EventArgs e) 02 { 03 picshow.image = imagelist1.images[0]; 04 picshow.sizemode = PictureBoxSizeMode.StretchImage; 05 } 06 07 private void btnface_click(object sender, EventArgs e) 08 { 09 picshow.image = imagelist1.images[0]; 10 } 37
11 12 private void btnsmile_click(object sender, EventArgs e) 13 { 14 picshow.image = imagelist1.images[1]; 15 } 16 17 private void btncry_click(object sender, EventArgs e) 18 { 19 picshow.image = imagelist1.images[2]; 20 } 38
10.3 MonthCalendar / DateTimerPicker 日期時間控制項 10.3.1 MonthCalendar 月曆控制項月曆控制項主要功能是顯示月曆, 以及讓使用者選取日期區塊 39
一. 如何建立 MonthCalendar 月曆控制項 1. 選取工具箱工具箱中月曆控制項控制項工具工具 2. 在表單適當位置當位置拖曳拖曳出月曆月曆控制項, 月曆控制項的大小是由系統由系統內定, 我們是無法改變法改變 3. 設定月曆月曆控制項的相控制項的相關屬性屬性 40
二. 如何設定 AnnuallyBoldedDates 屬性此屬性是一個日期日期的集合的集合 主要設定月曆月曆控制項中控制項中每年哪些日期每年哪些日期要用要用粗體粗體字顯示 BoldedDates 屬性也是一個日期日期的集合的集合 主要在設定月曆月曆控制項中控制項中哪些日期哪些日期要用要用粗體粗體字顯示, 而非每年要標示的要標示的日期日期 41
42
三. MonthCalendar 月曆控制項常用屬性 43
44
四. MonthCalendar 月曆控制項常用方法 1. AddAnnuallyBoldedDate 方法在程式執行中新增 AnnuallyBoldedDates 集合成員, 要使用 AddAnnually BoldedDate 方法, 其語法如下 : DateTime d=new DateTime(2009,9,2); monthcalendar1.addannuallyboldeddate(d); 2. AddBoldedDate 方法在程式執行中新增 BoldedDates 集合成員, 要使用 AddBoldedDate 方法, 語法如下 : DateTime d=new DateTime(2006,9,2); monthcalendar1.addboldeddate(d); 45
3. RemoveAllAnnuallyBoldedDate 方法在程式執行中移除所有 AnnuallyBoldedDates 集合成員, 要使用 Remove AllAnnuallyBoldedDate 方法, 語法 : monthcalendar1.removeallannuallyboldeddate(); 4. RemoveAllBoldedDate 方法在程式執行中移除所有 BoldedDates 集合成員, 要使用 RemoveAll BoldedDate 方法, 語法 : monthcalendar1.removeallboldeddate(); 46
五. MonthCalendar 月曆控制項常用事件 1. DateChanged 事件 DateChanged 事件是 MonthCalendar 月曆控制項預設的事件, 當使用者改變日期日期時會觸動本事件時會觸動本事件 例如使用者未選取日期, 只是按 鈕改變的月份月份時, 只會觸動本事件而不會觸動 DateSelected 事件 所以所以我們我們會將日期改變時, 要處理的程式碼寫在 DateChanged 事件處理函式中 47
2. DateSelected 事件當使用者選取日期日期時會觸動本事件, 例如使用者點選一個日期, 會先觸動 DateChanged 事件, 接著觸動 DateSelected 事件 如果用如果用拖曳拖曳方式選取方式選取連續日期, 每拖曳過的過的日期日期就會觸就會觸發一次 DateChanged 事件, 選取完才會觸動 DateSelected 事件 所以將使用者選取所以將使用者選取日期日期時, 要處理的程式碼寫在 DateSelected 事件處理函式中 48
10.3.2 DateTimerPicker 日期挑選控制項 日期挑選控制項, 和上一小節介紹的月曆月曆控制項非常類似, 常用屬性和事件都大致相同大致相同 只是只是日期挑日期挑選控制項多了文字方塊, 可以直接輸入接輸入日期日期 而且月曆月曆如下圖是採下拉式下拉式呈現, 所以比較節省版面空間節省版面空間 DateTimePicker 日期挑選控制項建選控制項建立的方法, 和 MonthCalendar 月曆控制項相同, 所以就不再重複重複說明 49
一. DateTimePicker 日期挑選控制項常用屬性 50
51
二. DateTimePicker 日期挑選控制項常用事件 ValueChanged 事件是 DateTimePicker 日期挑選控制項預設的事件當使用者改變日期日期時間時會觸動本事件時間時會觸動本事件 將日期日期改變時, 要處理的程式碼寫在 ValueChanged 事件處理函式中 52
使用者輸入任職日期任職日期後, 會計算出年資, 並顯示可顯示可休假休假的日數 ( 滿 1~5 年可休假 3 天 5 年以上 5 天 未滿 1 年不能不能休假 ) 當使用者當使用者允許休假允許休假時, 月曆才可以操作才可以操作 程式中程式中規定使用者要選取連續連續的休假日期, 且不可以選取當天以前以前的日期日期 當使用者選取當使用者選取日期日期後, 就顯示休假休假的起訖日期, 若休假天休假天數未數未滿也會顯示訊息也會顯示訊息 53
Step1 設計輸出入介面 54
Step2 撰寫程式碼 // FileName : CalendarDemo.sln 01 int vacation_days; 02 03 private void Form1_Load(object sender, EventArgs e) 04 { 05 monthcalendar1.enabled = false; 06 monthcalendar1.mindate = DateTime.Now; 07 datetimepicker1.maxdate = DateTime.Now; 08 lblyears.text = ""; 09 lblvacation.text = ""; 10 } 55
12 private void datetimepicker1_valuechanged(object sender, EventArgs e) 13 { 14 int years; 15 years = DateTime.Now.Year - datetimepicker1.value.year; 16 vacation_days = 0; 17 if (years > 5) 18 { 19 vacation_days = 5; 20 } 21 else if (years >= 1 && years <= 5) 22 { 23 vacation_days = 3; 24 } 25 else if (years < 0) 26 { 27 datetimepicker1.value = DateTime.Now; 28 years = 0; 29 } 30 if (vacation_days > 0) 31 { 32 monthcalendar1.enabled = true; 33 monthcalendar1.maxselectioncount = vacation_days; 34 lblvacation.text = " 請選擇連續 " + vacation_days + " 天為休假日 "; 35 } 56
36 else 37 { 38 monthcalendar1.enabled = false; 39 lblvacation.text = " 年資太淺! 請繼續為公司努力!!"; 40 } 41 lblyears.text = " 你的任職年資為 " + years + " 年 " + Environment. NewLine + " 你的休假為 " + vacation_days + " 天 "; 42 } 43 44 private void monthcalendar1_datechanged(object sender, DateRangeEventArgs e) 45 { 46 lblvacation.text = " 休假日由 " + monthcalendar1.selectionstart.toshortdatestring() + " 到 " + 47 } monthcalendar1.selectionend.toshortdatestring(); 57
10.4 ScrollBar / VscrollBar / TrackBar 捲軸控制項 捲軸類的控制項主要是用來讓使用者以拖曳拖曳方式來改變程式的設定值 使用者可直覺直覺且親切親切地操作地操作 可避免輸入免輸入錯誤錯誤的數值的數值 控制台鍵盤台鍵盤設定, 可拖曳軌跡棒拖曳軌跡棒改變改變延遲延遲的時間的時間 58
10.4.1 HscrollBar / VscrollBar 水平垂直捲軸 水平捲軸和視窗小於內容內容都會出現捲軸 垂直捲軸控制項 59
一. HScrollBar / VScrollBar 水平和垂直垂直捲軸常用屬性 60
二. HScrollBar / VScrollBar 常用事件 1. Scroll 事件 Scroll 事件是捲軸控制項預設的事件, 當使用者拖曳捲動鈕時會觸動本事件 2. ValueChanged 事件當使用者改變捲軸控制項的 Value 屬性值時會觸動本事件, 例如按微調鈕或調鈕或快捲區 61
10.4.2 TrackBar 滑動桿 滑動桿控制項 ( 或稱為軌跡棒 ) 功能和捲軸能和捲軸非常類似外觀像音響音響面板放板放控制控制音量音量的滑動桿 62
一. TrackBar 滑動桿常用屬性 63
64
二. TrackBar 常用事件 1. Scroll 事件 Scroll 事件是滑動桿控制項預設的事件, 當使用者拖曳滑動鈕時會觸動本事件動鈕時會觸動本事件 2. ValueChanged 事件當使用者改變滑動桿控制項的 Value 屬性值時會動本事件, 例如按方向鍵向鍵或滑動軸動軸 65
設計一個簡單的圖片預單的圖片預覽器, 在表單下方有一個滑動桿拖曳滑動鈕可以動鈕可以切換切換三張不同的圖片, 預設為顯示第一張 切換圖片後, 操作水平水平和垂直垂直捲軸可以預捲軸可以預覽圖片圖片 若圖片較小, 則捲軸沒有作用有作用 66
Step1 設計輸出入介面 67
Step2 撰寫程式碼 // FileName : ScrollbarDemo.sln 01 private void Form1_Load(object sender, EventArgs e) 02 { 03 hsbpicture.width = pnlpicture.width; 04 vsbpicture.height = pnlpicture.height; 05 tkbnum.minimum = 1; 06 tkbnum.maximum = 3; 07 picshow.image = Image.FromFile("picture1.jpg"); 08 hsbpicture.maximum = picshow.width - pnlpicture.width; 09 vsbpicture.maximum = picshow.height - pnlpicture.height; 10 lblnum.text = " 第 1 張圖 "; 11 } 68
13 private void tkbnum_valuechanged(object sender, EventArgs e) 14 { 15 picshow.image = Image.FromFile("picture" + tkbnum.value.tostring() + ".jpg"); 16 picshow.left = 0; picshow.top = 0; 17 if (picshow.width > pnlpicture.width) 18 { 19 hsbpicture.maximum = picshow.width - pnlpicture.width; 20 hsbpicture.enabled = true; 21 } 22 else 23 { 24 hsbpicture.enabled = false; 25 } 69
26 if (picshow.height > pnlpicture.height) 27 { 28 vsbpicture.maximum = picshow.height - pnlpicture.height; 29 vsbpicture.enabled = true; 30 } 31 else 32 { 33 vsbpicture.enabled = false; 34 } 35 hsbpicture.value = 0; vsbpicture.value = 0; 36 lblnum.text = " 第 " + tkbnum.value.tostring() + " 張圖 "; 37 } 70
39 private void hsbpicture_scroll(object sender, ScrollEventArgs e) 40 { 41 picshow.left = -hsbpicture.value; 42 } 43 44 private void vsbpicture_scroll(object sender, ScrollEventArgs e) 45 { 46 picshow.top = -vsbpicture.value; 47 } 71
10.5 RichTextBox 豐富文字方塊 該控制項提供類似 Microsoft Word 文書處理處理應用程式的顯示和文字管理功能 TextBox 無法處理法處理具格具格式化的功能 豐富文字方塊提供文字方塊提供格式化功化功能 : - 選取變更文字的文字的格式 - 選取變更文字的前文字的前景色與背景與背景色 - 調整段落格落格式 - 建立項目項目符號符號清單清單 - 執行連結 - 載入與儲存 Rich Text Format (RTF) 或純文字檔文字檔 72
一. RichTextBox 常用屬性 73
74
二. RichTextBox 常用方法 75
三. RichTextBox 常用事件若 RichTextBox 內的文字包含超連包含超連結 : - 將 DetectUrls = true, 使該控制項的文字有連結的部份顯示顯示藍色加色加底線底線 - 透過 LinkClicked 事件來執行與超連與超連結相結相關的工作 - 當在 RichTextBox 控制項有連結部結部份按一下會觸按一下會觸發 LinkClicked 事件 - 此時透過下面程式連結到指定的結到指定的網站 : private void richtextbox1_linkclicked(object sender, LinkClickedEventArgs e) { System.Diagnostics.Process.Start(e.LinkText); } 76
1 2 3 使用 RichTextBox Button Label ComboBox 等控制項製作簡易記簡易記事本, 功能說能說明 : 此清單可用來設定黑 紅 綠 藍四種豐富種豐富文字方塊所選取的文字前景色 此清單可用來設定白 紅 綠 藍四種豐富種豐富文字方塊所選取的文字背景背景色 此清單可用來設定文字大小, 其文字大小有 8 10 12 14 16 18 20 77
4 5 6 7 此清單可用來設定文字字體, 其字體有新有新細明體細明體 細明體 標楷體楷體 Arial 按下此鈕將豐富豐富文字方塊的內容儲存至文字方塊的內容儲存至與執行檔相同路徑路徑下的 MyFile.rtf 檔內 按下此鈕將與執行檔相同執行檔相同路徑路徑下的 MyFile.rtf 檔的內容全部載入到豐富豐富文字方塊內文字方塊內 按下此鈕將豐富豐富文字方塊的內容全部清除文字方塊的內容全部清除 78
執行情形 79
Step1 設計輸出入介面 80
Step2 撰寫程式碼 // FileName : RichTextBoxDemo.sln 01 int FontSize ; 02 string FontName; 04 private void Form1_Load(object sender, EventArgs e) 05 { 06 FontSize = 10; 07 FontName = " 新細明體 "; 08 richtextbox1.font = new Font(FontName, FontSize); 09 } 11 private void cboforecolor_selectedindexchanged(object sender, EventArgs e) 12 { 13 if (cboforecolor.text == " 黑 ") 14 { 15 richtextbox1.selectioncolor = Color.Black; 16 } 81
17 else if (cboforecolor.text == " 紅 ") 18 { 19 richtextbox1.selectioncolor = Color.Red; 20 } 21 else if (cboforecolor.text == " 綠 ") 22 { 23 richtextbox1.selectioncolor = Color.Green; 24 } 25 else if (cboforecolor.text == " 藍 ") 26 { 27 richtextbox1.selectioncolor = Color.Blue; 28 } 29 } 30 82
31 private void cbobgcolor_selectedindexchanged(object sender, EventArgs e) 32 { 33 if (cbobgcolor.text == " 白 ") 34 { 35 richtextbox1.selectionbackcolor = Color.White ; 36 } 37 else if (cbobgcolor.text == " 紅 ") 38 { 39 richtextbox1.selectionbackcolor = Color.Red; 40 } 41 else if (cbobgcolor.text == " 綠 ") 42 { 43 richtextbox1.selectionbackcolor = Color.Green; 44 } 45 else if (cbobgcolor.text == " 藍 ") 46 { 47 richtextbox1.selectionbackcolor = Color.Blue; 48 } 49 } 83
51 private void cbosize_selectedindexchanged(object sender, EventArgs e) 52 { 53 FontSize = Convert.ToInt32(cboSize.Text); 54 richtextbox1.selectionfont = new Font(FontName, FontSize); 55 } 56 57 private void cbofont_selectedindexchanged(object sender, EventArgs e) 58 { 59 FontName = cbofont.text; 60 richtextbox1.selectionfont = new Font(FontName, FontSize); 61 } 84
63 private void btnsave_click(object sender, EventArgs e) 64 { 65 richtextbox1.savefile("myfile.rtf", RichTextBoxStreamType.RichText ); 66 MessageBox.Show(" 存檔成功!!"); 67 } 68 69 private void btnopen_click(object sender, EventArgs e) 70 { 71 richtextbox1.loadfile("myfile.rtf", RichTextBoxStreamType.RichText ); 72 MessageBox.Show(" 開檔成功!!"); 73 } 74 75 private void btncls_click(object sender, EventArgs e) 76 { 77 richtextbox1.text = ""; 78 } 85