chapter 12epaper.gotop.com.tw/pdf/ael009200.pdf · richtextbox1.loadfile("c:\\my\\testdoc.rtf",...

38
CHAPTER 12 豐富文字方塊與工具列 12.1 RichTextBox 豐富文字方塊控制項 12.2 ToolStrip 工具列控制項 12.3 ToolStripContainer 工具列容器控制項 12.4 StatusStrip 狀態列控制項 12.5 MenuStrip 功能表控制項 12.6 ContextMenuStrip 快顯功能表控制項 12.7 習題

Upload: others

Post on 13-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

  • CHAPTER

    12

    豐富文字方塊與工具列

    12.1 RichTextBox 豐富文字方塊控制項

    12.2 ToolStrip 工具列控制項

    12.3 ToolStripContainer 工具列容器控制項

    12.4 StatusStrip 狀態列控制項

    12.5 MenuStrip 功能表控制項

    12.6 ContextMenuStrip 快顯功能表控制項

    12.7 習題

  • 12-2

    12.1 RichTextBox 豐富文字方塊控制項

    由於 文字方塊工具無法提供類似 Microsoft Word 能夠輸入、顯示

    或處理具有格式的文字,此時就必須使用 豐富文字方塊工具。

    RichTextBox 控制項是繼承 TextBox 控制項而來的,因此除了具有 TextBox 所有屬

    性和方法外,還增加了讓使用者能輸入並編輯文字,同時提供比標準的 TextBox 控

    制項更進階的格式化功能,如:字型和顏色設定。還可將文字直接給控制項、以及

    從 Rich Text 格式檔 (簡稱 RTF 檔) 或純文字檔載入、字元和段落格式也可以指定給

    控制項內的文字。RichTextBox 控制項提供幾個可以用來將格式套用於控制項內文

    字任何部分的屬性。若要變更某部分字元或段落格式,只要將該部分文字先選取,

    被選取的文字會以所設定格式顯示,而且在此設定以後輸入的所有文字都會以此相

    同的設定格式化輸入的文字,一直到變更設定或者選取控制項文件中的不同區段為

    止。RichTextBox 控制項不像 TextBox 控制項受到 64K 字元容量的限制。使用

    TextBox 控制項的應用程式只要稍加修改,就可以使用 RichTextBox 控制項,下表

    是 RichTextBox 控制項常用的成員:

    成員名稱 說 明

    AutoWordSelection 屬性

    (預設值 False)

    True:表示只要使用者在控制項內,在文字的任何部分快按兩下,就可以自動選取整個字(Word)。

    SelectionBullet 屬性

    (限執行階段使用)

    是否要建立項目符號清單。如圖所示。

    richTextBox1.SelectionBullet = true;

    SelectionFont 屬性

    (限執行階段使用)

    可設定或取得文字選取字型樣式(標準、粗體、斜體),也可以設定字型大小和選取字型。

    SelectionColor 屬性

    (限執行階段使用) 可設定或取得變更文字的色彩。

    DetectUrls 屬性

    如果 RichTextBox 控制項內的文字含有和網站相連的文字超連結時,可使用此屬性在控制項的文字中適當的

    顯示連結。此時便可使用 LinkClicked 事件來執行和連結相關聯的工作。

    SelectionIndent 屬性

    (限執行階段使用)

    調整段落的格式,此屬性設定段落首行縮排的距離。相

    當於 Word 尺規的首行縮排尺標。(以 Pixel 為單位)

  • 豐富文字方塊與工具列

    12-3

    12 CHAPTER

    SelectionHangingIndent

    屬性(限執行階段使用)

    調整段落的格式,此屬性設定段落首行縮排的距離。相

    當於 Word 尺規的首行凸排(左邊縮排)尺標。(以 Pixel為單位)

    SelectionRightIndent 屬性

    (限執行階段使用)

    調整段落的格式,此屬性設定段落首行縮排的距離。

    相當於 Word 尺規的右邊縮排尺標。(以 Pixel 為單位)

    LoadFile 方法

    將現有的 RTF 或 ASCII 文字檔載入控制項。

    如下寫法將 ASCII 文字檔載入到 richTextBox1 內:

    richTextBox1.LoadFile("C:\\My\\Testdoc.txt", RichTextBoxStreamType.PlainText) ;

    如下寫法將 RTF 文字檔載入到 richTextBox1 內:

    richTextBox1.LoadFile("C:\\My\\Testdoc.rtf", RichTextBoxStreamType.RichText);

    SaveFile 方法 可將檔案儲存為 RTF 或 ASCII 文字格式。其用法和 LoadFile 方法類似,也可用 SaveFile 方法來儲存指定的檔案。

    Find 方法 用來在 RichTextBox 豐富文字方塊控制項的文字內尋找指定的字串。若有找到,傳回找到字串第一個字元的

    索引位置,並反白顯示找到的文字;若找不到傳回 -1。

    Clear 方法 將控制項內的文字空白。

    LinkClicked 事件 用來執行和連結相關聯的工作。

    TextChagned 事件 當 RichTextBox 豐富文字方塊控制項的內容有任何改變都會觸發此事件,將此事件內的程式區段執行一次。

    12.2 ToolStrip 工具列控制項

    在視窗應用程式環境下,常將一些常用的功能以按鈕圖示組合成一個工具列,

    掛在功能表的正下方以方便快速選取。譬如 Visual Studio 2010 整合開發環境(IDE)

    的標準工具列亦是如此。透過工具箱中的 工具便可輕易地做出一個

    自訂工具列出來,ToolStrip 控制項預設放在表單的標題欄正下方,您可以在此工具

    列設定圖示及名稱。

  • 12-4

    一. ToolStrip 工具列容器內功能項目常用成員

    ToolStrip 是一個工具列控制項的容器,它是由一些按鈕、標籤、下拉式按鈕、

    文字方塊所組合而成的集合。如果要在工具列新增一個選項,可透過 Items.Add 方

    法來達成。譬如欲在 toolStrip1 工具列控制項後面新增三個文字按鈕,其寫法如下

    toolStrip1.Items.Add("One"); toolStrip1.Items.Add("Two"); toolStrip1.Items.Add("Three");

    ToolStrip 工具列容器中的控制項,例如按鈕、標籤、下拉式清單…等控制項,

    其常用成員說明如下:

    成員名稱 說明

    Alignment 屬性 設定工具圖示由左或右開始排起。預設值:Left。

    AutoToolTip 屬性 決定是否使用 Text 或 ToolTipText 當工具列的提示。

    Checked 屬性 表示 ToolStripButton 為已按下或未按下。

    DisplayStyle 屬性

    None:空白圖示。

    Text:只顯示文字當圖示。

    Image:只顯示影像當圖示(預設值)。

    ImageAndText:同時顯示文字與圖像當圖示。

    Enabled 屬性 設定該工具圖示是否有效。預設值為 True。

    Image 屬性 當 DisplayStyle 屬性有 Image 屬性設定時,Image 屬性才有效。

  • 豐富文字方塊與工具列

    12-5

    12 CHAPTER

    ImageScaling 屬性 用來設定所選取的圖像是否要調整和 ToolStrip 一樣大小。預設值為 SizeToFit 會縮成和 ToolStrip 一樣大小。None:不做調整。

    ImageTransparentColor屬性

    將指定的顏色設成透明。

    RightToLeft 屬性 用來表示是否使用 RTL 語言方式由右至左繪製。

    預設值為 No,表示按照預設方式先圖後文字。 若設為 Yes,表示先文字後圖。

    Text 屬性 若 DisplayStyle 屬性有 Text 設定時,此屬性才有效。

    TextDirection 屬性

    用來設定文字顯示的方向:

    Horizontal: (預設值)

    Vertical 90: Vertical 270:

    TextImageRelation 屬性

    用來設定圖片相對於文字的相對位置:

    :ImageBeforeText(預設值)

    :TextBeforeImage

    :TextAboveImage

    :TextAboveImage

    ToolTipText 屬性 設定當滑鼠移到該工具圖示上時欲顯示的提示訊息。

    二. ToolStrip 工具列容器內控制項的建立

    當你在工具箱的 工具上快按兩下,會在表單的正下方產生一個

    空白的工具列,如下圖 ToolStrip 工具列內提供下列控制項。

  • 12-6

    工具選項 說明

    Button 按鈕工具圖示

    產生按鈕控制項,按鈕上可有影像、文字、影像和

    文字並存。

    Label 標籤工具圖示

    產生標籤控制項,標籤上可有影像、文字、影像和

    文字並存。

    SplitButton 分隔鈕工具圖示 產生分隔鈕。

    DropDownButton 下拉按鈕工具圖示

    產生按鈕的下拉選項,用來指定所連接的 Menu Item 功能表項目控制項。

    Seperator 分隔線 產生分隔線,用來將同性質工具加以區隔。

    ComboBox 下拉式清單 產生下拉式清單控制項。

    TextBox 文字方塊 產生文字方塊控制項。

    ProgressBar 進度棒 產生進度棒控制項。

  • 豐富文字方塊與工具列

    12-7

    12 CHAPTER

    接著練習在工具列上建立按鈕、標籤、下拉式清單、分隔鈕…等控制項。

    操作步驟

    Step 01 在工具箱的 工具上快按兩下,加入物件名稱(Name 屬性)為 toolStrip1 工具列控制項。

    Step 02 在 toolStrip1 工具列內新增含有影像和文字的 按鈕。

    如下圖,先選取 toolStrip1 的 下拉鈕,接著再由清單中選取

    「Button」,表示使用按鈕控制項當工具列的第一個圖示按鈕。

    Button 按鈕

    ComboBox 下拉式清單

    SplitButton 分隔鈕

    23

    1

  • 12-8

    依下圖操作,將 toolStrip1 工具列的第一個按鈕圖示改成 圖示

    (Open.bmp 置於書附光碟 ch12/Icon 資料夾下)。

    1

    2

    3

    4

    5

    6

  • 豐富文字方塊與工具列

    12-9

    12 CHAPTER

    選取 toolStrip1 中的 按鈕,透過屬性視窗將此按鈕控制項的

    DisplayStyle 屬性設為「ImageAndText」,讓該按鈕上面可同時顯示文

    字及圖示。

    選取 toolStrip1 中的 按鈕,透過屬性視窗將此按鈕控制項的 Text 屬

    性設為「開檔」,讓該按鈕以 顯示。

    7

    8

    1

    2

    1

    2

  • 12-10

    選取 toolStrip1 中的 按鈕,透過屬性視窗將此按鈕控制項的

    Name 屬性(物件名稱)更名為「tsbOpen」。

    Step 03 重複 Step02,在 toolStrip1 工具列內新增含有影像和文字的 按鈕。

    在 toolStrip1 新增「Button」按鈕控制項當工具列的第二個圖示按鈕。

    將 toolStrip1工具列的第二個按鈕圖示改成 圖示(Save.bmp置於書附

    光碟 ch12/Icon 資料夾下)。

    將 toolStrip1 中 按鈕的 DisplayStyle 屬性設為「ImageAndText」,讓

    該按鈕上面可同時顯示文字及圖示。

    將 toolStrip1中 按鈕的Text屬性設為 "開檔",讓該按鈕以 顯

    示。

    將 toolStrip1 中的 按鈕的 Name 屬性 (物件名稱 )更名為

    「tsbSave」。

    Step 04 重複 Step02,在 toolStrip1 工具列內新增 "清除" 文字按鈕。

    在 toolStrip1 新增「Button」按鈕控制項當工具列的第三個按鈕。

    選取 toolStrip1 的第三個按鈕,將該按鈕的 DisplayStyle 屬性設為

    「Text」,使該按鈕以文字顯示。

    選取 toolStrip1 的第三個按鈕,將該按鈕的 Text 屬性設為 "清除"。

    選取 toolStrip1 的第三個按鈕,將該按鈕的 Name 屬性(物件名稱)設為

    「tsbCls」。

    1 2

  • 豐富文字方塊與工具列

    12-11

    12 CHAPTER

    Step 05 重複 Step02,在 toolStrip1 工具列內新增 "項目符號 " 文字按鈕。

    在 toolStrip1 新增「Button」按鈕控制項當工具列的第四個按鈕。

    選取 toolStrip1 的第四個按鈕,將該按鈕的 DisplayStyle 屬性設為

    「Text」,使該按鈕以文字顯示。

    選取 toolStrip1 的第四個按鈕,將該按鈕的 Text 屬性設為 "項目符號"。

    選取 toolStrip1 的第四個按鈕,將該按鈕的 Name 屬性(物件名稱)設為

    「tsbSullet」。

    Step 06 在 toolStrip1 工具列內新增 "字型大小 " 標籤。

    如下圖,先選取 toolStrip1 的 下拉鈕,接著再由清單中選取

    「Label」,表示在 toolStrip1 內加入一個標籤控制項。

    將此標籤的 Text 屬性設為 "字型大小"。

    Step 07 在 toolStrip1工具列內新增下拉式清單,該清單的項目有 9、10、12、14、16。

    如下圖,先選取 toolStrip1 的 下拉鈕,接著再由清單中選取

    「ComboBox」,表示在 toolStrip1 工具列加入下拉式清單。

    2

    3

    1

    2

    3

    1

  • 12-12

    選取 toolStrip1 的下拉式清單,將該清單的 Text 屬性設為 "9",表示該

    下拉式清單預設項目為 "9"。

    選取 toolStrip1 的下拉式清單,然後按下下拉式清單 Items 屬性的 鈕

    開啟「字串集合編輯器」視窗,然後依序建立下拉式清單的項目有 9、

    10、12、14、16。

    選取 toolStrip1 中的下拉式清單,透過屬性視窗將此下拉式清單控制項

    的 Name 屬性(物件名稱)更名為「cboSize」。

    如下圖操作,若 toolStrip1 的下拉式清單太寬,可將該控制項 Size 子屬

    性 Width 設為「75」。

    4

    3

    1

    2

  • 豐富文字方塊與工具列

    12-13

    12 CHAPTER

    Step 08 在 toolStrip1 工具列內新增 SplitButton 分隔鈕。

    如下圖,先選取 toolStrip1 的 下拉鈕,接著再由清單中選取

    「SplitButton」,表示在 toolStrip1 內加入 SplitButton 分隔鈕。

    選取 toolStrip1 中的 SplitButton,將此控制項的 Name 屬性(物件名稱)

    更名為「tsbFontColor」。

    選取 toolStrip1 中的 SplitButton(即 tsbFontColor 分隔鈕),將此控制項的

    DisplayStyle 屬性設為「Text」,讓該按鈕上面可同時顯示文字。

    選取 toolStrip1 中的 SplitButton(即 tsbFontColor 分隔鈕),將此控制項的

    Text 屬性設為 "字型色彩"。

    1

    2

    2

    1

    3

  • 12-14

    選取 toolStrip1 中的 "字型色彩" 分隔按鈕,接著依序在 上

    輸入「黑」、「紅」、「綠」、「藍」四個功能項目。

    Step 09 在 toolStrip1 工具列內新增分隔圖示。

    如下圖,先選取 toolStrip1 的 下拉鈕,接著再由清單中選取

    「Separator」,即在 toolStrip1 內加入 Separator 分隔圖示。

    重複上述動作,在 toolStrip1 內在新增一個 Separator 分隔圖示。

    使用滑鼠將分隔圖示拖曳到下圖指定的位置。

    2

    1

    3

  • 豐富文字方塊與工具列

    12-15

    12 CHAPTER

    :ToolStripDemo.sln

    使用豐富文字方塊與本節所建立的工具列,加上下列功能。各工具按鈕功能說

    明如下:

    :將 test.rtf 檔的內容載入到豐富文字方塊內。

    :將豐富文字方塊的內容寫回 test.rft 檔內。

    清除:將豐富文字方塊的內容全部清除。

    項目符號:將選取的文字建立項目符號清單。

    字型大小下拉式清單:依下拉式清單設定選取文字的字型大小。

    字型色彩分隔鈕:設定選取文字的前景色彩。

    執行結果

  • 12-16

    操作步驟

    Step 01 表單輸出入介面如下圖。

    Step 02 撰寫程式碼:

    FileName:Form1.cs 01 namespace ToolStripDemo

    02 {

    03 public partial class Form1 : Form

    04 {

    05 public Form1()

    06 {

    07 InitializeComponent();

    08 }

    09 // 表單載入時執行

    10 private void Form1_Load(object sender, EventArgs e)

    11 {

    12 // 豐富文字方塊填滿整個表單

    13 richTextBox1.Dock = DockStyle.Fill;

    14 }

    15 // 按工具列的 [開檔] 鈕時執行

    16 private void tsbOpen_Click(object sender, EventArgs e)

    17 {

    richTextBox1

    tsbOpen 黑 ToolStripMenuItem 紅 ToolStripMenuItem 綠 ToolStripMenuItem 藍 ToolStripMenuItem

    tsbSave tsbCls tsbBullet cboSize

  • 豐富文字方塊與工具列

    12-17

    12 CHAPTER

    18 // 使用 try{...}catch{...}來補捉沒有檔案可能發生的例外

    19 try

    20 {

    21 // 將 test.rtf 檔的內容載入到 richTextBox1 豐富文字方塊內

    22 richTextBox1.LoadFile("test.rtf",

    RichTextBoxStreamType.RichText);

    23 }

    24 catch (Exception ex)

    25 {

    26 MessageBox.Show(ex.Message);

    27 }

    28 }

    29 // 按工具列的 [存檔] 鈕時執行

    30 private void tsbSave_Click(object sender, EventArgs e)

    31 {

    32 // 將 richTextBox1 豐富文字方塊內的資料儲存到 test.rtf 檔

    33 richTextBox1.SaveFile("test.rtf",

    RichTextBoxStreamType.RichText);

    34 }

    35 // 按工具列的 [清除] 鈕時執行

    36 private void tsbCls_Click(object sender, EventArgs e)

    37 {

    38 richTextBox1.Text = "";

    39 }

    40 // 按下工具列的 [項目符號] 鈕時執行

    41 private void tsbBullet_Click(object sender, EventArgs e)

    42 {

    43 richTextBox1.SelectionBullet = !richTextBox1.SelectionBullet;

    44 }

    45 // 字型下拉式清單 SelectedIndex 屬性值改變時執行(即選取下拉式清單時執行)

    46 private void cboSize_SelectedIndexChanged

    (object sender, EventArgs e)

    47 {

    48 // 設定選取字型的樣式

    49 richTextBox1.SelectionFont =

    new Font(richTextBox1.Font.FontFamily.ToString(),

    float.Parse(cboSize.Text), richTextBox1.Font.Style);

    50 }

  • 12-18

    51 // 按 [黑] 項目時執行

    52 private void 黑 ToolStripMenuItem_Click(object sender, EventArgs e)

    53 {

    54 // richTextBox1 豐富文字方塊被選取部份字型色彩設為黑色

    55 richTextBox1.SelectionColor = Color.Black;

    56 }

    57 // 按 [紅] 項目時執行

    58 private void 紅 ToolStripMenuItem_Click(object sender, EventArgs e)

    59 {

    60 // richTextBox1 豐富文字方塊被選取部份字型色彩設為紅色

    61 richTextBox1.SelectionColor = Color.Red;

    62 }

    63 // 按 [綠] 項目時執行

    64 private void 綠 ToolStripMenuItem_Click(object sender, EventArgs e)

    65 {

    66 // richTextBox1 豐富文字方塊被選取部份字型色彩設為綠色

    67 richTextBox1.SelectionColor = Color.Green ;

    68 }

    69 // 按 [藍] 項目時執行

    70 private void 藍 ToolStripMenuItem_Click(object sender, EventArgs e)

    71 {

    72 // richTextBox1 豐富文字方塊被選取部份字型色彩設為藍色

    73 richTextBox1.SelectionColor = Color.Blue;

    74 }

    75 }

    76 }

    12.3 ToolStripContainer 工具列容器控制項

    當 ToolStrip 工具列、MenuStrip 功能表或 StatusStrip 狀態列控制項想要放置在

    表單上、下、左、右位置,或是 ToolStrip 工具列想要在表單上、下、左、右位置達

    成浮動定位時,此時可以透過 工具列容器控制項來達成。

    ToolStripContainer 的上、下、左、右方都有可以放置 ToolStrip、MenuStrip、StatusStrip

    的面板,您可以使用 ToolStripContainer 中間的 ToolStripContentPanel 容器來放置傳

    統的 Windows Form 控制項,如 Button、Label…等。

  • 豐富文字方塊與工具列

    12-19

    12 CHAPTER

    延續 ToolStripDemo.sln 範例製作如下程式。使表單中的 ToolStrip 工具列可以

    放置在表單的上、下、左、右位置。本例完成檔可參考範例 ToolStripContainer

    Demo.sln。

    :ToolStripContainerDemo.sln

    延續上例,練習使用 ToolStripContainer 控制項,使表單中的 ToolStrip 工具列

    可以放置在表單的上、下、左、右位置。

    執行結果

    工具列置左邊界先

    拖曳 圖示,往下拖 曳 再 往 左 邊 界

    靠,結果如圖所示

    1

    工具列置下邊界先

    拖曳 圖示,往右拖 曳 再 往 下 邊 界

    靠,結果如圖所示

    2

  • 12-20

    操作步驟

    Step 01 延續上列,請開啟書附光碟 ch12 資料夾下的「ToolStripDemo.sln」方案檔。

    Step 02 在表單放入 toolStripContainer1 工具列容器控制項,接著按照下圖操作選取該控制項。

    Step 03 按下 toolStripContainer1 的智慧標籤 鈕,將要放置工具列面板的上、下、左、右位置勾選。

    1

    按右鍵

    23

    由出現的快顯功能表執行 toolStripContainer1

  • 豐富文字方塊與工具列

    12-21

    12 CHAPTER

    Step 04 在上圖的「停駐填滿表單」按一下,使 toolStripContainer1 工具列容器控制項填滿整個表單,此時原本放置於 Form1 表單上的 richTextBox1 豐富文字方塊控制項被 toolStripContainer1 覆蓋。

    Step 05 在上圖的【重設控制項父代】指令按一下,使 toolStripContainer1 變成Form1 表單上層的容器,此時放置於 Form1 表單上的 richTextBox1 豐富文字方塊控制項會被放入 toolStripContainer1 中間的 toolStripContent Panel1 容器內。

    Step 06 執行【偵錯(D)/開始偵錯(S)】指令,請測試 toolStrip1 工具列是否可以拖曳到表單的上、下、左、右位置。

    1

    2

    3

    全部勾選,使表單上、下、

    左、右的面板變成可視狀

    態,可以用來放置工具列、

    功能表及狀態列

    1

  • 12-22

    12.4 StatusStrip 狀態列控制項

    在 Windows Form 應用程式,時常使用 狀態列控制項來顯示目

    前程式執行的情形,StatusStrip 狀態列控制項通常放在視窗的最下方,通常

    StatusStrip 控制項是由 ToolStripStatusLabel 物件所組成的,每個物件會負責顯示文

    字、圖示,或者文字和圖示兩者皆會顯示。在 StatusStrip 內也可以放入

    ToolStripDropDownButton、ToolStripSplitButton、ToolStripProgressBar 等控制項。

    透過工具箱的狀態列工具即可輕易地做出狀態列。

    一. StatusStrip 狀態列控制項常用成員

    StatusStrip 成員名稱 說明

    RenderMode 屬性

    (預設值 System)

    取得或設定 StatusStrip 的樣式。

    1 System: 狀態列以系統預設的灰色顯示

    2 Professional: 狀態列以藍底色顯示。

    SizingGrip 屬性

    (預設值 True)

    若設為 True 表示該狀態列的右下角會出現框底 圖示,供你調整大小的底框;若屬性值為 False 則無。

    ToolStripStatusLabel

    StatusStrip 控制項

    ToolStripSplitButton ToolStripDropDownButton

    ToolStripMenuItem

  • 豐富文字方塊與工具列

    12-23

    12 CHAPTER

    二. StatusStrip 狀態列控制項的建立

    StatusStrip 是一個狀態列控制項容器,狀態列上面的各種狀態顯示訊息可由

    StatusLabel、DropDownButton、SplitButton 及 ProgressBar 組成。StatusStrip 建立方

    式與 ToolStrip 相同,按照下列步驟即能在表單上建立自訂狀態列:

    操作步驟

    Step 01 透過工具箱的 狀態列工具,在表單上建立一個 Name 屬性為 statusStrip1 控制項,該控制項自動建立在表單的正下方。

    Step 02 在 statusStrip1 內新增 toolStripStatusLabel1 標籤控制項,其 Text 屬性為 "下載中…"。

    如下圖,先選取 statusStrip1 的 下拉鈕,接著再由清單中選取

    「StatusLabel」,表示建立 toolStripStatusLabel1 當做狀態列的第一個標

    籤。

    選取「toolStripStatusLabel1」物件,接著透過「屬性」視窗將該物件的

    Text 屬性更改為 "下載中…"。

    Step 03 在 statusStrip1 內新增第二個 toolStripDropDownButton1 下拉按鈕工具圖示。

    如下圖,先選取 statusStrip1 的 下拉鈕,接著再由清單中選取

    「DropDownButton」,表示在狀態列內建立 toolStripDropDownButton1

    下拉圖示按鈕。

    3

    1

    2

    產生 toolStripStatusLabel1

  • 12-24

    接著依下圖操作在下拉按鈕圖示加入「第一張」功能選項。

    重複上面步驟,繼續在 圖示內輸入「上一張」、「下一

    張」、「最末張」功能選項。結果如下圖:

    依下圖操作將下拉按鈕圖示 改為 圖示。

    2

    1

    1

    2

  • 豐富文字方塊與工具列

    12-25

    12 CHAPTER

    1

    2

    3

    4

    5

    6

  • 12-26

    您也可以用同樣的方式建立 ToolStripProgressBar 和 ToolStripSplitButton,我們

    就不再重複說明了。

    :StatusStripDemo.sln

    使用上面製作的狀態列來製作一個可切換圖片的程式。或由狀態列的 圖示

    開啟選項,您可以透過狀態列圖示 的 "第一張" 、"上一張" 、"下一張" 、

    "最末張" 功能選項來切換圖檔,圖檔載入完成狀態列的標籤即會顯示該圖檔的

    名稱。

    7

    8

  • 豐富文字方塊與工具列

    12-27

    12 CHAPTER

    執行結果

    操作步驟

    Step 01 將圖檔與執行檔放在相同路徑下。

    請將書附光碟 ch12/images 資料夾下的 "企鵝.jpg", "沙漠.jpg", "無尾熊.jpg", "菊花.jpg", "鬱金香.jpg" 五張圖複製到目前專案的bin/Debug資料夾下,使上述圖檔能與專案產生的執行檔在相同路徑下,以方便程式撰

    寫與讀取。

    Step 02 表單輸出入介面如下圖。

    pictureBox1

    toolStripStatusLabel1

    按此圖示出現功能

    選項進行圖片切換

    最末張 ToolStripMenuItem 下一張 ToolStripMenuItem 上一張 ToolStripMenuItem 第一張 ToolStripMenuItem

  • 12-28

    Step 03 撰寫程式碼:

    【程式碼】 檔名:Form1.cs 01 namespace StatusStripDemo

    02 {

    03 public partial class Form1 : Form

    04 {

    05 public Form1()

    06 {

    07 InitializeComponent();

    08 }

    09 // 宣告 num 整數變數用來記錄目前的圖片索引編號,0 表示第 1 張

    10 int num = 0;

    11

    12 // 建立 photo 字串陣列用來存放照片的名稱

    13 // 陣列元素索引範圍 photo[0]~photo[4]

    14 string[] photo = new string[]

    { "企鵝", "沙漠", "無尾熊", "菊花", "鬱金香" };

    15

    16 // 定義 ShowPic()方法,可在 pictureBox1 顯示目前的圖片

    17 // 在 toolStripStatusLabel1 顯示目前的圖片名稱

    18 void ShowPic()

    19 {

    20 // 在 pictureBox1 上顯示 photo[num]陣列元素的圖檔

    21 pictureBox1.Image = new Bitmap(photo[num] + ".jpg");

    22 toolStripStatusLabel1 .Text = "圖片名稱:" + photo[num];

    23 }

    24 // 表單載入時執行

    25 private void Form1_Load(object sender, EventArgs e)

    26 {

    27 pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

    28 ShowPic(); // 呼叫 ShowPic 方法在 pictureBox1 顯示圖片

    29 }

    30 // 按 [第一張] 執行

    31 private void 第一張 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    32 {

    33 num = 0;

  • 豐富文字方塊與工具列

    12-29

    12 CHAPTER

    34 ShowPic();

    35 }

    36 // 按 [上一張] 執行

    37 private void 上一張 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    38 {

    39 num--; // num 圖片索引編號減 1,表示顯示上一張

    40 // 若 num 圖片索引編號小於 1,則另 num 由最後一張開始

    41 if (num < 0)

    42 {

    43 num = photo.GetUpperBound(0);

    44 }

    45 ShowPic();

    46 }

    47 // 按 [下一張] 執行

    48 private void 下一張 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    49 {

    50 num++; // num 圖片索引編號加 1,表示顯示下一張

    51 // 若 num 圖片索引編號大於最後一張圖的索引編號

    52 // 則另 num 為 0,表示由第一張開始顯示

    53 if (num > photo.GetUpperBound(0))

    54 {

    55 num = 0;

    56 }

    57 ShowPic();

    58 }

    59 // 按 [最末張] 執行

    60 private void 最末張 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    61 {

    62 // 另 num 由最後一張索引編號開始

    63 num = photo.GetUpperBound(0);

    64 ShowPic();

    65 }

    66 }

    67 }

  • 12-30

    12.5 MenuStrip 功能表控制項

    MenuStrip 功能表控制項讓程式設計者可以輕鬆建立功能表,此功能表與

    Microsoft Office 中所提供的功能表類似,將功能分門別類置於下拉式清單中,需要

    時才取用非常節省版面空間。MenuStrip 和表單一樣是一個容器控制項,各功能選

    項圖示可依需求由下列中選取:

    1. MenuItem:此種選項前面可加勾選圖示、選項後面可加快速鍵,可建立多層

    功能選項。子選項可加分隔線來區隔選項。

    2. ComboBox:此種選項可建立下拉式清單,只可建立一層清單選項。

    3. TextBox:允許輸入文字。

    Windows Form 應用程式工具箱內提供兩個和功能表相關的工具,分別是

    功能表和 快顯功能表,兩者都繼承至 ToolStrip 工

    具列控制項。

    一. MentStrip 功能表內功能項目常用成員

    成員名稱 說明

    Checked 屬性 (預設值 False)

    項目前面是否以勾號顯示,如下圖。

    若為 False 表示不顯示勾號,若為 True 則顯示勾號。

    ShowShortcutKey 屬性 (預設值 True)

    設定是否顯示快捷鍵。

    ShortcutKey 屬性

    用來設定功能表項目右邊的快速鍵。快速鍵由 、

    、 鍵配合清單中指定的按鍵組合而成。

    譬如:[檔案/開檔] 是按 + 鍵相當於用滑鼠點選 [檔案 /開檔] 功能選項一樣,此快捷鍵有效必須先將

  • 豐富文字方塊與工具列

    12-31

    12 CHAPTER

    ShortCut 屬性設為 True。其設定方式如下:

    若欲取消快捷鍵設定按 鈕。

    DisplayStyle 屬性 (預設值為 ImageAndText)

    有 MenuItem 選項圖示才有提供此屬性,用來設定功能選項上面可顯示:無(None)、Text(限文字)、Image(限圖片)、文字與圖片(ImageAndText)。

    二. MenuStrup 功能表控制項的建立

    操作步驟

    Step 01 在工具箱中 功能表工具上快按兩下,會在目前表單的正下方產生一個名稱為 menuStrip1 功能表控制項。

    Step 02 建立功能表的項目。

    先選取在上圖表單正下方 menuStrip1 控制項,此時位於表單標題欄的

    正下方會產生 提示訊息。

    1

    2

    3

    4

  • 12-32

    接著在提示訊息輸入「檔案」,此舉相當於更改物件屬性視窗中的 Text

    屬性。

    完成上述設定之後,功能表選項物件的 Name 屬性會更名為「檔案

    ToolStripMenuItem」,Text 屬性更改為「檔案」。

    Step 03 建立檔案功能子選項。

    在 [檔案] 功能選項按一下,接著在下方出現的 上按一

    下,出現插入點游標,分別鍵入『新增(&N)』、『開檔(&N)』 兩子選

    項,「&」符號可將下一個字元加上底線。

  • 豐富文字方塊與工具列

    12-33

    12 CHAPTER

    欲設定 [檔案/新增] 功能子選項擁有 + 快速鍵,做法是先選取

    「新增」功能子選項,接著到屬性視窗的「ShortCutKeys」屬性上按一

    下,由出現的下拉鈕上按一下,勾選 「Ctrl」,按鍵選『N』。

    Step 04 在功能表內加入 ComboBox 下拉式清單功能表項目。

    在依圖示操作在下拉鈕按一下,由出現的清單選取 ComboBox,出現

    ComboBox 下拉式清單。

    1

    2

    3

    1

    2

  • 12-34

    選取新產生的下拉式清單,由對應的屬性視窗中,在 Items 屬性(集合) 右

    邊的 鈕上按一下,開啟「字串集合編輯器」,在輸入框中輸入「剪

    下」、「複製」、「貼上」,最後按 鈕完成清單項目設定。

    如下圖操作,將下拉式清單 Text 屬性設為 "編輯"。由於下拉式清單寬

    度太寬,透過 Size 屬性將寬度調窄,由原本的(121,20)改成(75,27)。

    12

    3

    13

    2

  • 豐富文字方塊與工具列

    12-35

    12 CHAPTER

    :MenuStripDemo.sln

    使用豐富文字方塊與 MenuStrip 功能表控制項製作下列記事本程式,其功能說

    明如下:

    [檔案(F)/開檔]:將 test.rtf 檔的內容載入到豐富文字方塊內。

    [檔案(F)/存檔]:將豐富文字方塊的內容寫回 test.rft 檔內。

    [檔案(F)/清除]:將豐富文字方塊的內容全部清除。

    [檔案(F)/結束]:結束程式。

    [項目符號] :將選取的文字建立項目符號清單。

    字型大小下拉式清單:依下拉式清單設定選取文字的字型大小,有 9、

    10、12、14、16 字型大小可供選擇。

    字型色彩下拉式清單:設定選取文字的前景色彩,有黑、紅、綠、藍四

    種色彩。

    執行結果

  • 12-36

    操作步驟

    Step 01 表單輸出入介面如下圖。

    Step 02 撰寫程式碼:

    FileName:Form1.cs 01 namespace MenuStripDemo

    02 {

    03 public partial class Form1 : Form

    04 {

    05 public Form1()

    06 {

    07 InitializeComponent();

    08 }

    09 // 表單載入時執行

    10 private void Form1_Load(object sender, EventArgs e)

    11 {

    12 // 豐富文字方塊填滿整個表單

    13 richTextBox1.Dock = DockStyle.Fill;

    14 }

    15 // 執行功能表的 [檔案/開檔] 指令執行

    16 private void 開檔 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    17 {

    richTextBox1

    開檔 ToolStripMenuItem存檔 ToolStripMenuItem清除 ToolStripMenuItem結束 ToolStripMenuItem

    cboSize 項目符號 ToolStripMenuItem cboFontColor

  • 豐富文字方塊與工具列

    12-37

    12 CHAPTER

    18 // 使用 try{...}catch{...}來補捉沒有檔案可能發生的例外

    19 try

    20 {

    21 // 將 test.rtf 檔的內容載入到 richTextBox1 豐富文字方塊內

    22 richTextBox1.LoadFile("test.rtf",

    RichTextBoxStreamType.RichText);

    23 }

    24 catch (Exception ex)

    25 {

    26 MessageBox.Show(ex.Message);

    27 }

    28 }

    29 // 執行功能表的 [檔案/存檔] 指令執行

    30 private void 存檔 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    31 {

    32 // 將 richTextBox1 豐富文字方塊內的資料儲存到 test.rtf 檔

    33 richTextBox1.SaveFile("test.rtf",

    RichTextBoxStreamType.RichText);

    34 }

    35 // 執行功能表的 [檔案/清除] 指令執行

    36 private void 清除 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    37 {

    38 richTextBox1.Text = "";

    39 }

    40 // 執行功能表的 [檔案/結束] 指令執行

    41 private void 結束 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    42 {

    43 Application.Exit();

    44 }

    45 // 執行功能表的 [項目符號] 指令執行

    46 private void 項目符號 ToolStripMenuItem_Click

    (object sender, EventArgs e)

    47 {

    48 richTextBox1.SelectionBullet = !richTextBox1.SelectionBullet;

    49 }

  • 12-38

    50 //cboSize 字型大小下拉式清單 SelectedIndex 屬性值改變時執行(即選取清單時執行)

    51 private void cboSize_SelectedIndexChanged

    (object sender, EventArgs e)

    52 {

    53 // 設定選取字型的樣式

    54 richTextBox1.SelectionFont =

    new Font(richTextBox1.Font.FontFamily.ToString(),

    float.Parse(cboSize.Text), richTextBox1.Font.Style);

    55 }

    56 // cboFontColor 字型色彩下拉式清單 SelectedIndex 屬性值改變時執行

    // (即選取下拉式清單時執行)

    57 private void cboFontColor_SelectedIndexChanged

    (object sender, EventArgs e)

    58 {

    59 if (cboFontColor.Text == "黑")

    60 {

    61 richTextBox1.SelectionColor = Color.Black;

    62 }

    63 else if (cboFontColor.Text == "紅")

    64 {

    65 richTextBox1.SelectionColor = Color.Red ;

    66 }

    67 else if (cboFontColor.Text == "綠")

    68 {

    69 richTextBox1.SelectionColor = Color.Green ;

    70 }

    71 else if (cboFontColor.Text == "藍")

    72 {

    73 richTextBox1.SelectionColor = Color.Blue ;

    74 }

    75 }

    76 }

    77 }

    /ColorImageDict > /JPEG2000ColorACSImageDict > /JPEG2000ColorImageDict > /AntiAliasGrayImages false /CropGrayImages true /GrayImageMinResolution 300 /GrayImageMinResolutionPolicy /OK /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth -1 /GrayImageMinDownsampleDepth 2 /GrayImageDownsampleThreshold 1.50000 /EncodeGrayImages true /GrayImageFilter /DCTEncode /AutoFilterGrayImages true /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict > /GrayImageDict > /JPEG2000GrayACSImageDict > /JPEG2000GrayImageDict > /AntiAliasMonoImages false /CropMonoImages true /MonoImageMinResolution 1200 /MonoImageMinResolutionPolicy /OK /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.50000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict > /AllowPSXObjects false /CheckCompliance [ /None ] /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile () /PDFXOutputConditionIdentifier () /PDFXOutputCondition () /PDFXRegistryName () /PDFXTrapped /False

    /CreateJDFFile false /Description > /Namespace [ (Adobe) (Common) (1.0) ] /OtherNamespaces [ > /FormElements false /GenerateStructure false /IncludeBookmarks false /IncludeHyperlinks false /IncludeInteractive false /IncludeLayers false /IncludeProfiles false /MultimediaHandling /UseObjectSettings /Namespace [ (Adobe) (CreativeSuite) (2.0) ] /PDFXOutputIntentProfileSelector /DocumentCMYK /PreserveEditing true /UntaggedCMYKHandling /LeaveUntagged /UntaggedRGBHandling /UseDocumentProfile /UseDocumentBleed false >> ]>> setdistillerparams> setpagedevice