C語言界面設(shè)計經(jīng)典教程ppt課件
《C語言界面設(shè)計經(jīng)典教程ppt課件》由會員分享,可在線閱讀,更多相關(guān)《C語言界面設(shè)計經(jīng)典教程ppt課件(220頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第9章Windows應(yīng)用程序設(shè)計基礎(chǔ) 1 C 是一種可視化的程序設(shè)計語言 Windows窗體和控件是開發(fā)C 應(yīng)用程序的基礎(chǔ) 窗體和控件在C 程序設(shè)計中扮演著重要的角色 在C 中 每個Windows窗體和控件都是對象 都是類的實(shí)例 窗體是可視化程序設(shè)計的基礎(chǔ)界面 是其他對象的載體和容器 控件是添加到窗體對象上的對象 每個控件都有自己的屬性 方法和事件以完成特定的功能 Windows應(yīng)用程序設(shè)計還體現(xiàn)了另外一種思維 即對事件的處理 2 本章將介紹建立Windows應(yīng)用程序 使用WindowsForms常用控件 菜單和多文檔界面設(shè)計等 同時向大家展示用Windows窗體來編寫程序的特點(diǎn)以及技巧 3 9 1Windows應(yīng)用程序的結(jié)構(gòu) VS NET集成開發(fā)環(huán)境是基于 NETFramework構(gòu)建的 該框架提供了一個有條理的 面向?qū)ο蟮?可擴(kuò)展的類集 它使用戶得以開發(fā)豐富的Windows應(yīng)用程序 通過Windows 窗體設(shè)計器 進(jìn)行設(shè)計窗體 用戶就可以創(chuàng)建Windows應(yīng)用程序和客戶機(jī) 服務(wù)器應(yīng)用程序 用戶可對窗體設(shè)定某些特性并在其上添加控件 然后編寫代碼以增加控件和窗體的功能 4 9 1Windows應(yīng)用程序的結(jié)構(gòu) VS NET提供了很多工具可以使應(yīng)用程序的開發(fā)快捷 可靠 這些工具包括 Windows窗體可視化設(shè)計器 識別代碼編輯器 集成的編譯和調(diào)試 項(xiàng)目管理工具 5 9 1Windows應(yīng)用程序的結(jié)構(gòu) 典型的Windows應(yīng)用程序通常包括窗體 Forms 控件 Controls 和相應(yīng)的事件 Events 下面通過C 設(shè)計實(shí)現(xiàn)一個簡單的計算器 要求能夠?qū)崿F(xiàn)基本的加 減 乘 除功能 并以這個 計算器 為例 來了解和掌握Windows應(yīng)用程序的一般開發(fā)過程 6 9 1 1計算器窗體 Windows窗體就是創(chuàng)立Windows應(yīng)用程序的框架 在VS NET中創(chuàng)建Windows應(yīng)用程序的第一步就是建立這個框架 操作步驟如下 1 運(yùn)行VS NET 在 起始頁 上單擊 新建項(xiàng)目 按鈕 打開 新建項(xiàng)目 對話框 如圖9 1所示 在 項(xiàng)目類型 列表框中指定項(xiàng)目的類型為 ViusalC 在 模板 列表框中選擇 Windows應(yīng)用程序 模板 在 名稱 文本框中輸入Calculator 在 位置 下拉列表中選定保存項(xiàng)目的位置 7 9 1 1計算器窗體 2 單擊 確定 按鈕后就進(jìn)入VS NET的主界面 如圖9 2所示 從圖9 2可以看出 當(dāng)選擇 Windows應(yīng)用程序 作為應(yīng)用程序的模板后 系統(tǒng)會自動為用戶生成一個空白窗體 一般名為Form1 該窗體就是應(yīng)用程序運(yùn)行時顯示給用戶的操作界面 下一步就是向窗體中添加各種控件 8 9 1 2計算器控件 控件表示用戶和程序之間的圖形化連接 控件可以提供或處理數(shù)據(jù) 接受用戶輸入 對事件做出響應(yīng)或執(zhí)行連接用戶和應(yīng)用程序的其他功能 因?yàn)榭丶举|(zhì)上是具有圖形接口的組件 所以它能通過組件所提供的功能并與用戶交互 窗體中的控件有很多 工具箱 中的 Windows窗體 里包含了所有Windows的標(biāo)準(zhǔn)控件 用戶還可以根據(jù)需要自己定義控件 通過在 屬性 窗口中改變控件的屬性可以改變的外觀和特性 9 9 1 2計算器控件 本例中需要用到如下所列的控件 1 按鈕 16個 10個數(shù)字按鈕分別用于表示0 9 4個運(yùn)算符按鈕表示 1個 計算 按鈕用于實(shí)施計算操作 1個 清空 按鈕用于清除上次計算結(jié)果 2 標(biāo)簽 1個 用于標(biāo)示計算結(jié)果所在的文本框 3 文本框 1個 用于顯示計算結(jié)果 10 9 1 2計算器控件 具體添加控件步驟如下 首先向窗體中添加按鈕 Button 具體操作為 在工具箱中單擊Button 然后移動鼠標(biāo)指針到窗體中的預(yù)定位置 按下左鍵拖動鼠標(biāo) 劃出一個方框 釋放鼠標(biāo)左鍵后 一個按鈕就被添加到剛才方框的位置了 調(diào)整好大小和位置后單擊選中該按鈕 在 屬性 窗口中可以看到該控件名為Button1 將該按鈕的Text屬性設(shè)置為 1 繼續(xù)在窗體中添加其余15個按鈕 并分別設(shè)置好它們的屬性 11 9 1 2計算器控件 界面設(shè)計已經(jīng)完成了 接下來的事情就是為各個控件添加相應(yīng)的事件代碼了 按照同樣的方法在窗體中添加一個標(biāo)簽 Label 設(shè)置其Text屬性為 結(jié)果 再添加一個文本框 TextBox 并設(shè)置其Text屬性為空 最后 一個簡單的計算器的界面就完成了 如圖9 3所示 12 9 1 3計算器事件 在C 中 基于Windows應(yīng)用程序設(shè)計方法是事件驅(qū)動的 事件驅(qū)動不是由程序的順序來控制的 而是由事件的發(fā)生來控制的 事件驅(qū)動程序設(shè)計是圍繞著消息的產(chǎn)生與處理而展開的 消息就是關(guān)于發(fā)生的事件的信息 Windows程序員的工作就是對所開發(fā)的應(yīng)用程序所要發(fā)出或者接收的消息進(jìn)行排序和管理 事件驅(qū)動程序方法提供了許多便利 對于那些需要大范圍用戶干預(yù)的應(yīng)用程序來說 更是很有用處 13 9 1 3計算器事件 在 窗體設(shè)計器 中看到的是窗體及其中的控件 而要為控件添加事件處理程序就必須先切換到代碼編輯器狀態(tài) 切換到代碼編輯器有以下幾種方法 1 雙擊窗體或者某控件 2 在解決方案資源管理器中右鍵單擊Form1 cs 從快捷菜單中選擇 查看代碼 命令 如果選擇 視圖設(shè)計器 則可以回到 窗體設(shè)計器 中 3 當(dāng)?shù)谝淮吻袚Q到代碼編輯器之后 在窗體標(biāo)題 Form1 cs 設(shè)計 的左邊會自動出現(xiàn)一個新的標(biāo)題 Form1 cs 單擊該標(biāo)題就可以切換到代碼編輯器 反之 如果單擊 Form1 cs 設(shè)計 則會切換到 窗體設(shè)計器 14 9 1 3計算器事件 下面分析一下計算器中各個控件到底應(yīng)該添加什么樣的代碼 對于計算器來說 當(dāng)單擊某個數(shù)字鍵后 結(jié)果顯示區(qū)內(nèi)應(yīng)顯示該鍵上的數(shù)字 因此 可以雙擊按鈕 1 切換到代碼編輯器 此時光標(biāo)就停留在該按鈕所對應(yīng)的代碼處 輸入下列代碼 privatevoidbtn1 Click objectsender EventArgse Buttonbtn Button sender textBox1 Text btn Text 15 9 1 3計算器事件 繼續(xù)給其他數(shù)字按鈕添加同樣的代碼 然后給4個運(yùn)算符按鈕添加下列代碼 privatevoidbtnAdd Click objectsender EventArgse Buttonbtn Button sender textBox1 Text textBox1 Text btn Text 空格用于分隔數(shù)字各運(yùn)算符 16 9 1 3計算器事件 privatevoidbtnSub Click objectsender EventArgse Buttonbtn Button sender textBox1 Text textBox1 Text btn Text 空格用于分隔數(shù)字各運(yùn)算符 privatevoidbtnMul Click objectsender EventArgse Buttonbtn Button sender textBox1 Text textBox1 Text btn Text 空格用于分隔數(shù)字各運(yùn)算符 17 9 1 3計算器事件 privatevoidbtnDiv Click objectsender EventArgse Buttonbtn Button sender textBox1 Text textBox1 Text btn Text 空格用于分隔數(shù)字各運(yùn)算符 接下來給 清空 按鈕添加如下代碼 privatevoidbtnClear Click objectsender EventArgse textBox1 Text 18 9 1 3計算器事件 最后給 計算 按鈕添加下列代碼 privatevoidbtnCalculate Click objectsender EventArgse Singler 用于保存計算結(jié)果stringt textBox1 Text t用于保存文本框中的算術(shù)表達(dá)式intspace t IndexOf 用于搜索空格位置strings1 t Substring 0 space s1用于保存第一個運(yùn)算數(shù)charop Convert ToChar t Substring space 1 1 op用于保存運(yùn)算符strings2 t Substring space 3 s2用于保存第二個運(yùn)算數(shù)Singlearg1 Convert ToSingle s1 將運(yùn)算數(shù)從string轉(zhuǎn)換為SingleSinglearg2 Convert ToSingle s2 19 9 1 3計算器事件 switch op case r arg1 arg2 break case r arg1 arg2 break case r arg1 arg2 break 20 9 1 3計算器事件 case if arg2 0 thrownewApplicationException else r arg1 arg2 break break default thrownewApplicationException 21 9 1 3計算器事件 將計算結(jié)果顯示在文本框中textBox1 Text r ToString 現(xiàn)在 所有的工作都完成了 在 調(diào)試 菜單中選擇 啟動 命令或者 開始執(zhí)行 不調(diào)試 命令運(yùn)行該應(yīng)用程序 計算器可以工作了 22 9 2Windows窗體 通過 計算器 這個例子 已初步了解了Windows應(yīng)用程序的結(jié)構(gòu) 下面具體介紹Windows應(yīng)用程序的設(shè)計和開發(fā) 一個應(yīng)用程序除了需要實(shí)現(xiàn)應(yīng)有的功能外 還必須具有良好的用戶界面 在C 中 Windows應(yīng)用程序的界面是以窗體 Form 為基礎(chǔ)的 窗體是Windows應(yīng)用程序的基本單位 用來向用戶展示信息和接受用戶的輸入 窗體可以是標(biāo)準(zhǔn)窗口 多文檔界面 MDI 窗口 對話框的顯示界面 23 9 2Windows窗體 窗體就好像一個容器 其他界面元素都可以放置在窗體中 C 中以類Form來封裝窗體 一般來說 用戶設(shè)計的窗體都是類Form的派生類 用戶窗體中添加其他界面元素的操作實(shí)際上就是向派生類中添加私有成員 當(dāng)新建一個Windows應(yīng)用程序項(xiàng)目時 C 就會自動創(chuàng)建一個默認(rèn)名為Form1的Windows窗體 24 9 2Windows窗體 Windows窗體由以下4部分組成 標(biāo)題欄控制按鈕邊界窗口區(qū) 25 9 2 1Windows窗體的基本屬性 Windows窗體的屬性可以決定窗體的外觀和行為 其中常用的屬性有 名稱 Name 屬性 標(biāo)題 Text 屬性 控制菜單屬性和影響窗體外觀的屬性 1 窗體的名稱屬性 Name Name用于設(shè)置窗體的名稱 該屬性值作為窗體的標(biāo)志 用于在程序中引用窗體 在初始新建一個Windows應(yīng)用程序項(xiàng)目時 自動創(chuàng)建一個窗體 該窗體的名稱被自動命名為Form1 添加第2個窗體時 其名稱被自動命名為Form2 依次類推 通常而言 在設(shè)計Windows窗體時 可給其Name屬性設(shè)置一個有實(shí)際含義的名字 26 9 2 1Windows窗體的基本屬性 2 窗體的標(biāo)題屬性 Text Text屬性用于設(shè)置窗體標(biāo)題欄顯示的內(nèi)容 它的值是一個字符串 通常 標(biāo)題欄顯示的內(nèi)容應(yīng)能概括地說明窗體的內(nèi)容或作用 例如 對于一個登錄窗體 其欄題欄設(shè)置為 歡迎登錄 27 9 2 1Windows窗體的基本屬性 3 窗體的控制菜單屬性在C 應(yīng)用程序中的Windows窗體 一般都顯示控制菜單 以方便用戶的操作 1 ControlBox屬性 該屬性用來設(shè)置窗體上是否有控制菜單 其默認(rèn)值True 窗體上顯示控制菜單 若將該屬性設(shè)置為False 則窗體上不顯示控制菜單 如圖9 4所示 28 9 2 1Windows窗體的基本屬性 2 MaximizeBox屬性 用于設(shè)置窗體上的最大化按鈕 其默認(rèn)值True 窗體上顯示最大化按鈕 若將該屬性設(shè)置為False 則窗體上不顯示最大化按鈕 3 MinimizeBox屬性 用于設(shè)置窗體上的最小化按鈕 其默認(rèn)值True 窗體上顯示最小化按鈕 若將該屬性設(shè)置為False 則窗體上不顯示最小化按鈕 29 9 2 1Windows窗體的基本屬性 4 設(shè)置窗體外觀的屬性 1 FormBorderStyle屬性 用于控制窗體邊界的類型 它有7個可選值 可選值說明如表9 1所示 30 9 2 1Windows窗體的基本屬性 2 Size屬性 用來設(shè)置窗體的大小 3 Location屬性 設(shè)置窗體在屏幕上的位置 即設(shè)置窗體左上角的坐標(biāo)值 4 BackColor屬性 用于設(shè)置窗體的背景顏色 可以從彈出的調(diào)色板中選擇 31 9 2 1Windows窗體的基本屬性 5 BackgroundImage屬性 用于設(shè)置窗體的背景圖像 6 Opacity屬性 該屬性用來設(shè)置窗體的透明度 5 設(shè)置窗體可見性的屬性窗體的可見性由Visible屬性來控制 32 9 2 2創(chuàng)建窗體 通常 在開發(fā)項(xiàng)目時 一個窗體往往不能滿足 通常需要用到多個窗體 C 提供了多窗體處理能力 在一個項(xiàng)目中可創(chuàng)建多個窗體 添加新窗體的方式如下 1 選擇項(xiàng)目菜單下的 添加Windows窗體 命令 打開 添加新項(xiàng) 對話框 如圖9 5所示 33 9 2 2創(chuàng)建窗體 2 在 添加新項(xiàng) 對話框的模板框內(nèi) 選擇 Windows窗體 模板 然后 單擊 打開 按鈕 就添加一個新的Windows窗體 完成添加窗體后 在解決方案資源管理器窗口中雙擊對應(yīng)的窗體 則在Windows窗體設(shè)計器中 可顯示該窗體 34 9 2 3設(shè)置啟動窗體屬性 當(dāng)在應(yīng)用程序中添加了多個窗體后 默認(rèn)情況下 應(yīng)用程序中的第一個窗體被自動指定為啟動窗體 在應(yīng)用程序開始運(yùn)行時 此窗體就會首先顯示出來 如果想實(shí)現(xiàn)在應(yīng)用程序啟動時 顯示別的窗體 那么就要設(shè)置啟動窗體 如何實(shí)現(xiàn)設(shè)置啟動窗體 請看例9 1 例9 1 C 設(shè)置啟動窗體 步驟如下 1 在一個項(xiàng)目中 添加兩個窗體 35 9 2 3設(shè)置啟動窗體屬性 2 在解決方案中 有一個Program cs文件 雙擊此文件 此時該文件的代碼如下所示 staticclassProgram staticvoidMain Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application Run newForm1 36 9 2 3設(shè)置啟動窗體屬性 3 要實(shí)現(xiàn)先啟動Form2 只需在Program cs文件中修改此行 Application Run newForm1 代碼為 Application Run newForm2 即可 4 運(yùn)行程序 先啟動的窗體為Form2 37 9 2 4窗體的顯示與隱藏 1 窗體的顯示如果要在一個窗體中通過按鈕打開另一個窗體 就必須通過調(diào)用Show 方法顯示窗體 語法如下 publicvoidShow 例9 2 在Form1窗體中添加一個Button按鈕 在按鈕的Click事件中調(diào)用Show 打開Form2窗體 代碼如下 privatevoidbutton1 Click objectsender EventArgse Form2frm2 newForm2 實(shí)例化Form2frm2 Show 調(diào)用Show方法顯示Form2窗體 38 9 2 4窗體的顯示與隱藏 2 窗體的隱藏通過調(diào)用Hide 方法隱藏窗體 語法如下 publicvoidHide 例9 3 通過登錄窗體登錄系統(tǒng) 輸入用戶名和密碼后 單擊 登錄 按鈕 隱藏登錄窗體 顯示主窗體 關(guān)鍵代碼如下 this Hide 調(diào)用Hide方法隱藏當(dāng)前窗體frmMainfrm newfrmMain 實(shí)例化frmMainfrm Show 調(diào)用Show方法顯示frmMain窗體 39 9 2 5窗體的事件 Windows是事件驅(qū)動的操作系統(tǒng) 對Form類的任何交互都是基于事件來實(shí)現(xiàn)的 Form類提供了大量的事件用于響應(yīng)對窗體執(zhí)行的各種操作 窗體設(shè)計人員往住關(guān)心窗體的加載和關(guān)閉 通常在加載時進(jìn)行界面和數(shù)據(jù)的初始化 在關(guān)閉前進(jìn)行資源的釋放等清理操作 也可以取消關(guān)閉操作 下面詳細(xì)介紹窗體的Click Load和FormClosing事件 40 9 2 5窗體的事件 1 Click 單擊 事件當(dāng)單擊窗體時 將會觸發(fā)窗體的Click事件 語法如下 publiceventEventHandlerClick 例9 4 在窗體的Click事件中編寫代碼 實(shí)現(xiàn)當(dāng)單擊窗體時 彈出提示框 代碼如下 privatevoidForm1 Click objectsender EventArgse MessageBox Show 已經(jīng)單擊了窗體 彈出提示框 41 9 2 5窗體的事件 程序的運(yùn)行如圖9 6所示 42 9 2 5窗體的事件 2 Load 加載 事件當(dāng)?shù)谝淮沃苯踊蜷g接調(diào)用Form Show方法來顯示窗體時 窗體就會進(jìn)行且只進(jìn)行一次加載 并且在必需的加載操作完成后會引發(fā)Load事件 通常 在Load事件響應(yīng)函數(shù)中執(zhí)行一些初始化操作 語法如下 publiceventEventHandlerLoad 43 9 2 5窗體的事件 例9 5 在下述程序 在窗體的Load事件中對窗體的大小 標(biāo)題 顏色等屬性進(jìn)行了設(shè)置 privatevoidForm1 Load objectsender EventArgse this Width 1000 this Height 500 this ForeColor Color Cyan this BackColor Color Red this Text Welcomeyou 44 9 2 5窗體的事件 程序的運(yùn)行如圖9 7所示 45 9 2 5窗體的事件 3 FormClosing 關(guān)閉 事件Form類的FormClosing事件是在窗體關(guān)閉時引發(fā)的事件 直接或間接調(diào)用Form Close 方法都會引發(fā)事件 在FormClosing事件中 通常進(jìn)行關(guān)閉前的確認(rèn)和資源釋放操作 語法如下 publiceventFormClosingEventHandlerFormClosing 例9 6 創(chuàng)建一個Windows應(yīng)用程序 實(shí)現(xiàn)當(dāng)關(guān)閉窗體之前 彈出提示框 詢問是否關(guān)閉當(dāng)前窗體 單擊 是 按鈕 關(guān)閉窗體 代碼如下 46 9 2 5窗體的事件 privatevoidForm1 FormClosing objectsender FormClosingEventArgse DialogResultdr MessageBox Show 是否關(guān)閉窗體 提示 MessageBoxButtons YesNo MessageBoxIcon Warning if dr DialogResult Yes 使用if語句判定是否單擊 是 按鈕 e Cancel false 如果單擊 是 按鈕則關(guān)閉窗體 else e Cancel true 否則 不執(zhí)行操作 47 9 2 5窗體的事件 程序的運(yùn)行如圖9 8所示 48 9 3窗體控件概述 控件是包含在窗體上的對象 是構(gòu)成用戶界面的基本元素 也是C 可視化編程的重要工具 使用控件可使程序的設(shè)計簡化避免大量重復(fù)性工作 簡化設(shè)計過程 有效地提高設(shè)計效率 對于一個程序開發(fā)人員而言 必須掌握每類控件的功能 用途 并掌握其常用的屬性 事件和方法 49 9 3窗體控件概述 在VS2005中 工具箱中包含了建立應(yīng)用程序的各種控件 工具箱分為Windows窗體 公共控件 容器 菜單和工具欄 數(shù)據(jù) 組件 打印 對話框等部分 常用的Windows窗體控件放在 Windows窗體 選項(xiàng)卡下 工具箱中有數(shù)十個常用的Windows窗體控件 它們以圖標(biāo)的方式顯示在工具箱中 其名稱顯示于圖標(biāo)的右側(cè) 50 9 3窗體控件概述 在介紹具體控件之前 首先在此探討一下各個控件共有的屬性 事件和方法 在C 中 所有的窗體控件 比如標(biāo)簽控件 文本框控件 按鈕控件等全部都是繼承于 System Windows Forms Control 作為各種窗體控件的基類 Control類實(shí)現(xiàn)了所有窗體交互控件的基本功能 Control類的屬性 方法和事件是所有窗體控件所公有的 而且其中很多是在編程中經(jīng)常會遇到的 51 9 3窗體控件概述 1 Control類的屬性Control類的屬性描述了一個窗體控件的所有公共屬性 可以在屬性 Properties 窗口中查看或修改窗體控件的屬性 常用的屬性如下 Name屬性每一個控件都有一個Name 名字 屬性 在應(yīng)用程序中 可通過此屬性來引用這個控件 C 會給每個新添加的控件指定一個默認(rèn)名 在應(yīng)用程序設(shè)計中 可根據(jù)需要將控件的默認(rèn)名字改成更有實(shí)際代表意義的名字 52 9 3窗體控件概述 Text屬性在C 中 每一個控件對象都有Text屬性 Text屬性在很多控件中都有重要的意義和作用 例如 在標(biāo)簽控件中顯示的文字 在文本框中用戶輸入的文字 組合框和窗體中的標(biāo)題等都是用控件的Text進(jìn)行設(shè)定的 對于Text屬性的設(shè)置過程及設(shè)置結(jié)果如圖9 9 9 10所示 53 9 3窗體控件概述 Anchor屬性Anchor的意思是 錨 那么Anchor屬性是用來確定此控件與其容器控件的固定關(guān)系的 在此 所謂容器控件是指什么呢 顧名思義 容器控件就是像一般的容器一樣可以存放別的控件的控件 例如 窗體控件中會包含很多的控件 像標(biāo)簽控件 文本框等 這時 稱包含控件的控件為容器控件或父控件 而里面的控件為子控件 顯然 這必然涉及到一個問題 即子控件與父控件的位置關(guān)系問題 即當(dāng)父控件的位置 大小變化時 子控件按照什么樣的原則改變其位置 大小 Anchor屬性就用于設(shè)置此原則 54 9 3窗體控件概述 對于Anchor屬性 可以設(shè)定Top Bottom Right Left中任意的幾種 設(shè)置的方法非常直觀 如圖9 11所示 55 9 3窗體控件概述 圖9 11中選中變黑的方位即為設(shè)定的控件方位 圖中所示的方位為Top Left Bottom 此時 如果容器控件變化 子控件將保證其上邊緣與容器上邊的距離 左邊緣與容器左邊的距離 底邊與容器底邊的距離 其運(yùn)行效果如圖9 12所示 56 9 3窗體控件概述 Dock屬性Dock屬性規(guī)定了子控件與父控件的邊緣依賴關(guān)系 Dock的效果 如圖9 13所示 Dock的值有6種 分別是Top Bottom Left Right Fill 最后還有默認(rèn)值None 一旦Dock值被設(shè)定 子控件就會發(fā)生變化與父控件選定的邊緣相融在一起 57 9 3窗體控件概述 2 Control類的方法可以調(diào)用Control類的方法來獲得控件的一些信息 或者設(shè)置控件的屬性值及行為狀態(tài) 例如 Focus方法可設(shè)置此控件獲得的焦點(diǎn) Refresh方法可重畫控件 Select方法可激活控件 Show方法可顯示控件等 58 9 3窗體控件概述 3 Control類的事件在C 中 當(dāng)用戶進(jìn)行某一項(xiàng)操作時 會引發(fā)某個事件的發(fā)生 此時就會調(diào)用事件處理程序代碼 實(shí)現(xiàn)對程序的控制 事件驅(qū)動實(shí)現(xiàn)是基于窗體的消息傳遞和消息循環(huán)機(jī)制的 在C 中 所有的機(jī)制都被封裝在控件之中 極大方便了編寫事件的驅(qū)動程序 如果希望能夠更加深入地操作 或定義自己的事件 就需要聯(lián)合使用委托 Delegate 和事件 Event 可以靈活地添加 修改事件的響應(yīng) 并自定義事件的處理方法 例如 Control類的可響應(yīng)的事件有 單擊時發(fā)生的Click事件 雙擊時發(fā)生的DoubleClick事件 取得焦點(diǎn)時發(fā)生的GetFocus事件 鼠標(biāo)移動時發(fā)生的MouseMove事件等 59 9 4常用控件 窗體是由一個個控件構(gòu)成的 因此熟悉控件是進(jìn)行合理 有效的程序開發(fā)的重要前提 本節(jié)內(nèi)容將針對Windows窗體應(yīng)用程序中常見的控件進(jìn)行詳細(xì)介紹 60 9 4 1按鈕控件 按鈕 Button 是用戶與應(yīng)用程序交互的最常用的工具 它用于接收用戶的操作信息 去執(zhí)行預(yù)先規(guī)定的命令 觸發(fā)相應(yīng)的事件過程 以實(shí)現(xiàn)指定的功能 1 常用屬性 1 Text屬性該屬性用于設(shè)定按鈕上顯示的文本 該屬性也可為按鈕創(chuàng)建快捷方式 其方法是在作為快捷鍵的字母前加一個 字符 則在程序運(yùn)行時 命令按鈕上該字母帶有下劃線 該字母就成為快捷鍵 例如 某個按鈕的Text屬性設(shè)置為 Display 程序運(yùn)行時 就會顯示為 Display 61 9 4 1按鈕控件 2 FlatStyle屬性該屬性指定了按鈕的外觀風(fēng)格 它有4個可選值 分別是 Flat Popup System Standard 該屬性的默認(rèn)值為Standard 3 Image屬性用于設(shè)定在按鈕上顯示的圖形 4 ImageAlign屬性當(dāng)圖片顯示在命令按鈕上時 可以通過ImageAlign屬性調(diào)節(jié)其在按鈕上的位置 5 Enable屬性用于設(shè)定控件是否可用 不可用 則用灰色表示 6 Visible屬性用于設(shè)定控件是否可見 不可見 則隱藏 注意 上述的屬性中 前4項(xiàng)為外觀屬性 而后2項(xiàng)為行為屬性 62 9 4 1按鈕控件 2 響應(yīng)的事件如果按鈕具有焦點(diǎn) 就可以使用鼠標(biāo)左鍵 Enter鍵或空格鍵觸發(fā)該按鈕的Click事件 當(dāng)使用ShowDialog方法顯示窗體時 可以使用按鈕的DialogResult屬性指定ShowDialog的返回值 例9 7 按鈕控件的運(yùn)用 1 為窗體Form1添加一個計數(shù)器nCounter 并添加3個按鈕控件 分別完成遞增計數(shù)器 遞減計數(shù)器 通過消息框提示計數(shù)器的值的功能 并添加1個Label控件來顯示每次運(yùn)算后的計數(shù)器值 完成的窗體界面如圖9 14所示 63 9 4 1按鈕控件 2 設(shè)置窗體和各控件的屬性 如表9 2所示 64 9 4 1按鈕控件 3 切換到代碼窗口 創(chuàng)建事件過程 privateintnCounter 第一次加載時 進(jìn)行計數(shù)器和lblResult的初始化privatevoidForm1 Load objectsender EventArgse this nCounter 50 this ShowCounter 進(jìn)行遞增操作 并提示新值privatevoidbtnInc Click objectsender EventArgse this nCounter this ShowCounter 65 9 4 1按鈕控件 進(jìn)行遞減操作 并提示新值privatevoidbtnDes Click objectsender EventArgse this nCounter this ShowCounter 通過MessageBox提示當(dāng)前的值privatevoidbtnMsg Click objectsender EventArgse stringstrMsg 當(dāng)前計數(shù)器 this nCounter ToString D8 MessageBox Show strMsg 提示 66 9 4 1按鈕控件 顯示計數(shù)器值到Label控件lblResultprivatevoidShowCounter stringstrMsg this nCounter ToString D8 this lblResult Text strMsg 67 9 4 1按鈕控件 程序運(yùn)行結(jié)果如圖9 15所示 68 9 4 2標(biāo)簽控件 標(biāo)簽 Label 主要用來顯示文本 通常用標(biāo)簽來為其他控件顯示說明信息 窗體的提示信息 或者用來顯示處理結(jié)果等信息 但是 標(biāo)簽顯示的文本不能被直接編輯 除了顯示文本外 標(biāo)簽還可使用Image屬性顯示圖像 或使用ImageIndex和ImageList屬性組合顯示圖像 69 9 4 2標(biāo)簽控件 1 常用屬性 1 Text屬性該屬性用于設(shè)定標(biāo)簽顯示的文本 可通過TextAlign屬性設(shè)置文本的對齊方式 2 BorderStyle屬性該屬性用于設(shè)定標(biāo)簽的邊框形式 共有3個設(shè)定值 分別是None FixedSingle Fixed3D 該屬性的默認(rèn)值為None 3 BackColor屬性用于設(shè)定標(biāo)簽的背景色 4 ForeColor屬性用于設(shè)定標(biāo)簽中文本的顏色 5 Font屬性用于設(shè)定標(biāo)簽中文本的字體 大小 粗體 斜體 刪除線等 70 9 4 2標(biāo)簽控件 6 Image屬性用于設(shè)定標(biāo)簽的背景圖片 可通過ImageAlign屬性設(shè)置圖片的對齊方式 7 Enable屬性用于設(shè)定控件是否可用 不可用 則用灰色表示 8 Visible屬性用于設(shè)定控件是否可見 不可見 則隱藏 9 AutoSize屬性用于設(shè)定控件是否根據(jù)文本自動調(diào)整 設(shè)置為true表示自動調(diào)整 注意 上述的屬性中 前6項(xiàng)為外觀屬性 而后3項(xiàng)為行為屬性 71 9 4 2標(biāo)簽控件 2 響應(yīng)的事件標(biāo)簽控件常用的事件有 Click事件和DoubleClick事件 72 9 4 2標(biāo)簽控件 例9 3 標(biāo)簽控件的運(yùn)用 對窗體上的3個標(biāo)簽控件的參數(shù)進(jìn)行設(shè)置 用來顯示文本 程序代碼如下 privatevoidForm1 Load objectsender EventArgse label1參數(shù)設(shè)置 默認(rèn)字體為宋體9號 前景色為黑色this label1 AutoSize true this label1 BackColor System Drawing Color White this label1 Text 宋體9號 白底 黑字 73 9 4 2標(biāo)簽控件 label2參數(shù)設(shè)置 默認(rèn)字體為宋體9號 前景色為黑色this label2 AutoSize true this label2 BackColor System Drawing Color Black this label2 Font newSystem Drawing Font 宋體 10 5F System Drawing FontStyle Regular System Drawing GraphicsUnit Point byte 134 this label2 ForeColor System Drawing Color White this label2 Text 宋體10號 黑底 白字 74 9 4 2標(biāo)簽控件 label3參數(shù)設(shè)置this label3 AutoSize true this label3 BackColor System Drawing Color Blue this label3 Font newSystem Drawing Font 楷體 GB2312 14 25F System Drawing FontStyle Regular System Drawing GraphicsUnit Point byte 134 this label3 ForeColor System Drawing Color Red this label3 Text 楷體14號 藍(lán)底 紅字 75 9 4 2標(biāo)簽控件 程序運(yùn)行結(jié)果如圖9 16所示 76 9 4 3文本框控件 在C 中 文本框 TextBox 是最常用的和最簡單的文本顯示和輸入控件 文本框有兩種用途 一是可以用來輸出或顯示文本信息 二是可以接受從鍵盤輸入的信息 1 常用屬性 1 Text屬性該屬性用于設(shè)定文本框顯示的文本 可通過TextAlign屬性設(shè)置文本的對齊方式 2 BackColor屬性用于設(shè)定文本框的背景色 3 ForeColor屬性用于設(shè)定文本框中文本的顏色 77 9 4 3文本框控件 4 Font屬性用于設(shè)定文本框中文本的字體 大小 粗體 斜體 刪除線等 5 PasswordChar屬性文本框控件以密碼輸入方式使用 輸入字母用該屬性指定字符屏蔽 6 Enable屬性用于設(shè)定文本框控件是否可用 不可用 則用灰色表示 7 Visible屬性用于設(shè)定文本框控件是否可見 不可見 則隱藏 8 ReadOnly屬性用于設(shè)定文本框控件是否只讀 9 MultiLine屬性用于設(shè)定文本框控件是否包多行文本 注意 上述的屬性中 前5項(xiàng)為外觀屬性 而后4項(xiàng)為行為屬性 78 9 4 3文本框控件 2 常用的方法 1 Clear方法用于清除文本框中已有的文本 2 AppendText方法用于文本框最后追加文本 79 9 4 3文本框控件 3 常用的事件在文本框控件所能響應(yīng)的事件中 TextChanged Enter和Leave是常用的事件 1 TextChanged事件當(dāng)文本框的文本內(nèi)容發(fā)生變化時 觸發(fā)該事件 當(dāng)向文本框輸入信息時 每輸入一個字符 就會引發(fā)一次TextChanged事件 2 Enter事件當(dāng)文本框獲得焦點(diǎn)時 就會引發(fā)的事件 3 Leave事件當(dāng)文本框失去焦點(diǎn)時 就會引發(fā)的事件 80 9 4 3文本框控件 例9 9 文本框控件的運(yùn)用 實(shí)現(xiàn)步驟如下 1 為窗體Form1添加2個TextBox控件 tbInput和tbHint 前者可編輯單行文本 用來獲取用戶輸入 后者用于顯示數(shù)據(jù) 應(yīng)設(shè)置為只讀多行文本 同時 再添加1個Label控件lblCopy 用來顯示輸入文本框中數(shù)據(jù) 81 9 4 3文本框控件 2 在此例中 通過程序代碼設(shè)置相應(yīng)的控件的屬性 主要程序代碼如下 privatevoidForm1 Load objectsender EventArgse 設(shè)置2個文本框的屬性this tbInput ForeColor Color Blue this tbHint BackColor Color White this tbHint ForeColor Color Green this tbHint ReadOnly true 82 9 4 3文本框控件 privatevoidtbInput Enter objectsender EventArgse 光標(biāo)進(jìn)入清除原有文本this tbInput Clear privatevoidtbInput Leave objectsender EventArgse 焦點(diǎn)退出 將文本添加到tbHint新的一行this tbHint AppendText this tbInput Text Environment NewLine 83 9 4 3文本框控件 privatevoidtbInput TextChanged objectsender EventArgse 將當(dāng)前tbInput中文本內(nèi)容同步顯示到lblCopy中this lblCopy Text this tbInput Text 注意 在tbInput Leave事件中將編輯好的文本通過方法TextBox AppendText 追加tbHint中 在tbInput TextChanged事件中將tbInput中最新的文本同步顯示到lbCopy控件上 程序運(yùn)行結(jié)果如圖9 17所示 84 9 4 4單選按鈕控件 單選按鈕 RadioButton 控件為用戶提供由兩個或多個互斥選項(xiàng)組成的選項(xiàng)集 當(dāng)用戶選中某單選項(xiàng)按鈕時 同一組中的其他單選項(xiàng)按鈕不能同時選定 該控件以圓圈內(nèi)加點(diǎn)的方式表示選中 單選按鈕用來讓用戶在一組相關(guān)的選項(xiàng)中選擇一項(xiàng) 因此單選按鈕控件總是成組出現(xiàn) 直接添加到一個窗體中的所有單選按鈕將形成一個組 若要添加不同的組 必須將它們放到面板或分組框中 將若干RadionButton控件放在一個GroupBox控件內(nèi)組成一組時 當(dāng)這一組中的某個單選按鈕控件被選中時 該組中的其他單選控件將自動處于不選中狀態(tài) 85 9 4 4單選按鈕控件 1 常用屬性 1 Text屬性該屬性用于設(shè)置單選按鈕旁邊的說明文字 以說明單選按鈕的用途 2 Check屬性表示單選按鈕是否被選中 選中則Checked值為True 否則為False 2 響應(yīng)的事件單選按鈕響應(yīng)的事件主要是Click事件和CheckedChanged事件 當(dāng)鼠標(biāo)單擊單選按鈕時 觸發(fā)Click事件 并且改變Checked屬性值 Checked屬性值的改變 同時將觸發(fā)CheckedChanged事件 86 9 4 4單選按鈕控件 例9 10 單選按鈕控件的運(yùn)用 通過選擇不同的單選按鈕 實(shí)現(xiàn)在文本框中顯示不同水果的價格 實(shí)現(xiàn)步驟如下 1 創(chuàng)建如圖9 18所示的窗體 87 9 4 4單選按鈕控件 2 設(shè)置窗體和各控件的屬性 如表9 3所示 88 9 4 4單選按鈕控件 3 打開代碼窗口 編寫事件過程 privatevoidrdoApple CheckedChanged objectsender EventArgse txtPrice Text 10 0 privatevoidrdoBanana CheckedChanged objectsender EventArgse txtPrice Text 8 5 89 9 4 4單選按鈕控件 privatevoidrdoPineapple CheckedChanged objectsender EventArgse txtPrice Text 12 5 90 9 4 5復(fù)選框控件 復(fù)選按鈕 CheckBox 控件 它與單選按鈕一樣 也給用戶提供一組選項(xiàng)供其選擇 但它與單選按鈕有所不同 每個復(fù)選框都是一個單獨(dú)的選項(xiàng) 用戶既可以選擇它 也可以不選擇它 不存在互斥的問題 可以同時選擇多項(xiàng) 1 常用屬性 1 Text屬性 該屬性用于設(shè)置復(fù)選框旁邊的說明文字 以說明復(fù)選框的用途 2 Check屬性 表示復(fù)選框是否被選擇 True表示復(fù)選框被選擇 False表示復(fù)選框未被選擇 91 9 4 5復(fù)選框控件 3 CheckState屬性 反映該復(fù)選框的狀態(tài) 有3個可選值 Checked 表示復(fù)選框當(dāng)前被選中 Unchecked 表示復(fù)選框當(dāng)前未被選中 Indeterminate 表示復(fù)選框當(dāng)前狀態(tài)未定 此時該復(fù)選框呈灰色 2 響應(yīng)的事件復(fù)選框響應(yīng)的事件主要是Click事件 CheckedChanged事件和CheckStateChanged事件 當(dāng)鼠標(biāo)單擊復(fù)選框時 觸發(fā)Click事件 并且改變Checked屬性值和CheckState屬性值 Checked屬性值的改變 同時將觸發(fā)CheckedChanged事件 CheckState屬性值的改變 同時將觸發(fā)CheckStateChanged事件 92 9 4 5復(fù)選框控件 例9 11 復(fù)選框控件的運(yùn)用 通過選擇不同的復(fù)選框 實(shí)現(xiàn)輸出選中的業(yè)余愛好 實(shí)現(xiàn)步驟如下 1 創(chuàng)建一個Windows窗體應(yīng)用的程序 添加如圖9 19所示的控件 2 編寫 確定 按鈕btnOk和 退出 btnExit的代碼 其中 確定 按鈕功能為顯示一個對話框 輸出用戶用戶所填內(nèi)容 退出 按鈕功能為結(jié)束程序 93 9 4 5復(fù)選框控件 94 9 4 5復(fù)選框控件 3 程序的完整代碼如下 usingSystem usingSystem Collections Generic usingSystem ComponentModel usingSystem Data usingSystem Drawing usingSystem Text usingSystem Windows Forms namespaceUseCheckBox publicpartialclassForm1 Form 95 9 4 5復(fù)選框控件 publicForm1 InitializeComponent 檢查用戶輸入的信息是否有效privatevoidtxtName Validating objectsender CancelEventArgse if txtName Text Trim string Empty MessageBox Show 姓名為空 請重新輸入 txtName Focus 96 9 4 5復(fù)選框控件 privatevoidbtnExit Click objectsender EventArgse this Close 97 9 4 5復(fù)選框控件 privatevoidbtnOk Click objectsender EventArgse stringstrUser string Empty strUser 姓名 txtName Text n strUser strUser 業(yè)余愛好 chkMovie Checked 電影 chkMusic Checked 音樂 chkSport Checked 體育 n DialogResultresult MessageBox Show strUser 信息確認(rèn) MessageBoxButtons OKCancel MessageBoxIcon Information MessageBoxDefaultButton Button1 if result DialogResult OK txtName Clear chkMovie Checked false chkMusic Checked false chkSport Checked false 98 9 4 5復(fù)選框控件 privatevoidbtnExit MouseEnter objectsender EventArgse txtName CausesValidation false privatevoidbtnExit MouseLeave objectsender EventArgse txtName CausesValidation true 99 9 4 5復(fù)選框控件 單擊 信息確認(rèn) 對話框中的 確定 按鈕 將會清除已輸入的內(nèi)容 包括復(fù)選框的選中狀態(tài) 程序運(yùn)行 輸入相應(yīng)的內(nèi)容 如圖9 20所示 單擊 確定 按鈕后 彈出的對話框如圖9 21所示 100 9 4 5復(fù)選框控件 說明 代碼中用到了MessageBox的另一個構(gòu)造方法 這種方法使得MessageBox的外觀更加多樣化 包括了MessageBox的標(biāo)題 Title 圖標(biāo) MessageBoxIcons 的按鈕 MessageBoxButtons 另外 程序中還編寫了btnExit的Enter和Leave事件 目的是為了在單擊 退出 按鈕時 不引發(fā)TextBox控件的Validating事件 防止多余的提示 在Leave事件中又恢復(fù)TextBox控件的Validating事件 讀者可以先刪除該段代碼 以查看相應(yīng)的效果 101 9 4 6列表框 列表框 ListBox 控件提供一個項(xiàng)目列表 用戶可以從中選擇一項(xiàng)或多項(xiàng) 在列表框內(nèi)的項(xiàng)目稱為列表框 列表項(xiàng)的加入是按一定的順序進(jìn)行的 這個順序號稱為索引號 列表框內(nèi)列表項(xiàng)的索引號是從0開始的 即第一個加入的列表項(xiàng)索引號為0 其余索引項(xiàng)的索引號依次類推 102 9 4 6列表框 1 常用屬性 1 Items屬性通過該屬性 設(shè)置或獲取列表框的項(xiàng) 用戶可以事先在屬性窗口中設(shè)置 也可以在程序中進(jìn)行設(shè)置 2 Multicolumn屬性用于設(shè)置列表框是否多列列表框 默認(rèn)值為False 表示列表項(xiàng)一單列顯示 103 9 4 6列表框 3 SelectionMode屬性該屬性用于設(shè)定列表框選擇屬性 共有4個可選值 None 表示不允許進(jìn)行選擇 One 表示只允許選擇其中一項(xiàng) 此值為默認(rèn)值 MultiSimple 表示允許同時選擇多個列表項(xiàng) MultiExtended 用鼠標(biāo)和Shift鍵組合可以選擇連續(xù)的列表項(xiàng) 用鼠標(biāo)和Ctrl鍵組合可以選擇不連續(xù)的列表項(xiàng) 104 9 4 6列表框 4 SelectedItem屬性獲取或設(shè)置列表框中的當(dāng)前選定項(xiàng) 5 SelectedItems屬性獲取或設(shè)置列表框中當(dāng)前選定項(xiàng)的集合 6 SelectedIndex屬性獲取或設(shè)置列表框中的當(dāng)前選定項(xiàng)的從零開始的索引 在編程時 用戶可以捕獲該屬性值 然后根據(jù)該值來進(jìn)行相應(yīng)的動作 注意 上述的屬性中 前2項(xiàng)為外觀屬性 而后4項(xiàng)為行為屬性 105 9 4 6列表框 2 響應(yīng)的事件列表框控件除了能響應(yīng)常用的Click DoubleClick GotFocus LostFocus等事件外 還可響應(yīng)特有的SelectedIndexChanged事件 SelectedIndexChanged事件 當(dāng)用戶改變列表中的選擇時 將會觸發(fā)此事件 106 9 4 6列表框 3 常用的方法列表框的列表項(xiàng)可以在屬性窗口中通過Item屬性來設(shè)置 也可以在應(yīng)用程序中用Items Add或Items Insert方法來添加 用Items Remove或Items Clear方法刪除 1 Items Add方法Items Add方法的功能是把一個列表項(xiàng)加入列表框的底部 其一般格式如下 Listname Items Add Item 其中 Listname是列表控件的名稱 Items是要加入列表框的列表框 必須是一個字符串表達(dá)式 107 9 4 6列表框 2 Items Insert方法Items Insert方法的功能是把一個列表項(xiàng)插入到列表框的指定位置 其一般格式如下 Listname Items Insert Index 列表項(xiàng) 其中 Index是新增列表項(xiàng)在列表框中的指定位置 Index值為0時 表示列表項(xiàng)添加到列表框的第一個位置 3 Items Remove方法Items Remove方法的功能是清除列表框中的指定列表項(xiàng) 其一般格式如下 Listname Items Remove Item 108 9 4 6列表框 Items Clear方法Items Clear方法的功能是清除列表框中的所有列表項(xiàng) 其一般格式如下 Listname Items Clear 109 9 4 6列表框 例9 12 列表框控件的運(yùn)用 1 創(chuàng)建一個Windows窗體應(yīng)用程序 在窗體上添加如圖9 22所示的控件 其中 ListBox控件名稱如圖所示 4個按鈕的名稱依次為btnRight btnRightAll btnLeftAll和btnLeft 2 更改lstLeft控件的Items屬性 彈出如圖9 23所示的字符串集合編輯器 依次輸入星期日 星期一 星期二 星期三 星期四 星期五和星期六 單擊 確定 按鈕 得到如圖9 24所示的窗體 3 編寫各個按鈕的代碼 功能為使得ListBox控件的選項(xiàng)在lstLeft和lstRight控件之間移動 并將記錄輸出到lstBottom列表框控件中 110 9 4 6列表框 111 9 4 6列表框 4 完整的程序代碼如下 usingSystem usingSystem Collections Generic usingSystem ComponentModel usingSystem Data usingSystem Drawing usingSystem Text usingSystem Windows Forms namespaceUseListBox publicpartialclassForm1 Form 112 9 4 6列表框 publicForm1 InitializeComponent 113 9 4 6列表框 privatevoidbtnRight Click objectsender EventArgse if lstLeft SelectedItems Count 0 return else lstRight Items Add lstLeft SelectedItem lstBottom Items Add lstLeft SelectedItem ToString 被移至右側(cè) lstLeft Items Remove lstLeft SelectedItem 114 9 4 6列表框 privatevoidbtnRightAll Click objectsender EventArgse foreach objectiteminlstLeft Items lstRight Items Add item lstBottom Items Add 左側(cè)列表項(xiàng)被全部移至右側(cè) lstLeft Items Clear 115 9 4 6列表框 privatevoidbtnLeftAll Click objectsender EventArgse foreach objectiteminlstRight Items lstLeft Items Add item lstBottom Items Add 右側(cè)列表項(xiàng)被全部移至左側(cè) lstRight Items Clear 116 9 4 6列表框 privatevoidbtnLeft Click objectsender Ev- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
30 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言 界面設(shè)計 經(jīng)典 教程 ppt 課件
鏈接地址:http://www.3dchina-expo.com/p-5883252.html