290 likes | 482 Views
視窗程式設計. Class 5 教師:黃聖方. 第八章. 特殊控制項. 8-1 圖形處理控制項. PictureBox 可用來顯示圖形。 支援點陣圖 (BMP) 、 GIF 、 JPEG 、 Metafile 或圖示格式的圖形。 載入圖片方法: 設計階段時,在屬性視窗中找「 Image 」,直接選擇來源檔之路徑。 利用程式碼來載入 例:在程式中建立了一個名為 pictureBox1 的控制項 pictureBox1.Image = System.Drawing.Image.FromFile(Filename);
E N D
視窗程式設計 Class 5 教師:黃聖方
第八章 特殊控制項
8-1 圖形處理控制項 • PictureBox • 可用來顯示圖形。 • 支援點陣圖(BMP)、GIF、JPEG、Metafile或圖示格式的圖形。 • 載入圖片方法: • 設計階段時,在屬性視窗中找「Image」,直接選擇來源檔之路徑。 • 利用程式碼來載入 例:在程式中建立了一個名為pictureBox1的控制項 pictureBox1.Image = System.Drawing.Image.FromFile(Filename); 註1:Filename為String型態,代表圖檔的路徑檔名 註2:類別Image在System.Drawing命名空間中,可直接using該命名空間,以省去輸入的麻煩。 • 圖片可以在設計階段先使用Image屬性先載入到此控制項中,再透過Visible屬性設定是否隱藏。 pictureBox1.Visible = true; //可見;反之,設為false代表隱藏。
其他功能 • 將放在pictureBox1控制項的圖片,設成隨著控制項大小縮放 • pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; • 其他載圖模式(以下僅列兩種,其他可見屬性視窗): • PictureBoxSizeMode.AutoSize; //大小與原圖一致,隨原圖縮放 • PictureBoxSizeMode.Normal; //原圖原比例呈現,控制項不隨原圖縮放 • 改變座標位置 • pictureBox1.Top = 430; • pictureBox1.Left = 10; • 改變尺寸 • Picture1.Size = new Size(height, width); • 註:height, width為指定的高度與寬度;型態為int。 • 清除載入的圖檔 • pictureBox1.Image = null ;
利用PictureBox播放動畫 • 播放框架動畫 • 載入gif圖檔 • 如載入的gif圖檔為動態圖,則載入PictureBox會自動根據其內容來播放內容。 • 除去圖檔背景 • 首先,gif本身必須已經經過去背處理。 • 點選PictureBox的BackColor,在Web分頁中選擇Transparent。
8-1 圖形處理控制項(續) 二. ImageList控制項 • 圖形的陣列。 • 每一張圖的大小皆一致(可在ImageSize中指定;欲設為16x16) • 可由工具箱取用,或在程式碼中自行建立。 • 此控制項的作用是來將一些點陣圖、小圖示等集合在一起,構成一個圖形庫清單,方便程式中作圖形管理,或給其他控制項使用。 • 在Windows Form工具箱中含有ImageList屬性的控制項有:Label、Button、RadioButton、CheckBox、TabControl、ToolBar、TreeView、ListView等控制項。 • 一旦您在表單上建好一個名稱為imageList1影像清單控制項時,這些控制項內的ImageList屬性下拉式清單中都會有一個名稱為imageList1影像清單供您選取使用。
8-1 圖形處理控制項(續) • 如何在程式執行階段存取ImageList? • 在程式執行階段,建立控制項名稱(Name)為imageList1的影像清單物件,其寫法為: imageList imageList1 = new ImageList() ; • 將下列小圖示(Icons)放入imageList1影像清單控制項,寫法如下:imageList1.Images.Add(Bitmap.FromFile("C:\myIcon1.bmp")) ; 或 imageList1.Images.Add(Image.FromFile("C:\myIcon2.bmp")); ※註:檔名的路徑可以給相對路徑;Image為抽象類別,Bitmap為繼承Image的圖形類別,原則上可以通用,但Bitmap比原來的Image類別多了一些專為點矩陣圖形打造的屬性與方法。 • 將imageList1影像清單指定給listView1控制項的SmallImageList屬性,其寫法為: listView1.SmallImageList = imageList1 ;
8-10 檔案控制項 • System.IO命名空間 當您執行功能表的 [檢視/其它視窗/物件瀏覽器] 指令,出現「物件(O)」瀏覽器選取「mscorlib/System.IO」,可以看到 .NET Framework將有關資料串流和檔案進行同步和非同步存取的類別都放在System.IO命名空間之下。 • FileSystemInfo類別FileSystemInfo類別產生的物件可以表示檔案或目錄,因此可以做為 FileInfo 或 DirectoryInfo 物件的基礎。所以,有很多目錄(資料夾)和檔案類別的成員直接由FileSystemInfo基礎類別繼承而來。
DirectoryInfo類別 • 目錄相關資訊類別主要用來獲取資料夾屬性與用來建立資料夾和搬移資料夾的工作。
DirectoryInfo類別 • 檢查有效之磁槽 string driveLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; foreach (char c in driveLetters) { try { directory = new DirectoryInfo(c+“:\\”); //根據指定的路徑建立資料夾物件 if (directory.Exists == true) //根據Exists屬性來判斷該資料夾是否存在 comboBox1.Items.Add(c + ":"); } catch(Exception doh) { ; } }
8-10 檔案控制項(續) • FileInfo類別 FileInfo類別主要用來建檔、複製、搬移、刪除以及檔案屬性等工作 。
8-10 檔案控制項(續) • Path類別 此處的路徑是指含有提供檔案或目錄路徑資訊位置的字串實體。 註:路徑類別可以用支援跨平台的路徑格式。
8-10 檔案控制項(續) 二. OpenFileDialog、SaveFileDialog 控制項 FileDialog檔案對話方塊是 .NET Windows Forms下所提供許多通用對話方塊之一。它是屬於抽象類別,而且無法直接被執行實體化,也就是說不能從這個類別繼承。FileDialog類別可細分成OpenFileDialog和SaveFileDialog兩種類別,由於兩者都是繼承FileDialog而來,因此兩者的屬性和方法相近。在表單上欲建立開啟或儲存檔案的對話方塊就必須使用 開啟檔案對話方塊工具或是 儲存檔案對話方塊來完成。
8-8 TreeView與ListView檢視控制項 • TreeView控制項 在Windows下,有關檔案的維護大都是透過「檔案總管」來管理,檔案總管如下圖分成左右兩個窗格,左窗格以樹狀結構來顯示資料夾,這是使用工具箱的樹狀檢視工具做出來的,至於右窗格顯示該資料夾下的檔案清單是使用工具箱的清單工具做出來的。
TreeView • 由節點(TreeNode)構成,每個節點又有自己的子節點(Nodes成員變數),可以直接從屬性視窗中的Nodes屬性直接自訂節點。以下為TreeView之常用功能:
TreeView的程式範例 • 以下範例示範當下拉式選單中磁碟分割改變後,如何更新TreeView的目錄清單
TreeView的事件處理 • 以下範例示範TreeView的展開按鈕被點開後(BeforeExpand),如何更新節點中子節點列表(折疊節點的事件請見BeforeCollapse):
將ImageList與TreeView繫結 • 指定ImageList給TreeView的ImageList屬性 • 由屬性視窗中,該屬性的下拉式選單中來選擇 • TreeView中的ImageIndex: • 代表子節點的圖片:指定ImageList中圖片的編號 • TreeView中的SelectedImageIndex: • 如果子節點被選擇所顯示的圖片 • 每一個節點(TreeNode)中有一個ImageIndex屬性,可自行指定要顯示的圖片 • 例如:可以在BeforeExpand事件產生時指定給節點(e.Node)一個圖片,在BeforeCollapse產生時再給他另一個圖片。
ListView 二. ListView控制項 ListView控制項和ListBox類似,都會顯示項目清單,兩者主要的差異在ListView允許操作者可以如「我的電腦」或「檔案總管」的檔案視窗的檢視功能一樣可使用小圖示、大圖示、詳細檢視、垂直清單等其中一種來顯示清單內的項目。如下圖即是將ListView 控制項的View屬性設成Detail詳細檢視。
ListView的顯示效果 • 在屬性View中可選擇ListView中列表的方式 • LargeIcon:如檔案總管中「縮圖」的模式,大圖示將根據LargeImageList中所指定的ImageList來顯示。 • Details:如檔案總管中「詳細資料」的模式,每一行都有欄位 • 欄位的title透過Columns來定義 • 每一列的內容可以透過Items來指定 • 每個Item的其他column可由SubItems來指定 • FullRowSelect代表選取時是否為選整列(是的話給true) • SmallIcon:顯示小圖示,項目的文字出現在圖示右方,小圖示將根據SmallImageList中所指定的ImageList來顯示。 • 註:如果View為Detail,且SmallImageList有指定ImageList,則每列之前也會出現小圖示。
ListView程式範例 • 如何加入新項目並與ImageList當中的圖片連結?
8-5 功能表控制項 • MainMenu 為一個容器控制項,該控制項是由 MenuItem 物件所組成,這些物件即是構成功能表架構中的各子功能的命令 • 當您在目前Form1表單上建立預設名稱為「mainMenu1」的MainMenu主功能表控制項,Visual C# .NET會自動將「mainMenu1」控制項的名稱繫結(Binding)到Form1表單的Menu屬性內。 • 常用事件:Click事件。
8-5 功能表控制項(續) • 範例 功能表實作(p8-28) 製作一個簡單的功能表,此功能表包括字型、顏色、大小等功能,每個功能如下圖都各有子功能。將各子功能的設定改變表單上面lblShow標籤控制項的相關屬性,並顯示其結果。
8-6 ContextMenu/ ContextMenuStrip • 當您使用Windows時是否常在某個選項上壓滑鼠右鍵出現快顯功能表。 • 使用Windows Form工具箱內工具在表單中建立ContextMenu控制項,Visual C# .NET便會將此控制項繫結到表單含有ContextMenu屬性的控制項中供你選取使用。 • Visual C# .NET允許表單中建立多個不同的ContextMenu控制項,您可由各控制項的ContextMenu屬性的下拉式清單中去選取合適的快顯功能表。 步驟: • 在ContextMenu控制項點兩下,該控制項將出現在畫面下方,在上面點選一下可以編輯Menu的內容。 • 點選欲出現ContextMenu的控制項,找到一個名為ContextMenu的屬性後,在下拉式選單中選擇繫結的ContextMenu名稱。
8-6 ContextMenu控制項(續) 下圖即是一個TextBox文字控制項建立一個具有刪除、複製、貼上功能的快顯功能表 。
在標籤頁中右按滑鼠直接加入或刪除標籤頁 8-7 標籤頁控制項(TabControl) 當您設計表單時,若表單上有很多控制項時,您可以使用GroupBox控制項加以分類;也可使用Panel面板控制項以捲軸方式來配置;另外一種方式就是使用工具在表單中建立標籤頁(TabPage)方式來設計,將同一性質的控制項放在同一標籤頁,以多個標籤頁在視窗中固定區做切換顯示不但省空間且整齊不混亂。