版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
教案首頁第1次課授課時間:課程名稱可視化程序設(shè)計年級大二下專業(yè)層次信息與計算教師付勇智專業(yè)技術(shù)職務(wù)講師學(xué)時2授課題目(章、節(jié))第一章Windows可視化程序設(shè)計方法基本教材參考用書《MicrosoftC#Windows程序設(shè)計》(上下冊)CharlesPetzold著天宏工作室譯北京大學(xué)出版社教學(xué)目的與要求:1.本章學(xué)習(xí)目的與要求:學(xué)習(xí)應(yīng)用程序用戶交互方式的主要類別,掌握可視化程序設(shè)計的基本概念方法和工具的使用,了解可視化程序設(shè)計技術(shù)的主要方法和發(fā)展歷史,大體明白Microsoft.NET平臺的架構(gòu)組成以其各組成組件之間的彼此關(guān)系;初步掌握MicrosoftVisualStudio.NET開發(fā)環(huán)境的使用方法。2.本節(jié)學(xué)習(xí)目的與要求:在理解可視化程序設(shè)計技術(shù)的方法及工具的基礎(chǔ)上,重點掌握應(yīng)用MicrosoftVisualStudio.NET開發(fā)環(huán)境編寫可視化應(yīng)用程序的方法。教學(xué)內(nèi)容與時間安排,教學(xué)方法:1.教學(xué)內(nèi)容與時間安排⑴可視化程序設(shè)計概念(10min)⑵桌面應(yīng)用程序的開發(fā)方法(5min)⑶Windows平臺應(yīng)用程序開發(fā)技術(shù)(5min)⑷Microsoft.NET程序開發(fā)技術(shù)(40min)(5)VisualStudio.NET使用基礎(chǔ)(30min)2.教學(xué)方法:講授法、問答法、討論法和演示法。教學(xué)重點、難點:在本節(jié)課的教學(xué)內(nèi)容中,VisualStudio.NET使用方法和項目管理組織形式為教學(xué)重點;Microsoft.NET程序開發(fā)技術(shù)及.NET平臺的組成及工作原理為本節(jié)課的難點。授課方法及手段:在授課過程中以講授法為主,輔助于問答法、討論法和演示法。基本理論講授采用講授法和演示法進行,課堂知識的鞏固采用討論法進行,本節(jié)教學(xué)測量采用問答法進行。為了增加單位課時的信息量,應(yīng)用多媒體技術(shù)組織教學(xué)過程;為了保證學(xué)生對所學(xué)內(nèi)容的實際掌握能力,應(yīng)當(dāng)在介紹相關(guān)概念和理解后,通過多媒體及時演示在VisualStudio.NET開發(fā)環(huán)境中管理項目和編寫控制臺應(yīng)用程序以及可視化應(yīng)用程序的步驟和過程。教案續(xù)頁基本內(nèi)容(講稿)備注第一章Windows可視化程序設(shè)計方法1.可視化程序設(shè)計概念應(yīng)用程序的類別:控制臺應(yīng)用程序(ConsoleApp):傳統(tǒng)的字符環(huán)境應(yīng)用程序,用戶通過鍵盤和顯示器文字輸出交互(總體過時)(STDIO)桌面應(yīng)用程序(DesktopApp):程序主要以窗體、按鈕、菜單、對話框、滾動條等組成,用戶通過鼠標(biāo)、鍵盤進行所見即所得的方式與系統(tǒng)交互(桌面應(yīng)用主流)(SDK、OWL、MFC、WinForm)Web應(yīng)用程序(WebApp):用戶通過瀏覽器(IE、Firefox)訪問網(wǎng)頁的方式同遠(yuǎn)端服務(wù)器進行交互(網(wǎng)絡(luò)應(yīng)用主流)(ASP.Net、JSP/Serverlet、PHP)多媒體應(yīng)用程序(MultimediaApp):用戶通過視頻、音頻的方式,更加直觀的同系統(tǒng)交互(電腦游戲)(Directx、OpenGL)2.桌面應(yīng)用程序的開發(fā)方法桌面應(yīng)用程序的開發(fā)通常是在傳統(tǒng)語言程序設(shè)計方法的基礎(chǔ)上,針對不同操作系統(tǒng)擴展對應(yīng)的窗口函數(shù)庫來進行。WindowsApp=Language+Function(SDK)當(dāng)前主流平臺:WindowsUnixXWindowMacOS3.Windows平臺應(yīng)用程序開發(fā)技術(shù)C+WindowsSDK(1985-2000)C+++MFC(1993-2002)Delphi+OWL/VCL(1992-2004)C+++OWL/VCL(1994-2001)Basic+Runtime(1992-2001)Java+Swing(1996-?)ASM+LIB(非主流)C#+.NET(2001-?)Basic+.NET(2001-?)4.Microsoft.NET程序開發(fā)技術(shù).NET的組成:CLR+CTSCLR公共語言運行時(CommonLanguageRuntime):C#.NET、VB.NET、VC++.NETManaged編寫的程序經(jīng)過編譯后所生成的.exe文件并不是底層CPU能夠執(zhí)行的機器語言代碼,而是一種中間語言-MSIL的代碼格式(類似Java中的ByteCode)MSIL的代碼在執(zhí)行前經(jīng)過Just-In-Time即時編譯轉(zhuǎn)換成目標(biāo)平臺的機器語言并執(zhí)行,完成這一工作的就是CLR。CLR實際就類似Java的虛擬機,在不同CPU結(jié)構(gòu)的機器上只要具備CLR,就能運行.NET程序,這樣就實現(xiàn)了平臺的無關(guān)性。.NET中將各種系統(tǒng)功能調(diào)用封裝為一個龐大的面向?qū)ο蟮念悗欤瑿TS公用類別系統(tǒng)(CommonTypeSystem)CTS采用類似Java的Namespace(命名空間)的層次式機制來組織整個類庫根據(jù)所編寫應(yīng)用程序的類別不同,所調(diào)用的類庫也不相同編寫本課程中的WindowsForms桌面應(yīng)用程序主要用到CTS中三個命名空間下的系統(tǒng)類:System 基本的系統(tǒng)對象,如字符串處理、數(shù)學(xué)函數(shù)等System.Drawing 主要的圖形處理函數(shù)System.Windows.Forms 用戶控件,如窗體、按鈕、對話框在編寫程序的過程中,通常需要對以上三個命名空間及其對應(yīng)的動態(tài)鏈接庫進行引用,具體方法稍后介紹C#程序編譯運行的過程CLR.NET平臺的虛擬機Microsoft.NETFramework要運行.NET程序,則需要有CRL和CTS,這兩者的總體就叫做Microsoft.NETFramework(.NET框架類庫)Windows操作系統(tǒng)從WindowsXP開始把.NET框架類庫作為操作系統(tǒng)的一個組成部分進行發(fā)布。開發(fā)所使用的.NET框架類庫版本必須和運行環(huán)境所裝Framework版本相同,高版本并不兼容低版本。同一操作系統(tǒng)可以同時安裝多個版本的.NET框架類庫Microsoft提供了一個簡化的Framework版本,以支持智能設(shè)備運用程序的開發(fā),稱為.NETCompactFramwork,主要運行在WindowsCE和WindowsMobile平臺上Windows/VisualStudio/Framework版本對應(yīng)表VisualStudio版本.NETFramework版本最低Windows版本VisualStudio.NETV1.0WindowsXPVisualStudio2003.NETV1.1WindowsXPSP2VisualStudio2005.NETV2.0WindowsVistaVisualStudio2008.NETV3.5WindowsServer2008Windows7VisualStudio2010.NETV4.0
VisualStudio2012.NETV4.5Windows8VisualStudio.NET使用基礎(chǔ)VisualStudio項目組織方式:VS中最高層的項目組織單位是:解決方案(Solution),一個解決方案對應(yīng)多個程序?qū)m棧≒roject)。解決方案文件以.sln結(jié)尾。專項(Project)是VS中的基本管理單元,是編譯的主體。VS中一個專項通常由單一語言編寫的多個源程序模塊組成,編譯后對應(yīng)生成一個可執(zhí)行程序(.exe)或動態(tài)鏈接庫模塊(.dll)。C#的程序?qū)m椢募?csproj結(jié)尾,VB.NET的專項以.vbproj結(jié)尾。源程序文件(CodeFile)是程序員所編寫的代碼,在C#中,源程序文件以.cs結(jié)尾,通常一個源程序文件對應(yīng)一個class的定義。解決方案的創(chuàng)建方法1(創(chuàng)建空解決方案)File->New->ProjectOtherProjectTypes->VisualStudioSolutions->BlankSolultion方法2(創(chuàng)建專項同時建立解決方案)程序?qū)m椀膭?chuàng)建新建空白專項File->New->ProjectVisualC#->Windows->EmptyProject添加對dll庫文件的引用右鍵點擊專項之下的References,選擇AddReferences按住Ctrl鍵,同時選中System.dll,System.Drawing.dll,System.Windows.Froms.dll,并確認(rèn)。源程序文件的創(chuàng)建右鍵點擊專項,選擇Add->AddNewItem選擇CodeFile類型,并為所創(chuàng)建源程序文件命名HelloWorldC#版C語言版#include<stdio.h>voidmain(){ printf(“HelloWorld!\n”);}C#版usingSystem;classHelloWorld{ publicstaticvoidMain() { Console.WriteLine(“HelloWorld!”); }}HelloWorldC#Windows版usingSystem;usingSystem.Windows.Forms;classHelloWorldWin{ publicstaticvoidMain() { MessageBox.Show(“HelloWorld!”); }}操作過程步驟1.創(chuàng)建Solution步驟2.創(chuàng)建Project步驟3.設(shè)置對類庫.dll的引用步驟4.創(chuàng)建程序文件.cs步驟5.編寫代碼步驟6.編譯生成.exe步驟7.執(zhí)行程序教案末頁小結(jié)本節(jié)主要教學(xué)內(nèi)容:⑴可視化程序設(shè)計概念⑵桌面應(yīng)用程序的開發(fā)方法⑶Windows平臺應(yīng)用程序開發(fā)技術(shù)⑷Microsoft.NET程序開發(fā)技術(shù)(5)VisualStudio.NET使用基礎(chǔ)Windows平臺可視化程序設(shè)計技術(shù):本門課程介紹使用C#語言在.NET環(huán)境下調(diào)用WindowsForms相關(guān)組件,開發(fā)基于Windows操作系統(tǒng)下的桌面應(yīng)用程序的方法及工具。。復(fù)習(xí)思考題及作業(yè)題實驗一目的:熟悉VisualStudio2008.NET的操作任務(wù):編寫C#程序,分別以命令行和提示框的方式輸出你的姓名及學(xué)號撰寫實驗報告課后作業(yè)預(yù)習(xí)面向?qū)ο蟪绦蛟O(shè)計的基本概念并對以下名詞進行解釋:類、對象、封裝屬性、方法、構(gòu)造函數(shù)函數(shù)重載(FunctionOverloading)繼承虛函數(shù)(VirtualFunction)教案首頁第2次課授課時間:課程名稱可視化程序設(shè)計年級大二下專業(yè)層次信息與計算教師付勇智專業(yè)技術(shù)職務(wù)講師學(xué)時2授課題目(章、節(jié))第二章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)(面向?qū)ο蟪醪剑┗窘滩膮⒖加脮禡icrosoftC#Windows程序設(shè)計》(上下冊)CharlesPetzold著天宏工作室譯北京大學(xué)出版社教學(xué)目的與要求:1.本章學(xué)習(xí)目的與要求:學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計的基本概念與方法;掌握類與對象的關(guān)系,類的數(shù)據(jù)成員與方法成員,類成員的修飾詞的使用方法;類的實例化過程,類的屬性及在存取獨立控制中的應(yīng)用。2.本節(jié)學(xué)習(xí)目的與要求:在分析結(jié)構(gòu)化程序設(shè)計方法和面向?qū)ο蟪绦蛟O(shè)計方法異同點的基礎(chǔ)上,重點掌握類、對象、字段、方法、屬性等相關(guān)概念及其應(yīng)用。教學(xué)內(nèi)容與時間安排,教學(xué)方法:1.教學(xué)內(nèi)容與時間安排⑴高級程序設(shè)計語言的發(fā)展(5min)⑵結(jié)構(gòu)化程序設(shè)計要點回顧(5min)⑶結(jié)構(gòu)化程序設(shè)計不足點分析及其解決方法分析(20min)⑷面向?qū)ο蟪绦蛟O(shè)計與結(jié)構(gòu)化程序設(shè)計的關(guān)系(10min)(5)類與對象的概念(10min)(6)類的定義、類的成員及其存取權(quán)限(25min)(7)類的屬性及其應(yīng)用(15min)2.教學(xué)方法:講授法、問答法、討論法和演示法。教學(xué)重點、難點:在本節(jié)課的教學(xué)內(nèi)容中,類和對象的概念以及類的組成成員為教學(xué)重點;面向?qū)ο蟪绦蛟O(shè)計的主要思想及三大特點為本節(jié)課的難點。授課方法及手段:在授課過程中以講授法為主,輔助于問答法、討論法和演示法?;纠碚撝v授采用講授法和演示法進行,課堂知識的鞏固采用討論法進行,本節(jié)教學(xué)測量采用問答法進行。為了增加單位課時的信息量,應(yīng)用多媒體技術(shù)組織教學(xué)過程。為了保證學(xué)生對所學(xué)內(nèi)容的實際掌握能力,應(yīng)當(dāng)在介紹相關(guān)概念和理解后,通過實例程序的演示加深學(xué)生對面向?qū)ο蟪绦蛟O(shè)計相關(guān)概念的理解。教案續(xù)頁基本內(nèi)容(講稿)備注第二章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)1.編程語言的發(fā)展結(jié)構(gòu)化程序設(shè)計語言特點:以函數(shù)為整個程序的總體組織結(jié)構(gòu)變量+語句+函數(shù)庫例如:C、Basic、Pascal、Fortran、Algo等。面向?qū)ο蟪绦蛟O(shè)計語言特點:以類作為程序的基本結(jié)構(gòu)單元類、對象、類成員、類庫例如:Smalltalk、C++、Java、C#、VB.NET、Objective-C等2.結(jié)構(gòu)化程序設(shè)計要點回顧程序中主要采用:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)方式。程序的處理對象是變量:包括整型、浮點型、雙經(jīng)度浮點數(shù)、字符型、指針型、結(jié)構(gòu)體、枚舉類型等較為初級的數(shù)據(jù)形式,數(shù)據(jù)間彼此獨立,關(guān)聯(lián)性小。函數(shù)是程序的主要功能單元和組織單元。缺點:隨著解決問題的復(fù)雜和程序規(guī)模的增長,變量數(shù)目和函數(shù)數(shù)目大幅度增加,造成程序代碼難以管理,容易出錯,以及調(diào)試?yán)щy。3.結(jié)構(gòu)化程序設(shè)計不足點分析及其解決方法分析封裝性:將程序中涉及到的變量,根據(jù)彼此的相關(guān)程度封裝在一起,把對這些數(shù)據(jù)的操作也同時封閉在一起,在封閉的實體內(nèi)部函數(shù)可以自由的對屬于本實體的數(shù)據(jù)變量進行操作,除非特別允許,其他實體外部的函數(shù)一般不允許對本實體內(nèi)的數(shù)據(jù)進行訪問,從而降低誤操作發(fā)生的可能性。繼承性:可以在原有實體基礎(chǔ)上進行擴展,得到新的實體,新實體具有原實體的所有特點,同時又增加了新的特點。例如:醫(yī)院的病人體檢信息管理系統(tǒng)中,有管理所有病人基礎(chǔ)信息的實體(所有病人都具有的數(shù)據(jù)),同時在此基礎(chǔ)上又可以派生出男病人和女病人不同的專門體檢科目數(shù)據(jù),繼續(xù)往下還可以針對男女病人分為35歲以上和35歲以下的不同體檢科目分別進行處理。多態(tài)性:不同的類型的實體,只要他們滿足相同的接口,都能夠接入到系統(tǒng)中,不用修改代碼就能夠直接適應(yīng)和調(diào)用不同的實體完成相關(guān)操作。例如:不管的白炙燈還是節(jié)能燈、不管是8W、15W、還是60W,不管是發(fā)白光、紅光,還是綠光,只要燈頭的接口規(guī)格一致,都能連接到同一個燈座上,并發(fā)光。同樣道理,水龍頭也是一個很好的說明多態(tài)性的例子。4.面向?qū)ο蟪绦蛟O(shè)計與結(jié)構(gòu)化程序設(shè)計的關(guān)系面向?qū)ο蟪绦蛟O(shè)計是解決大規(guī)模程序設(shè)計問題的一種方法,是結(jié)構(gòu)化程序設(shè)計技術(shù)的發(fā)展和在更高層次的演化。面向?qū)ο蟪绦蛟O(shè)計技術(shù)和結(jié)構(gòu)化程序設(shè)計在程序設(shè)計過程中同時存在,只是所處的層次不同,結(jié)構(gòu)化程序設(shè)計方法處理比較細(xì)節(jié)的問題,而面向?qū)ο蠓椒ㄌ幚砀叱橄髮哟蔚膯栴}實體。在面向?qū)ο蠹夹g(shù)中,類的各成員函數(shù)還是以結(jié)構(gòu)化的方式實現(xiàn)的。兩種方法的關(guān)注點不同:結(jié)構(gòu)化的關(guān)注點是函數(shù)過程;面向?qū)ο箨P(guān)注的是對象的數(shù)據(jù)及其上的操作,抽象程度更高。5.類與對象的概念把握面向?qū)ο缶幊痰淖詈诵母拍顝念惻c對象開始什么是類?什么是對象?這兩者有何差別?為什么理解這兩個概念的差別至關(guān)重要?類是一個模板或藍(lán)圖對象根據(jù)模板創(chuàng)建出來,它擁有模板所定義的所有特性,但不同的對象其相同特性的取值可以不相同VS的類庫瀏覽系統(tǒng)VisualStudio.NET中提供了一個很方便的查詢?yōu)g覽類庫結(jié)構(gòu)及其組成的工具ObjectBrowser(對象瀏覽器),通過點擊菜單ViewObjectBrowser就可以打開對象瀏覽器,對類庫中組成的各個類的成員字段和方法進行瀏覽。6.類的定義、類的成員及其存取權(quán)限類的定義C#使用class關(guān)鍵字定義一個類。publicclassMyClass{publicintPublicField=0;privateintPrivateField=0;publicvoidPrintValue(){}}類的成員變量字段(field)函數(shù)方法(method)字段和方法統(tǒng)稱為類的“成員(member)”類成員的存取權(quán)限三種最基本的數(shù)據(jù)存取權(quán)限:1public:公有,外界可自由訪問2private:私有,僅自身的方法可以訪問3protected:保護,自身或者派生類可以訪問開發(fā)建議:僅有需要被外界訪問的成員才設(shè)置為public的。類的使用方法//創(chuàng)建對象MyClassobj=newMyClass();//通過對象變量訪問公有字段obj.PublicField=100;//X,不允許直接訪問類私有成員obj.PrivateField=200;//通過對象變量訪問公有方法obj.PrintValue();“類”小結(jié)從MyClass示例中可以知道類的定義和使用方法:(1)用new關(guān)鍵字創(chuàng)建“類的實例(即對象)”(2)用“類”類型的變量(稱為“對象變量”)來保存對創(chuàng)建出來的對象的引用;(3)通過對象變量來訪問對象的公有成員(包括方法與字段)7.類的另一種成員——“屬性”屬性=字段+get/set方法屬性的要點當(dāng)讀取屬性值時,get方法被調(diào)用當(dāng)向?qū)傩再x值時,set方法被調(diào)用定義一個“屬性”的步驟定義一個私有字段用于存儲屬性數(shù)據(jù)。設(shè)計一個get方法,當(dāng)讀取屬性值時,向外界返回私有字段的當(dāng)前值。設(shè)計一個set方法,當(dāng)向?qū)傩再x值時,其自動隱含的value參數(shù)保存外界傳入的值,應(yīng)將此值傳給前面定義的私有字段。教案末頁小結(jié)本節(jié)主要教學(xué)內(nèi)容:⑴高級程序設(shè)計語言的發(fā)展⑵結(jié)構(gòu)化程序設(shè)計要點回顧⑶結(jié)構(gòu)化程序設(shè)計不足點分析及其解決方法分析⑷面向?qū)ο蟪绦蛟O(shè)計與結(jié)構(gòu)化程序設(shè)計的關(guān)系(5)類與對象的概念(6)類的定義、類的成員及其存取權(quán)限(7)類的屬性及其應(yīng)用復(fù)習(xí)思考題及作業(yè)題實驗三設(shè)計一個Student類,包容一個字段Name(學(xué)生姓名)和一個屬性Score(考試成績)。編寫示例代碼:(1)程序運行時,要求用戶輸入姓名和考試成績(2)程序輸出:XXX,你通過(或沒通過)了考試(成績大于等于60分)或XXX,你掛科了(成績小于60分)?;騒XX,你輸入的成績有誤(輸入數(shù)據(jù)超出范圍)。要點:有效的成績?yōu)閇0,100]教案首頁第3次課授課時間:課程名稱可視化程序設(shè)計年級大二下專業(yè)層次信息與計算教師付勇智專業(yè)技術(shù)職務(wù)講師學(xué)時2授課題目(章、節(jié))第二章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)(續(xù))基本教材參考用書《MicrosoftC#Windows程序設(shè)計》(上下冊)CharlesPetzold著天宏工作室譯北京大學(xué)出版社教學(xué)目的與要求:1.本章學(xué)習(xí)目的與要求:繼續(xù)學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計的相關(guān)概念與方法;掌握構(gòu)造函數(shù)、函數(shù)重載的概念;詳細(xì)理解C#語言兩種不同存儲類型的使用;深入理解類的成員屬性與靜態(tài)屬性的差異,并掌握其使用條件。2.本節(jié)學(xué)習(xí)目的與要求:在掌握面向?qū)ο蟪绦蛟O(shè)計基本概念的基礎(chǔ)上,重點掌握構(gòu)造函數(shù)、函數(shù)重載、值類型、引用類型、類的成員屬性與靜態(tài)屬性等相關(guān)概念及其應(yīng)用。教學(xué)內(nèi)容與時間安排,教學(xué)方法:1.教學(xué)內(nèi)容與時間安排(1)對象的創(chuàng)建——構(gòu)造函數(shù)(15min)(2)什么叫函數(shù)重載(Overload)?(20min)(3)兩種不同的內(nèi)存類型(Type)(20min)(4)奇特的關(guān)鍵字:this(25min)(5)類的“實例成員”與“靜態(tài)成員”(20min)2.教學(xué)方法:講授法、問答法、討論法和演示法。教學(xué)重點、難點:在本節(jié)課的教學(xué)內(nèi)容中,類和對象的概念以及類的組成成員為教學(xué)重點;面向?qū)ο蟪绦蛟O(shè)計的主要思想及三大特點為本節(jié)課的難點。授課方法及手段:在授課過程中以講授法為主,輔助于問答法、討論法和演示法。基本理論講授采用講授法和演示法進行,課堂知識的鞏固采用討論法進行,本節(jié)教學(xué)測量采用問答法進行。為了增加單位課時的信息量,應(yīng)用多媒體技術(shù)組織教學(xué)過程。為了保證學(xué)生對所學(xué)內(nèi)容的實際掌握能力,應(yīng)當(dāng)在介紹相關(guān)概念和理解后,通過實例程序的演示加深學(xué)生對面向?qū)ο蟪绦蛟O(shè)計相關(guān)概念的理解。教案續(xù)頁基本內(nèi)容(講稿)備注第二章面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)1.對象的創(chuàng)建——構(gòu)造函數(shù)通過new關(guān)鍵字創(chuàng)建一個對象當(dāng)對象創(chuàng)建時,一個特殊的函數(shù)被調(diào)用,此函數(shù)被稱為——構(gòu)造函數(shù)!類的構(gòu)造函數(shù):函數(shù)名稱與類名稱相同的函數(shù)publicclassMyClass{publicMyClass(){}; //缺省構(gòu)造函數(shù)publicMyClass(stringinfo){} //構(gòu)造函數(shù)二(重載)}一個類可以有多個構(gòu)造函數(shù),這些構(gòu)造函數(shù)構(gòu)成“重載(overload)”關(guān)系。在程序?qū)嶋H運行時,依據(jù)參數(shù)決定調(diào)用哪個構(gòu)造函數(shù)。有關(guān)構(gòu)造函數(shù)問:類的構(gòu)造函數(shù)有什么用?答:構(gòu)造函數(shù)多用于初始化類的字段?!皩ο笞兞俊钡钠饰鰧ο笞兞坑糜凇耙谩币粋€真實的對象。2.什么叫函數(shù)重載(Overload)?構(gòu)成重載的方法擁有以下特征:1.方法名相同2.方法參數(shù)列表不同注意:方法的返回值類型不作為判斷方法重載的依據(jù)。演示:(1).NET基類庫中MessageBox.Show方法(2)展示如何定義重載的方法,并通過設(shè)置斷點展示程序運行時到底調(diào)用的是哪個重載方法3.兩種不同的內(nèi)存類型(Type)“類”類型的變量屬于“引用類型(ReferenceType)”的變量;其引用的對象占用的內(nèi)存位于“堆(heap)”中。諸如int之類簡單類型的變量屬于“值類型(ValueType)”的變量,值類型的變量占用的內(nèi)存位于“線程堆棧(threadstack)”中。實例publicpartialclassfrmMain:Form{publicfrmMain(){InitializeComponent();}publicintcounter=0;privatevoidbtnClickMe_Click(objectsender,EventArgse){//intcounter=0;counter++;//this.counter++;lblCount.Text=counter.ToString();}}4.奇特的關(guān)鍵字:thisC#中的this,是一個殊殊的對象引用,它代表對象自身。位于同一類內(nèi)部的成員彼此訪問,本質(zhì)上是通過this這一特殊引用來完成的。只不過這個關(guān)鍵字通常被省略了。通過對象變量來訪問變量的實例成員,是面向?qū)ο缶幊讨械囊粋€基本原則。思索:假設(shè)A是一個類,請看以下代碼:Aobj1=newA();Aobj2=obj1;問題:1.obj1和obj2引用兩個不同的對象嗎?2.你能否通過寫幾句試驗代碼來證明你的想法是對的?對象變量“相互賦值”的真實含義問:以下代碼輸出什么結(jié)果?代碼中的MyClass是一個類:inti=100;intj=100;Console.WriteLine(i==j);MyClassobj1=newMyClass();MyClassobj2=newMyClass();Console.WriteLine(obj1==obj2);有趣的“==”當(dāng)“==”運算符施加于兩個簡單數(shù)據(jù)類型變量(如int)時,實際上是比對兩個變量的值。當(dāng)“==”運算符施加于兩個對象變量時,實際上是比對這兩個對象變量是否引用同一對象!以下代碼定義了一個類:classStaticMembers{publicstaticintstaticVar=0;publicintdynamicVar=0;publicvoidincreaseValue(){staticVar++;dynamicVar++;}}請編寫代碼創(chuàng)建100個StaticMembers對象,并對每個對象調(diào)用increaseValue方法,之后,輸出staticVar和dynamicVar的值ObjectCounter示例分析類的實例成員只能通過對象來訪問。每個對象都有一份自己獨享的實例成員,是“個人財產(chǎn)”。類的靜態(tài)成員歸所有對象所共享,是“國有資產(chǎn)”。5.類的“實例成員”與“靜態(tài)成員”在C#中,屬于同一個類的成員(包括字段/屬性/方法)相互訪問,擁有以下的規(guī)則:類的實例方法可以訪問類的所有成員;類的靜態(tài)方法只能訪問或調(diào)用類的靜態(tài)成員!為什么這一切如此重要?深刻理解類和對象這兩個概念,是面向?qū)ο缶幊痰幕A(chǔ),在此基礎(chǔ)之上,才可以介紹更多的面向?qū)ο缶幊讨R,下面,讓我們“小試牛刀”,嘗試著使用面向?qū)ο缶幊痰幕纠碚?,掌握多窗體編程的基本技巧……教案末頁小結(jié)本節(jié)主要教學(xué)內(nèi)容:(1)對象的創(chuàng)建——構(gòu)造函數(shù)(2)什么叫函數(shù)重載(Overload)?(3)兩種不同的內(nèi)存類型(Type)(4)奇特的關(guān)鍵字:this(5)類的“實例成員”與“靜態(tài)成員”復(fù)習(xí)思考題及作業(yè)題實驗四題目1.定義兩個完成加法功能的重載方法,一個接收兩個整數(shù)作為參數(shù),另一個接收兩個浮點數(shù)作為參數(shù)。寫幾句示例代碼證明在不同的上下文環(huán)境中,計算機會執(zhí)行不同的方法。題目2.以下代碼定義了一個類:classStaticMembers{publicstaticintstaticVar=0;publicintdynamicVar=0;publicvoidincreaseValue(){staticVar++;dynamicVar++;}}請編寫代碼創(chuàng)建100個StaticMembers對象,并對每個對象調(diào)用increaseValue方法,之后,輸出staticVar和dynamicVar的值教案首頁第4次課授課時間:課程名稱可視化程序設(shè)計年級大二下專業(yè)層次信息與計算教師付勇智專業(yè)技術(shù)職務(wù)講師學(xué)時2授課題目(章、節(jié))第三章窗體Form的構(gòu)建與屬性基本教材參考用書《MicrosoftC#Windows程序設(shè)計》(上下冊)CharlesPetzold著天宏工作室譯北京大學(xué)出版社教學(xué)目的與要求:1.本章學(xué)習(xí)目的與要求:深入學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計有關(guān)繼承的內(nèi)容;掌握基類與派生類的概念及其相互關(guān)系;了解C#語言有關(guān)繼承語法的使用;在此基礎(chǔ)上介紹可視化程序設(shè)計的最基本類Form窗體類及其繼承派生關(guān)系,學(xué)會使用使用Form類產(chǎn)生所需應(yīng)用程序窗體以及窗體屬性的控制。2.本節(jié)學(xué)習(xí)目的與要求:在掌握類的繼承基本概念的基礎(chǔ)上,重點掌握Form窗體類的繼承體系,窗體對象的產(chǎn)生、顯示及屬性設(shè)置等問題。教學(xué)內(nèi)容與時間安排,教學(xué)方法:1.教學(xué)內(nèi)容與時間安排(1)面向?qū)ο蟪绦蛟O(shè)計的關(guān)鍵-繼承(10min)(2)基類和派生類(15min)(3)C#中有關(guān)繼承派生的規(guī)定(20min)(4).NET中的窗口對象-Form(35min)(5)窗體的屬性與繼承(10min)2.教學(xué)方法:講授法、問答法、討論法和演示法。教學(xué)重點、難點:在本節(jié)課的教學(xué)內(nèi)容中,窗體類的繼承關(guān)系及其屬性為教學(xué)重點;繼承的原理及類的繼承體系設(shè)計方法為本教學(xué)的難點。授課方法及手段:在授課過程中以講授法為主,輔助于問答法、討論法和演示法?;纠碚撝v授采用講授法和演示法進行,課堂知識的鞏固采用討論法進行,本節(jié)教學(xué)測量采用問答法進行。為了增加單位課時的信息量,應(yīng)用多媒體技術(shù)組織教學(xué)過程。為了保證學(xué)生對所學(xué)內(nèi)容的實際掌握能力,應(yīng)當(dāng)在介紹相關(guān)概念和理解后,通過實例程序的演示加深學(xué)生對面向?qū)ο蟪绦蛟O(shè)計相關(guān)概念的理解。教案續(xù)頁基本內(nèi)容(講稿)備注第三章窗體Form的構(gòu)建與屬性1.面向?qū)ο蟪绦蛟O(shè)計的關(guān)鍵-繼承面向?qū)ο蟪绦蛟O(shè)計的高效之處在于可以把不同事物所具有的共性抽象出來,作為基礎(chǔ),在此基礎(chǔ)上,再加入事物個性的實現(xiàn),這樣就減少了對共性的重復(fù)實現(xiàn)。這樣就能夠在體現(xiàn)現(xiàn)實事物豐富多彩的特點的同時,又不之余增加很大的代碼編寫和維護的工作量。面向?qū)ο蟪绦蛟O(shè)計通過繼承派生的機制來實現(xiàn)共性特點以及在此基礎(chǔ)上的繼承。繼承(Inheritance)舉例例如:男學(xué)生和女學(xué)生有大量共性的信息,包括有學(xué)生的學(xué)號、姓名、課程成績等,可以以此為基礎(chǔ)實現(xiàn)學(xué)生類。在繼承學(xué)生類的共性基礎(chǔ)上,派生實現(xiàn)男生類和女生類,此時只需要實現(xiàn)男/女生類中不同的地方,比如:上體育課、就寢、上廁所。代碼示例classstudent{stringstu_no;stringstu_name;intstu_score;}classmale_student:student{void就寢(){回男生宿舍();睡覺();}}classfemale_student:student{void就寢(){回女生宿舍();睡覺();}}2.基類和派生類實現(xiàn)共性特征的類是整個類繼承體系的基礎(chǔ),稱為基類(baseclass),也叫作父類(parentclass),例如上例中的學(xué)生類。在基類基礎(chǔ)上加入個性特點所實現(xiàn)的類稱為派生類(derivedclass),也叫作子類,例如上例中的男生類和女生類。派生類和基類之間是繼承派生的關(guān)系,在C#語言中通過冒號表示“:”在定義派生類的同時指明其所繼承自的基類,例如:classmale_student:student同時,派生類又可以作為其他類的基類繼續(xù)被繼承,例如:男生類又可以派生出理科男生與文科男生類。3.C#中有關(guān)繼承派生的規(guī)定C#中每個類只能從唯一的基類進行繼承(接口Interface除外)C#中所有的類都直接或者間接的派生自系統(tǒng)的最底層基類Object,在定義一個類的時候如果不指明其基類,則系統(tǒng)自動默認(rèn)從Object進行繼承。classA{}等價于classA:Object{}繼承的相關(guān)規(guī)則派生類自動從基類繼承并獲得所有標(biāo)記為public和protected的字段和方法,標(biāo)記為private的成員除外,只能在基類本身內(nèi)部訪問。示例程序classstudent{stringstu_no;stringstu_name;stringstu_gender;intstu_score;publicstudent(StringStu_NO,StringStu_Name){stu_no=Stu_NO;stu_name=Stu_Name;}publicvoidPrint_Score(){Console.WriteLine(stu_no+":"+stu_name+"的體育課成績?yōu)椋?+stu_score.ToString()+"分");}}男生類的實現(xiàn)classmale_student:student{publicmale_student(StringStu_NO,StringStu_Name):base(Stu_NO,Stu_Name){stu_gender="男";}publicvoidPE_Class(){Console.Write("請輸入"+stu_name+"的成績:");stu_score=Convert.ToInt32(Console.ReadLine());Print_Score();}}女生類的實現(xiàn)classfemale_student:student{publicfemale_student(StringStu_NO,StringStu_Name):base(Stu_NO,Stu_Name){stu_gender="女";}publicvoidPE_Class(){Console.Write("請輸入"+stu_name+"的成績:");stu_score=10+Convert.ToInt32(Console.ReadLine());Print_Score();}}student基類的改進usingSystem;classstudent{privatestringstu_no;protectedstringstu_name;protectedstringstu_gender;protectedintstu_score;publicstudent(StringStu_NO,StringStu_Name){stu_no=Stu_NO;stu_name=Stu_Name;}publicvoidPrint_Score(){Console.WriteLine(stu_no+":"+stu_name+"的體育課成績?yōu)椋?+stu_score.ToString()+"分");}}Main函數(shù)調(diào)用classProgram{publicstaticvoidMain(){male_studentStuA=newmale_student("001","張三");female_studentStuB=newfemale_student("002","李四");StuA.PE_Class();StuB.PE_Class();studentx=(student)StuB;x.Print_Score();Console.ReadLine();}}4..NET中的窗口對象-Form在Windows應(yīng)用程序中,通常有一個“窗口”作為應(yīng)用程序與用戶交互的基礎(chǔ)界面在.NET環(huán)境下,一個窗口稱之為“窗體”(Form).NET中窗體由System.Windows.Forms命名空間中的Form類進行定義Form類的繼承關(guān)系產(chǎn)生Form對象classNewForm{ publicstaticvoidMain() { newSystem.Windows.Forms.Form(); }}usingSystem.Windows.Forms;classFormNew{ publicstaticvoidMain() { Formtheform; theform=newForm(); }}顯示窗體usingSystem.Windows.Forms;classFormNew{ publicstaticvoidMain() { Formform=newForm(); form.Show(); }}form.Show();等價方法form.Visible=trueControl類的基本屬性及方法方法說明voidShow()使控件可見voidHide()使控件不可見類型屬性訪問方式boolVisible讀取/設(shè)置stringText讀取/設(shè)置停留顯示FormusingSystem.Threading;usingSystem.Windows.Forms;classShowFormAndSleep{ publicstaticvoidMain() { Formform=newForm(); form.Show(); Thread.Sleep(5000); form.Text="MyFirstForm"; Thread.Sleep(5000); }}保持窗口usingSystem.Windows.Forms;classRunFormBadly{ publicstaticvoidMain() { Formform=newForm(); form.Text="NotaGoodIdea"; form.Visible=true; Application.Run(); }}保持窗口的改進usingSystem.Windows.Forms;classRunFormBadly{ publicstaticvoidMain() { Formform=newForm(); form.Text="MyVeryOwnForm"; Application.Run(form); }}同時創(chuàng)建多個窗口usingSystem.Windows.Forms;classTwoForms{ publicstaticvoidMain() { Formform1=newForm(); Formform2=newForm(); form1.Text="FormpassedtoRun()"; form2.Text="SecondForm"; form2.Show(); Application.Run(form1); MessageBox.Show("Application.Run()hasreturned"+"ControlbacktoMain.Bye!","TwoForms"); }}5.窗體的屬性與繼承窗體的屬性usingSystem.Drawing;usingSystem.Windows.Forms;classFormProperties{ publicstaticvoidMain() { Formform=newForm(); form.Text="FormProperties"; form.BackColor=Color.SkyBlue; form.Width*=2; form.Height/=2; form.FormBorderStyle=FormBorderStyle.FixedSingle; form.MaximizeBox=false; form.Cursor=Cursors.Hand; form.StartPosition=FormStartPosition.CenterScreen; Application.Run(form); }}FormBorderStyle枚舉成員值注釋None0沒有邊框、沒有標(biāo)題欄FixedSingle1與FixedDialog相同F(xiàn)ixed3D2下凹的3D外觀FixedDialog3主要用于對話框Sizable4默認(rèn)值、可調(diào)窗體大小FixedToolWindow5更小標(biāo)題、無控制框SizableToolWindow6同上、可調(diào)窗體大小Form類的繼承usingSystem.Drawing;usingSystem.Windows.Forms;classMyForm:Form{ publicstaticvoidMain() { Application.Run(newMyForm()); } publicMyForm() { Text="MyFormObject"; BackColor=Color.Pink; FormBorderStyle=FormBorderStyle.Fixed3D; Cursor=Cursors.WaitCursor; }}教案末頁小結(jié)本節(jié)主要教學(xué)內(nèi)容:(1)面向?qū)ο蟪绦蛟O(shè)計的關(guān)鍵-繼承(2)基類和派生類(3)C#中有關(guān)繼承派生的規(guī)定(4).NET中的窗口對象-Form(5)窗體的屬性與繼承復(fù)習(xí)思考題及作業(yè)題實驗五題目1.在對象瀏覽器中找到MessageBox類定義,截圖并數(shù)出其中Show()方法的重載數(shù)目。題目2.自己動手將學(xué)生、男生、女生的體育課成績的程序在VS環(huán)境中重寫一遍,并調(diào)試運行通過。觀察將女生對象StuB強制類型轉(zhuǎn)化為基類student和更上一級基類Object之后,對象可用方法的變化情況。教案首頁第5次課授課時間:課程名稱可視化程序設(shè)計年級大二下專業(yè)層次信息與計算教師付勇智專業(yè)技術(shù)職務(wù)講師學(xué)時2授課題目(章、節(jié))第四章事件驅(qū)動編程模型基本教材參考用書《MicrosoftC#Windows程序設(shè)計》(上下冊)CharlesPetzold著天宏工作室譯北京大學(xué)出版社教學(xué)目的與要求:1.本章學(xué)習(xí)目的與要求:學(xué)習(xí)事件驅(qū)動編程模型的基本工作原理;掌握C#語言中delegate的語法及事件處理程序的相關(guān)內(nèi)容;在此基礎(chǔ)上介紹Paint繪圖事件的處理,學(xué)會通過編寫Paint事件處理程序來進行繪圖輸出。2.本節(jié)學(xué)習(xí)目的與要求:在掌握事件驅(qū)動編程模型的基本工作原理的基礎(chǔ)上,重點掌握C#語言中delegate的語法及Paint繪圖事件的處理。教學(xué)內(nèi)容與時間安排,教學(xué)方法:1.教學(xué)內(nèi)容與時間安排(1)控制臺編程模型與事件驅(qū)動編程模型(20min)(2)事件處理程序的途徑-函數(shù)代理(25min)(3)PaintEvent-繪圖事件(20min)(4)Windows用戶區(qū)圖形坐標(biāo)系(5min)(5)多窗體共享Paint事件處理程序(10min)(6)單個窗體多個Paint事件處理程序(10min)2.教學(xué)方法:講授法、問答法、討論法和演示法。教學(xué)重點、難點:在本節(jié)課的教學(xué)內(nèi)容中,Paint繪圖事件的處理為教學(xué)重點;事件驅(qū)動編程模型的原理及delegate代理語法為本次教學(xué)的難點。授課方法及手段:在授課過程中以講授法為主,輔助于問答法、討論法和演示法?;纠碚撝v授采用講授法和演示法進行,課堂知識的鞏固采用討論法進行,本節(jié)教學(xué)測量采用問答法進行。為了增加單位課時的信息量,應(yīng)用多媒體技術(shù)組織教學(xué)過程。為了保證學(xué)生對所學(xué)內(nèi)容的實際掌握能力,應(yīng)當(dāng)在介紹相關(guān)概念和理解后,通過實例程序的演示加深學(xué)生對面向?qū)ο蟪绦蛟O(shè)計相關(guān)概念的理解。教案續(xù)頁基本內(nèi)容(講稿)備注第四章事件驅(qū)動編程模型1.控制臺編程模型與事件驅(qū)動編程模型傳統(tǒng)控制臺編程模型程序員編程控制整個運行流程應(yīng)用程序通過鍵盤獲得用戶輸入數(shù)據(jù)獲得所需數(shù)據(jù)后,程序很少同用戶進行交互,一直運行到輸出結(jié)果或下一次需要用戶輸入應(yīng)用程序是整個執(zhí)行過程的中心,用戶是為執(zhí)行提供數(shù)據(jù)的來源Windows事件驅(qū)動編程模型在Windows中,程序的執(zhí)行是由用戶、Windows操作系統(tǒng)、以及程序三方協(xié)同完成的程序的工作通常是設(shè)置好整個運行所需的環(huán)境,包括總體界面的安排、創(chuàng)建各種控件、并為用戶可能的操作安裝事件處理程序待程序初始化完畢,設(shè)置好各種運行所需條件后,調(diào)用Application.Run(),將系統(tǒng)控制流程交由Windows操作系統(tǒng)負(fù)責(zé)。用戶使用系統(tǒng)過程中通過鼠標(biāo)和鍵盤交互式的進行輸入由Windows操作系統(tǒng)統(tǒng)一管理用戶對鼠標(biāo)和鍵盤的輸入Windows將用戶對鼠標(biāo)和鍵盤的操作識別為鼠標(biāo)事件和鍵盤事件并將事件發(fā)送給對應(yīng)程序的事件處理程序應(yīng)用程序通過執(zhí)行預(yù)先定義好的事件處理程序,對用戶的操作進行響應(yīng)。從而完成用戶請求的處理。事件處理程序處理完對應(yīng)事件后再次將控制權(quán)交還Windows,并等待下一個事件的發(fā)生Windows事件驅(qū)動編程模型示意1.1.程序初始化創(chuàng)建窗體及控件安裝事件處理程序2.Windows管理用戶操作用戶雙擊鼠標(biāo)運行一個程序初始化完畢,調(diào)用Application.Run將控制權(quán)交給Windows3.用戶使用鼠標(biāo)、鍵盤進行交互式操作Windows管理鼠標(biāo)鍵盤用戶使用鼠標(biāo)鍵盤進行輸入4.事件處理程序Windows通過事件方式通知應(yīng)用程序事件處理程序?qū)κ录M行響應(yīng)和處理并返回控制Windows可視化編程的核心思想Don’tCallMe,IWillCallYou!應(yīng)用程序不用主動調(diào)用函數(shù)操作,接收系統(tǒng)的消息并及時進行處理即可。事件驅(qū)動模型總結(jié)在事件驅(qū)動模型中,應(yīng)用程序不再是整個執(zhí)行過程的總司令Windows操作系統(tǒng)負(fù)責(zé)協(xié)調(diào)用戶輸入與程序響應(yīng)事件驅(qū)動模型下,應(yīng)用程序的任務(wù)只有兩個:為各種可能的用戶輸入編寫事件處理程序進行應(yīng)用環(huán)境的初始化設(shè)置,并安裝事件處理程序2.事件處理程序的途徑-函數(shù)代理當(dāng)某一事件發(fā)生的時候,系統(tǒng)需要有一個恰當(dāng)?shù)臋C制通知需要對此事件做出反應(yīng)的應(yīng)用程序及時的做出響應(yīng)。C#中,事件發(fā)生的消息處理是通過函數(shù)調(diào)用來實現(xiàn)的,而事件的具體情況則通過函數(shù)的參數(shù)來進行傳遞。例如:地震事件發(fā)生的情況下,相關(guān)消息的傳遞需要傳遞的參數(shù)主要為:震源經(jīng)緯度坐標(biāo)、震源深度、震級。delegate(代理)語法對于不同類型的事件,需要傳遞的信息參數(shù)各不相同,這就需要針對不同事件信息定義它所調(diào)用的處理函數(shù)所接收的參數(shù)情況,在C#語言中這是delegate(代理)語法來實現(xiàn)的。一個delegate類型定義了某一特定事件處理程序(函數(shù))所滿足的函數(shù)接口(參數(shù)數(shù)量及類型)delegate對象的生成與安裝通過newdelegate類型的名稱(處理函數(shù)名稱)的語法格式將一個類的成員函數(shù)變?yōu)橄鄳?yīng)的事件處理程序delegate對象。在相應(yīng)事件上通過+=語法將一個事件處理程序delegate對象安裝到相應(yīng)事件上,從而使得相應(yīng)函數(shù)能夠監(jiān)聽相關(guān)事件的消息并進行響應(yīng)。與之類似-=語法將delegate對象從事件上卸下,解除delegate對象對事件的監(jiān)聽和處理。例如:對象A上有事件e,它的delegate類型為D,現(xiàn)B對象的x函數(shù)滿足D的格式要求,現(xiàn)需要把B.x安裝到A.e上可以這樣表達(dá)A.e+=newD(B.x);3.PaintEvent-繪圖事件Paint事件的作用:通知應(yīng)用程序,用戶區(qū)窗口失效,需要重新繪制。Paint事件的產(chǎn)生:Form被首次創(chuàng)建,此時還未被繪制出應(yīng)用程序從最小化狀態(tài)恢復(fù)部分被其他窗口遮蓋的窗口被激活窗口大小改變程序通過Invalidate調(diào)用通知內(nèi)容改變Paint事件處理Paint事件處理程序的類別publicdelegatevoidPaintEventHandler(objectobjSender,PaintEventArgspea);delegate是C#中的一類特殊函數(shù),這類函數(shù)在一個實體中存儲多個相同類型的函數(shù),調(diào)用對應(yīng)實體時,給個函數(shù)一次根據(jù)加入的先后依次被調(diào)用。對delegate的添加與刪除使用+=和-=操作符WindowsForm編程中所有事件處理程序都是delegate類別Paint事件處理程序的定義:staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea){}Paint事件處理程序的安裝:form.Paint+=newPaintEventHandler(MyPaintHandler);Paint事件處理程序的卸載:form.Paint-=newPaintEventHandler(MyPaintHandler);Paint事件處理程序的參數(shù)staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea)此處第一個object類型的參數(shù)objSender是事件的產(chǎn)生者,即事件處理程序所安裝到的對象,本例中是form對象。第二個參數(shù)pea類型PaintEventArgs在System.Windows.Forms中定義,它含有兩個成員屬性Graphics及ClipRectangle類型屬性名訪問控制說明GraphicsGraphicsget繪圖輸出對象RectangleClipRectangleget失效矩形區(qū)域Paint事件處理程序示例usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classPaintEvent{ publicstaticvoidMain() { Formform=newForm(); form.Text="PaintEvent"; form.Paint+=newPaintEventHandler(MyPaintHandler); Application.Run(form); } staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea) { Graphicsgrfx=pea.Graphics; grfx.Clear(Color.Chocolate); Console.WriteLine("PaintEvent"); }}文字輸出Graphics.DrawStringDrawString方法有6種重載函數(shù)格式voidDrawString(stringstr,Fontfont,Brushbrush,floatx,floaty)參數(shù)說明:stingstr輸出字符串Fontfont使用的字體Brushbrush使用的筆刷floatx橫軸象素坐標(biāo)floaty縱軸象素坐標(biāo)4.Windows用戶區(qū)圖形坐標(biāo)系傳統(tǒng)笛卡爾坐標(biāo)系Windows圖形坐標(biāo)系Windows坐標(biāo)系下坐標(biāo)值向右向下增長左上角為坐標(biāo)原點(0,0)HelloWorld程序Paint版usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classPaintHello{ publicstaticvoidMain() { Formform=newForm(); form.Text="PaintHello"; form.BackColor=Color.White; form.Paint+=newPaintEventHandler(MyPaintHandler); Application.Run(form); } staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea) { Formform=(Form)objSender; Graphicsgrfx=pea.Graphics; grfx.DrawString("Hello,world!",form.Font,Brushes.Black,0,0); }}5.多窗體共享Paint事件處理程序usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classPaintTwoForms{ staticFormform1,form2;publicstaticvoidMain(){ form1=newForm(); form2=newForm(); form1.Text="FirstForm"; form1.BackColor=Color.White; form1.Paint+=newPaintEventHandler(MyPaintHandler); form2.Text="SecondForm"; form2.BackColor=Color.White; form2.Paint+=newPaintEventHandler(MyPaintHandler); form2.Show(); Application.Run(form1);}staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea) { Formform=(Form)objSender; Graphicsgrfx=pea.Graphics; stringstr; if(form==form1) str="Hellofromthefirstform"; else str="Hellofromthesecondform"; grfx.DrawString(str,form.Font,Brushes.Black,0,0); }}6.單個窗體多個Paint事件處理程序usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classTwoPaintHandlers{ publicstaticvoidMain() { Formform=newForm(); form.Text="TwoPaintHandlers"; form.BackColor=Color.White; form.Paint+=newPaintEventHandler(PaintHandler1); form.Paint+=newPaintEventHandler(PaintHandler2); Application.Run(form); } staticvoidPaintHandler1(objectobjSender,PaintEventArgspea) { Formform=(Form)objSender; Graphicsgrfx=pea.Graphics; grfx.DrawString("FirstPaintEventHandler",form.Font, Brushes.Black,0,0); } staticvoidPaintHandler2(objectobjSender,PaintEventArgspea) { Formform=(Form)objSender; Graphicsgrfx=pea.Graphics; grfx.DrawString("SecondPaintEventHandler",form.Font, Brushes.Black,0,100); }}7.事件處理程序總結(jié)某個對象的一個事件可以有多個處理程序?qū)κ录M行處理,事件發(fā)生時各處理程序根據(jù)安裝先后依次執(zhí)行。多個對象也可共享同一事件處理程序,在編寫事件處理程序時,如果要區(qū)分處理多個對象的事件,需要使用處理程序的第一個參數(shù)objectobjSender確定是哪個對象發(fā)生的事件繼承Form類的繪圖Form的派生類除了可以通過添加Paint事件處理程序繪圖外,還可以通過改寫Form類的Protected方法OnPaint函數(shù)來實現(xiàn)繪圖。OnPaint方法只有一個參數(shù),類型為PaintEventArgsProtectedvoidOnPaint(PaintEventArgspea)OnPaint函數(shù)繪圖程序usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classHelloWorld:Form{ publicstaticvoidMain() { Application.Run(newHelloWorld()); } publicHelloWorld() { Text="HelloWorld"; BackColor=Color.White; } protectedoverridevoidOnPaint(PaintEventArgspea) { Graphicsgrfx=pea.Graphics; grfx.DrawString("Hello,WindowsForms!",Font,Brushes.Black,0,0); }}8.Windows事件處理總結(jié)對于所有Windows事件來說,都有一個“On事件名”的處理方法。同時有一個對應(yīng)的delegate方法EventMethodDelegateArgumentPaintOnPaintPaintEventHandlerPaintEventArgsForm派生類的再次繼承usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classInheritHelloWorld:HelloWorld{ publicnewstaticvoidMain() { Application.Run(newInheritHelloWorld()); } publicInheritHelloWorld() { Text="Inherit"+Text; } protectedoverridevoidOnPaint(PaintEventArgspea) { Graphicsgrfx=pea.Graphics; grfx.DrawString("HellofromInheritHelloWorld!",Font,Brushes.Black,0,100); }}教案末頁小結(jié)本節(jié)主要教學(xué)內(nèi)容:(1)控制臺編程模型與事件驅(qū)動編程模型(2)事件處理程序的途徑-函數(shù)代理(3)PaintEvent-繪圖事件(4)Windows用戶區(qū)圖形坐標(biāo)系(5)多窗體共享Paint事件處理程序(6)單個窗體多個Paint事件處理程序復(fù)習(xí)思考題及作業(yè)題實驗六編寫一個WindowsForm程序在窗體中顯示你的姓名和學(xué)號教案首頁第6次課授課時間:課程名稱可視化程序設(shè)計年級大二下專業(yè)層次信息與計算教師付勇智專業(yè)技術(shù)職務(wù)講師學(xué)時2授課題目(章、節(jié))第五章WindowsForms編程基本數(shù)據(jù)結(jié)構(gòu)基本教材參考用書《MicrosoftC#Windows程序設(shè)計》(上下冊)CharlesPetzold著天宏工作室譯北京大學(xué)出版社教學(xué)目的與要求:1.本章學(xué)習(xí)目的與要求:學(xué)習(xí)WindowsForms類庫編程所涉及到的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),為之后的可視化程序設(shè)計奠定數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)。2.本節(jié)學(xué)習(xí)目的與要求:掌握點類、尺寸類、矩形區(qū)域類、顏色類、畫筆類、畫刷類及其相關(guān)屬性方法的應(yīng)用。教學(xué)內(nèi)容與時間安排,教學(xué)方法:1.教學(xué)內(nèi)容與時間安排(1)Windows基本數(shù)據(jù)結(jié)構(gòu)(5min)(2)點結(jié)構(gòu)Point(15min)(3)Size(尺寸)結(jié)構(gòu)(20min)(4)Rectangle矩形結(jié)構(gòu)(20min)(5)Color顏色結(jié)構(gòu)(10min)(6)Pen畫筆結(jié)構(gòu)(10min)(7)Brush畫刷結(jié)構(gòu)(10min)2.教學(xué)方法:講授法、問答法、討論法和演示法。教學(xué)重點、難點:在本節(jié)課的教學(xué)內(nèi)容中,六類常用WindowsForms數(shù)據(jù)結(jié)構(gòu)為教學(xué)重點;各數(shù)據(jù)結(jié)構(gòu)下的相關(guān)靜態(tài)方法和成員方法的使用為本教學(xué)的難點。授課方法及手段:在授課過程中以講授法為主,輔助于問答法、討論法和演示法?;纠碚撝v授采用講授法和演示法進行,課堂知識的鞏固采用討論法進行,本節(jié)教學(xué)測量采用問答法進行。為了增加單位課時的信息量,應(yīng)用多媒體技術(shù)組織教學(xué)過程。為了保證學(xué)生對所學(xué)內(nèi)容的實際掌握能力,應(yīng)當(dāng)在介紹相關(guān)概念和理解后,通過實例程序的演示加深學(xué)生對面向?qū)ο蟪绦蛟O(shè)計相關(guān)概念的理解。教案續(xù)頁基本內(nèi)容(講稿)備注第五章WindowsForms編程基本數(shù)據(jù)結(jié)構(gòu)1.Windows基本數(shù)據(jù)結(jié)構(gòu)坐標(biāo)點(Point)尺寸(Size)矩形(Rectangle)顏色(Color)畫筆(Pen)畫刷(Brush)字體(Font)2.點結(jié)構(gòu)Point點的申明與賦值錯誤做法Pointpt;pt.X=23;pt.Y=17;正確做法Pointpt=newPoint();pt.X=23;pt.Y=17;點的申明與賦值Pointpt=newPoint(23,47);Pointpt=Point.Empty;(設(shè)置為點0,0)Pointpt=newPoint(0x0017002F)pt.X=23(0x0017)pt.Y=47(0x002F)主要為了同舊式WindowsAPI編程兼容,盡量少用此種方法。點的屬性與方法類型屬性訪問方式intX讀取/設(shè)置intY讀取/設(shè)置boolIsEmpty讀取staticPointEmpty靜態(tài)讀取Point對象的方法TypeGetType() boolEquals(Pointpt)intGetHashCode() voidOffset(intdx,intdy)stringToString()點對象的操作符重載if(pt1==pt2) {pt1.X==pt2.X&&pt1.Y==pt2.Y}if(pt1!=pt2){pt1.X!=pt2.X||pt1.Y!=pt2.Y}pt.offset(21,-12){pt.X+=21;pt.Y+=-12}Point數(shù)組的申明與賦值申明:Point[]apt=newPoint[23];申明連帶賦值:Pointapt[3]=newPoint[3]{ newPoint(25,50), newPoint(43,32), newPoint(27,8)};Pointapt[3]=newPoint[]{ newPoint(25,50), newPoint(43,32), newPoint(27,8)};Pointapt[3]={ newPoint(25,50), newPoint(43,32), newPoint(27,8)};3.Size(尺寸)結(jié)構(gòu)Size結(jié)構(gòu)同Point結(jié)構(gòu)非常相似,不同點在于它使用Width和Height屬性表示寬度與高度類型屬性訪問方式intWidth讀取/設(shè)置intHeight讀取/設(shè)置boolIsEmpty讀取構(gòu)造函數(shù)差別Point構(gòu)造函數(shù)Point()Point(intxyPacked)Point(intx,inty)Point(Sizesize)Size構(gòu)造函數(shù)Size()Size(intwidth,intheight)Size(Pointpoint)Point與Size的操作與轉(zhuǎn)換強制類型轉(zhuǎn)換:pt=(Point)size;size=(Size)pt;操作符重載:size3=size1+size2;size2=size3-size1;size2+=size1;size3-=size2;操作符重載:pt2=pt1+size;pt3=pt2-size;pt+=size;pt-=size;浮點版本PointF中X和Y分別為float類型SizeF中Width和Height分別為float類型注意:容易出現(xiàn)的錯誤PointFptf=ne
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高分子粘合劑產(chǎn)品購銷協(xié)議范本
- 生產(chǎn)安全事故報告和處理制度
- 2024年專業(yè)造價咨詢協(xié)議承包書
- 2024航拍業(yè)務(wù)合作協(xié)議細(xì)則
- 碧桂園房產(chǎn)銷售合同范本
- 人造石墨研究合同范本
- 2024年度采購協(xié)議模板匯編2
- 共享股東合同范本
- 高品質(zhì)門窗合作協(xié)議:2024年
- 房產(chǎn)維修合同范本
- T∕CACM 1090-2018 中醫(yī)治未病技術(shù)操作規(guī)范 穴位敷貼
- 2024版人教版英語初一上單詞默寫單
- 化學(xué)實驗室安全智慧樹知到期末考試答案2024年
- 經(jīng)典房地產(chǎn)營銷策劃培訓(xùn)(全)
- 工人入場安全教育課件
- 【川教版】《生命 生態(tài) 安全》二年級上冊第12課 少點兒馬虎 多點兒收獲 課件
- 人教版數(shù)學(xué)四年級上冊第五單元 《平行四邊形和梯形》 大單元作業(yè)設(shè)計
- 靜配中心差錯預(yù)防
- 高夫品牌市場分析報告
- 職業(yè)規(guī)劃書-數(shù)字化設(shè)計與制造技術(shù)
- 國家臨床重點??平ㄔO(shè)項目申報書
評論
0/150
提交評論