C#程序設(shè)計(jì)及應(yīng)用教程(第4版)PPT完整全套教學(xué)課件_第1頁(yè)
C#程序設(shè)計(jì)及應(yīng)用教程(第4版)PPT完整全套教學(xué)課件_第2頁(yè)
C#程序設(shè)計(jì)及應(yīng)用教程(第4版)PPT完整全套教學(xué)課件_第3頁(yè)
C#程序設(shè)計(jì)及應(yīng)用教程(第4版)PPT完整全套教學(xué)課件_第4頁(yè)
C#程序設(shè)計(jì)及應(yīng)用教程(第4版)PPT完整全套教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩630頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章概述2Ch1概述1.1C#語(yǔ)言和VS2017開(kāi)發(fā)環(huán)境1.2項(xiàng)目和解決方案1.3應(yīng)用程序主菜單設(shè)計(jì)1.4同一個(gè)解決方案中不同項(xiàng)目之間的交互1.5C#代碼的組織和調(diào)試1.1C#語(yǔ)言和VS2017開(kāi)發(fā)環(huán)境1.1.1C#語(yǔ)言和.NET框架1.1.2VS2017開(kāi)發(fā)環(huán)境1.1.3在VS2017下能開(kāi)發(fā)哪些類型的應(yīng)用41.1.1C#語(yǔ)言和.NET框架1、C#語(yǔ)言的特點(diǎn)C#(讀作“Csharp”)是一種基于.NET的完全面向?qū)ο蟮母呒?jí)程序設(shè)計(jì)語(yǔ)言。

以下內(nèi)容自己在學(xué)習(xí)中慢慢體會(huì),學(xué)完后再看語(yǔ)法簡(jiǎn)潔精心的面向?qū)ο笤O(shè)計(jì)。與Web的緊密結(jié)合??煽康陌踩耘c錯(cuò)誤處理??煽康陌姹究刂萍夹g(shù)。很強(qiáng)的靈活性和兼容性。2、軟件公司使用的語(yǔ)言和開(kāi)發(fā)工具簡(jiǎn)介1996年之前:主要用C、C++、VB、FoxPro、PASCAL、FORTRAN、COBOL、LISP、……等1996-2002年:主要用Eclipse(Java)、VC++6.0、Delphi(Pascal語(yǔ)言)2003年至今:Eclipse(Java)、VisualStudio(C#、C++)結(jié)論

C++、C#、Java是全世界目前最流行的高級(jí)開(kāi)發(fā)語(yǔ)言。1.1.1C#語(yǔ)言和.NET框架3、C#和VisualStudio系列開(kāi)發(fā)工具C#被規(guī)定為高級(jí)語(yǔ)言開(kāi)發(fā)標(biāo)準(zhǔn)2001年C#被ECMA(歐洲計(jì)算機(jī)協(xié)會(huì))規(guī)定為高級(jí)語(yǔ)言開(kāi)發(fā)標(biāo)準(zhǔn)。2003年C#被ISO(國(guó)際標(biāo)準(zhǔn)化組織)規(guī)定為高級(jí)語(yǔ)言開(kāi)發(fā)標(biāo)準(zhǔn)。C#和VisualStudio的版本發(fā)展2003年C#1.0和VS2003,2005年C#2.0和VS2005,2008年C#3.0和VS2008,2010年C#4.0和VS2010,2012年C#5.0和VS2012,2013年C#5.0和VS2013,2015年C#6.0和VS2015,2017年3月:C#7.0和VS2017。VS2017企業(yè)版(Enterprise)是目前功能最強(qiáng)的版本(收費(fèi)),VS2017社區(qū)版(Community)是免費(fèi)版能用C#編寫(xiě)在Windows、Linux、MAC上運(yùn)行的各種應(yīng)用程序【桌面、移動(dòng)、Web】。能編寫(xiě)在Android、iOS、Win10上運(yùn)行的手機(jī)應(yīng)用程序。能編寫(xiě)基于Unity架構(gòu)的(桌面、移動(dòng))2D、3D游戲和虛擬現(xiàn)實(shí)(VR)應(yīng)用。1.1.1C#語(yǔ)言和.NET框架1.1.1C#語(yǔ)言和.NET框架4、Microsoft.NET框架(1)什么是.NET框架Microsoft.NET框架是生成、運(yùn)行.NET應(yīng)用程序和WebService的組件庫(kù)。由公共語(yǔ)言運(yùn)行庫(kù)(CLR)和類庫(kù)組成,其中類庫(kù)為開(kāi)發(fā)和運(yùn)行.NET應(yīng)用程序提供了各種支持,是與公共語(yǔ)言運(yùn)行庫(kù)緊密集成的可重用的類的集合。開(kāi)源、跨平臺(tái)支持。.NET原生支持Windows(最強(qiáng)的開(kāi)發(fā)工具),另外還支持Linux、macOS、iOS、Android等。本書(shū)介紹的是在Windows上運(yùn)行的應(yīng)用程序(forWindows),實(shí)驗(yàn)室安裝的是VS2015企業(yè)版,建議你自己的筆記本安裝免費(fèi)的【VS2017Community】。使用VS2015,除了開(kāi)發(fā)ForWindows的各種應(yīng)用程序外,還可以開(kāi)發(fā)forLinux、forMac、forAndroid、foriOS的應(yīng)用程序。

1.1.1C#語(yǔ)言和.NET框架4、Microsoft.NET框架(續(xù))(2).NET的特點(diǎn):一種框架、多種語(yǔ)言支持C#、C++、VB、F#、……等20多種高級(jí)程序設(shè)計(jì)語(yǔ)言。注意用基于.NET框架開(kāi)發(fā)的應(yīng)用程序,不論使用的是哪種高級(jí)語(yǔ)言,均必須在安裝了.NET框架的計(jì)算機(jī)上才能運(yùn)行。這種設(shè)計(jì)架構(gòu)與Java應(yīng)用程序必須在安裝了JavaSDK的計(jì)算機(jī)上才能運(yùn)行相似。哪些操作系統(tǒng)能安裝.NET框架Windows系列的操作系統(tǒng)Linux系列的操作系統(tǒng)MAC系列的操作系統(tǒng)1.1.1C#語(yǔ)言和.NET框架4、Microsoft.NET框架(續(xù))(3)公共語(yǔ)言運(yùn)行庫(kù)(CLR)CLR是.NET框架的基礎(chǔ),為多種編程語(yǔ)言提供統(tǒng)一的運(yùn)行環(huán)境。

托管代碼(C#、C++均可實(shí)現(xiàn))以運(yùn)行庫(kù)為編譯目標(biāo)的代碼稱為托管代碼。特點(diǎn):兼容性好、不依賴硬件、升級(jí)簡(jiǎn)單。

非托管代碼(C#、C++均可實(shí)現(xiàn))以CPU為編譯目標(biāo)的代碼稱為非托管代碼。特點(diǎn):兼容性差、硬件依賴性強(qiáng)、升級(jí)困難。1.1.1C#語(yǔ)言和.NET框架4、Microsoft.NET框架(續(xù))(4)中間語(yǔ)言(IL)使用.NET框架提供的編譯器可直接將源程序編譯為.EXE或者.DLL文件,此時(shí)編譯出來(lái)的程序代碼并不是CPU能直接執(zhí)行的機(jī)器代碼,而是一種中間語(yǔ)言代碼(IL)。使用中間語(yǔ)言代碼的優(yōu)點(diǎn)可以實(shí)現(xiàn)平臺(tái)無(wú)關(guān)性,即與特定的CPU無(wú)關(guān);只要能將某種語(yǔ)言編譯為IL代碼,就可以實(shí)現(xiàn)這些語(yǔ)言之間的交互操作。1.1.1C#語(yǔ)言和.NET框架4、Microsoft.NET框架(續(xù))(5)即時(shí)編譯(JIT)執(zhí)行時(shí)CLR會(huì)將需要的IL代碼裝入內(nèi)存,通過(guò)JIT編譯器(Just-In-Time)將其編譯成所用平臺(tái)的CPU可直接執(zhí)行的機(jī)器代碼。即時(shí)編譯并不是一次把整個(gè)應(yīng)用程序全部編譯完,而是只編譯它調(diào)用的那部分代碼所在的模塊。

為什么要采用即時(shí)編譯JIT編譯器可以有效地提高系統(tǒng)的性能??衫矛F(xiàn)有CPU和GPU硬件提供的功能即時(shí)生成優(yōu)化后的可執(zhí)行代碼。1.1.2VS2017開(kāi)發(fā)環(huán)境簡(jiǎn)介1.VisualStudioIDE和VisualStudioCode簡(jiǎn)介VisualStudioIDE是微軟公司推出的基于.NET的可視化集成開(kāi)發(fā)工具,這是一種將各種架構(gòu)和功能高度集成在一起的“重量級(jí)”開(kāi)發(fā)工具。VisualStudioCode開(kāi)發(fā)工具(簡(jiǎn)稱VSCode)是微軟公司推出的一種免費(fèi)和開(kāi)源的“輕量級(jí)”開(kāi)發(fā)工具,可安裝在Windows、MAC、Linux等操作系統(tǒng)平臺(tái)上,支持JavaScript、TypeScript、C#、C++、Java、Python、PHP等幾十種編程語(yǔ)言。1.1.2VS2017開(kāi)發(fā)環(huán)境簡(jiǎn)介2.下載和運(yùn)行VS2017安裝程序 VS2017分為社區(qū)版(CommunityEdition,免費(fèi),適用于個(gè)人學(xué)習(xí)和開(kāi)發(fā))、專業(yè)版(ProfessionalEdition,收費(fèi),適用于中小型團(tuán)隊(duì)開(kāi)發(fā))和企業(yè)版(EnterpriseEdition,收費(fèi),適用于大型團(tuán)隊(duì)開(kāi)發(fā))。3.【工作負(fù)載】選項(xiàng)卡下的安裝選項(xiàng) VS2017簡(jiǎn)體中文企業(yè)版包含了很多安裝選項(xiàng)。這些選項(xiàng)都分別歸類到不同的選項(xiàng)卡下,包括工作負(fù)載、單個(gè)組件、語(yǔ)言包、安裝位置。1.1.2VS2017開(kāi)發(fā)環(huán)境簡(jiǎn)介4.【單個(gè)組件】和【語(yǔ)言包】選項(xiàng)卡下的安裝選項(xiàng) GitHub提供基于云的一站式存儲(chǔ)和服務(wù),是一個(gè)面向開(kāi)源及私有軟件項(xiàng)目的托管平臺(tái)。它可以幫助開(kāi)發(fā)人員存儲(chǔ)和管理代碼,以及跟蹤和控制對(duì)代碼的更改。5.填入序列號(hào)

安裝后運(yùn)行VS2017,填入合法的序列號(hào),然后退出VS2017。6.VS2017選項(xiàng)設(shè)置

啟動(dòng)VS2017后,可根據(jù)需要更改下面的選項(xiàng)設(shè)置。1.1.3在VS2017下能開(kāi)發(fā)哪些類型的應(yīng)用

利用VS2017集成開(kāi)發(fā)環(huán)境,可輕松開(kāi)發(fā)各種類型的應(yīng)用程序。下面列出的只是一些典型的應(yīng)用。(1)企業(yè)級(jí)桌面應(yīng)用開(kāi)發(fā)(WPF、C#)。(2)TCP/UDP/HTTP等協(xié)議類網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)(WPF、WCF、C#)。(3)三維設(shè)計(jì)與可視化應(yīng)用開(kāi)發(fā)(WPF、C#)。(4)跨平臺(tái)移動(dòng)應(yīng)用開(kāi)發(fā)(Xamarin.Forms、WPF、C#)。(5)跨平臺(tái)Web應(yīng)用開(kāi)發(fā)(ASP.NETCore、JavaScript、HTML、CSS、C#)。(6)虛擬現(xiàn)實(shí)與2D、3D游戲開(kāi)發(fā)(Unity、C#)。(7)云計(jì)算與大數(shù)據(jù)應(yīng)用開(kāi)發(fā)(Python)。(8)人工智能應(yīng)用開(kāi)發(fā)(Python)。1.2項(xiàng)目和解決方案1.2.1基本概念1.2.2新建項(xiàng)目和解決方案1.2.3添加ExampleWpfApp項(xiàng)目到解決方案1.2.4添加Wpfz項(xiàng)目到解決方案1.2.5添加其他項(xiàng)目到解決方案1.2.6源程序備份1.2.1基本概念

項(xiàng)目也叫工程,主要用于組織和管理應(yīng)用程序的各種資源和源代碼,包括代碼文件、圖片文件、樣式文件、音視頻文件等。

新建項(xiàng)目時(shí),一個(gè)解決方案中默認(rèn)只包含一個(gè)項(xiàng)目,解決方案名和項(xiàng)目名默認(rèn)相同。但是在實(shí)際的應(yīng)用開(kāi)發(fā)中,同一個(gè)解決方案中往往都會(huì)包含多個(gè)項(xiàng)目。1.2.2新建項(xiàng)目和解決方案1.新建ExampleConsoleApp項(xiàng)目和V4B1Source解決方案1.2.2新建項(xiàng)目和解決方案2.修改Program.cs顯示“HelloWorldConsoleApp”3.調(diào)試運(yùn)行項(xiàng)目1.2.3添加ExampleWpfApp項(xiàng)目到解決方案1.添加ExampleWpfApp項(xiàng)目

在VS2017開(kāi)發(fā)環(huán)境下,鼠標(biāo)右擊【解決方案資源管理器】下的解決方案名“V4B1Source”,在彈出的快捷窗口中單擊【添加】→【新建項(xiàng)目】,在彈出的新窗口中選擇【W(wǎng)PF應(yīng)用(.NETFramework)】,修改項(xiàng)目名稱為ExampleWpfApp,單擊【確定】按鈕。1.2.3添加ExampleWpfApp項(xiàng)目到解決方案2.修改MainWindow.xaml顯示“HelloWorldWpfApp”

將ExampleWpfApp項(xiàng)目的MainWindow.xaml文件改為課本描述內(nèi)容。3.設(shè)置ExampleWpfApp為默認(rèn)啟動(dòng)的項(xiàng)目

使用鼠標(biāo)右擊【解決方案資源管理器】中的項(xiàng)目名“ExampleWpfApp”,在彈出的快捷菜單中單擊【設(shè)為啟動(dòng)項(xiàng)目】。1.2.3添加ExampleWpfApp項(xiàng)目到解決方案4.調(diào)試運(yùn)行

將ExampleWpfApp設(shè)置為默認(rèn)啟動(dòng)的項(xiàng)目,然后按<F5>鍵調(diào)試運(yùn)行,即可看到圖1-11所示的效果。5.如何重新打開(kāi)解決方案V4B1Source解決方案創(chuàng)建完畢后,在V4B1Source文件夾下包含了一個(gè)名為V4B1Source.sln的文件,雙擊該文件,就會(huì)重新打開(kāi)該解決方案。1.2.4添加Wpfz項(xiàng)目到解決方案1.添加Wpfz項(xiàng)目

在VS2017開(kāi)發(fā)環(huán)境下,使用鼠標(biāo)右擊【解決方案資源管理器】中的解決方案名“V4B1Source”,單擊【添加】→【新建項(xiàng)目】,在彈出的窗口中選擇【W(wǎng)PF自定義控件庫(kù)(.NETFramework)】,并修改項(xiàng)目名稱為“Wpfz”,單擊【確定】按鈕。2.重新生成項(xiàng)目

使用鼠標(biāo)右擊【解決方案資源管理器】下的Wpfz項(xiàng)目名,在得出:快捷菜單中選擇【重新生成】,此時(shí)在該項(xiàng)目的bin/Debug文件夾下就生成了Wpfz.dll文件。1.2.5添加其他項(xiàng)目到解決方案1.添加附錄A相關(guān)的項(xiàng)目

附錄A的參考源程序都在V4B1Source解決方案下以“FuLuA”為前綴的項(xiàng)目中。2.添加附錄B相關(guān)的項(xiàng)目

附錄B的參考源程序全部在FuLuBWpfApp項(xiàng)目中。1.3應(yīng)用程序主菜單設(shè)計(jì)1.3.1控制臺(tái)應(yīng)用程序項(xiàng)目的主菜單設(shè)計(jì)1.3.2WPF應(yīng)用程序項(xiàng)目的主菜單設(shè)計(jì)1.3.1控制臺(tái)應(yīng)用程序項(xiàng)目的主菜單設(shè)計(jì)1.修改Program.cs文件2.調(diào)試運(yùn)行

鼠標(biāo)右擊【解決方案資源管理器】中的項(xiàng)目名“ExampleConsoleApp”,在彈出的快捷菜單中單擊【設(shè)為啟動(dòng)項(xiàng)目】,默認(rèn)啟動(dòng)ExampleConsoleApp。按<F5>鍵調(diào)試運(yùn)行。1.3.1控制臺(tái)應(yīng)用程序項(xiàng)目的主菜單設(shè)計(jì)3.添加第1章的主菜單和示例

鼠標(biāo)右擊ExampleConsoleApp項(xiàng)目,在彈出的快捷菜單中選擇【添加】→【新建文件夾】,并將文件夾命名為Ch01,然后鼠標(biāo)右擊該文件夾,在彈出的快捷菜單中選擇【添加】→【類】,分別添加下面的文件。4.再次調(diào)試運(yùn)行

按<F5>鍵調(diào)試運(yùn)行1.3.2WPF應(yīng)用程序項(xiàng)目的主菜單設(shè)計(jì)1.在Wpfz項(xiàng)目中添加自定義控件和主題

2.在ExampleWpfApp項(xiàng)目中添加資源文件

在ExampleWpfApp項(xiàng)目中添加一個(gè)名為Resources的文件夾。3.添加主題引用1.3.2WPF應(yīng)用程序項(xiàng)目的主菜單設(shè)計(jì)3.添加主題引用(1)添加引用。鼠標(biāo)右擊項(xiàng)目的【引用】,在彈出的快捷菜單中選擇【添加引用】命令,在彈出的窗口中選擇要引用的dll文件。(2)鼠標(biāo)單擊引用的dll文件,將其【復(fù)制本地】屬性改為“True”。4.修改App.xaml文件 App.xaml是設(shè)置啟動(dòng)窗口以及設(shè)置主題和全局樣式的地方。雙擊ExampleWpfApp項(xiàng)目下的App.xaml文件,即可修改。1.3.2WPF應(yīng)用程序項(xiàng)目的主菜單設(shè)計(jì)5.添加Default.xaml文件

在彈出的快捷菜單中依次選擇【添加】→【頁(yè)】,添加一個(gè)文件名為Default.xaml的頁(yè)。6.修改MainWindow.xaml文件及其代碼隱藏類7.調(diào)試運(yùn)行

按<F5>鍵調(diào)試運(yùn)行。1.4同一個(gè)解決方案中不同項(xiàng)目之間的交互1.4.1在應(yīng)用程序中調(diào)用自定義控件庫(kù)1.4.2在WPF應(yīng)用程序中調(diào)用控制臺(tái)應(yīng)用程序1.4.1在應(yīng)用程序中調(diào)用自定義控件庫(kù)1.在App.xaml.cs文件中添加ExecConsoleApp方法

這一步的目的是在WPF應(yīng)用程序項(xiàng)目中調(diào)用控制臺(tái)應(yīng)用程序中包含的例子。2.添加E01HelloWorldPage.xaml文件

先添加一個(gè)名為Ch01的文件夾到ExampleWpfApp項(xiàng)目中,然后鼠標(biāo)右擊該文件夾,在彈出的快捷菜單中單擊【添加】→【頁(yè)】,將文件名改為“E01HelloWorldPage.xaml”,單擊【添加】按鈕。1.4.2在WPF應(yīng)用程序中調(diào)用控制臺(tái)應(yīng)用程序3.修改E01HelloWorldPage.xaml.cs文件

4.調(diào)試運(yùn)行

按<F5>鍵調(diào)試運(yùn)行。1.5C#代碼的組織和調(diào)試1.5.1命名空間和類1.5.2Main方法1.5.3代碼注釋與代碼的快速輸入1.5.4C#代碼命名約定1.5.5通過(guò)斷點(diǎn)調(diào)試C#程序1.5.1命名空間和類1.將類劃分到不同的命名空間中是對(duì)類的一種劃分,類似于目錄和文件的劃分形式。命令空間是一種邏輯劃分,而非物理上的存儲(chǔ)分類。命名空間命名空間命名空間命名空間命名空間命名空間命名空間命名空間類類類………………1.5.1命名空間和類2.using關(guān)鍵字作為引用指令(指定引用的命名空間),例如:usingSystem.Windows.Forms;作為別名指令(簡(jiǎn)化命名空間的層次表達(dá)形式),例如:usingWinForm=System.Windows.Form;作為語(yǔ)句(定義一個(gè)范圍)程序執(zhí)行到“}”時(shí),就會(huì)自動(dòng)釋放font1對(duì)象,例如:using(varfont1=newFont("Arial",10.0f);){……}1.5.2Main方法一個(gè)應(yīng)用程序中只能有一個(gè)Main方法,具體要求:應(yīng)用程序入口的方法名必須是“Main”,注意M大寫(xiě)Main方法必須聲明為publicstaticMain方法的返回類型只能是void或者int。返回類型為int時(shí),一般用于返回錯(cuò)誤代碼Main方法可以放在任何一個(gè)類中。一般將Main方法放在Program.cs文件中,這樣容易找到它,例如MyConsoleApp中的Program.cs。WPF應(yīng)用程序中的Main方法是自動(dòng)生成的,而且不允許開(kāi)發(fā)人員直接修改該方法,詳見(jiàn)obj/Debug文件夾下的App.g.i.cs文件。1.5.3代碼注釋與代碼的快速輸入1、代碼的常規(guī)注釋方式單行注釋:以“//”符號(hào)開(kāi)始,任何位于“//”符號(hào)后的本行文字都視為注釋。說(shuō)明:一般利用快捷鍵一次性注釋多行,而不是一行一行地去添加注釋。塊注釋:以“/*”開(kāi)始,“*/”結(jié)束。任何介于這對(duì)符號(hào)之間的文字塊都視為注釋。1.5.3代碼注釋與代碼的快速輸入2、XML注釋方式“///”符號(hào)是一種XML注釋方式在用戶自定義的類型如類、接口、枚舉等或者在其成員上方,或者命名空間的聲明上方連續(xù)鍵入3個(gè)斜杠字符可以在鍵入方法名和參數(shù)的過(guò)程中看到用XML注釋的智能提示。1.5.3代碼注釋與代碼的快速輸入3、#region注釋方式#region是一條預(yù)處理指令,用于給程序段添加邏輯功能注釋,讓某一部分代碼實(shí)現(xiàn)的邏輯功能看起來(lái)更清晰。被包圍的代碼還可以折疊和展開(kāi)。舉例:#region程序入口staticvoidMain(string[]args){......}#endregion1.5.4C#代碼命名約定1.Pascal命名法

類名、方法名和屬性名全部使用Pascal命名法,即所有單詞連寫(xiě),每個(gè)單詞的第1個(gè)字母大寫(xiě),其他字母小寫(xiě)。2.Camel命名法

變量名、對(duì)象名以及方法的參數(shù)名全部使用Camel命名法,即所有單詞連寫(xiě),但是第1個(gè)單詞全部小寫(xiě),其他每個(gè)單詞的第1個(gè)字母大寫(xiě)。1.5.4C#代碼命名約定3.前綴命名法

如果是私有字段,為了和具有相同名字的屬性名區(qū)分,私有的字段名也可以用下劃線“_”開(kāi)頭。4.控件命名法

關(guān)于控件對(duì)象的命名,有兩種常用的命名形式,一種是“有意義的名稱+控件名”。1.5.5通過(guò)斷點(diǎn)調(diào)試C#程序斷點(diǎn)調(diào)試是編程人員的必備素質(zhì),利用斷點(diǎn)查找程序的邏輯錯(cuò)誤,是最常用的手段之一。1、設(shè)置和取消斷點(diǎn)單擊某代碼行左邊的灰色區(qū)域。單擊設(shè)置,再次單擊取消設(shè)置。鼠標(biāo)右擊某代碼行,選擇【斷點(diǎn)】

【插入斷點(diǎn)】或者【刪除斷點(diǎn)】。單擊某代碼行,直接按<F9>鍵進(jìn)行設(shè)置或取消設(shè)置。2、利用斷點(diǎn)調(diào)試程序按<F5>執(zhí)行到斷點(diǎn),<Shift>+<F5>鍵終止調(diào)試。<F10>逐過(guò)程、<F11>逐語(yǔ)句1.5.5通過(guò)斷點(diǎn)調(diào)試C#程序3、查看定義和轉(zhuǎn)到定義(以WPF應(yīng)用程序?yàn)槔┦髽?biāo)右擊InitializeComponent();方法,單擊【查看定義】,此時(shí)會(huì)在其下方直接顯示該方法的源程序。鼠標(biāo)右擊InitializeComponent();方法,單擊【轉(zhuǎn)到定義】,此時(shí)會(huì)在單獨(dú)的選項(xiàng)卡中顯示該方法的源程序。

第2章控制臺(tái)和WPF編程入門(mén)47Ch2控制臺(tái)和WPF編程入門(mén)2.1控制臺(tái)應(yīng)用程序入門(mén)2.2WPF應(yīng)用程序入門(mén)2.1控制臺(tái)應(yīng)用程序入門(mén)2.1.1控制臺(tái)輸出與輸入2.1.2數(shù)據(jù)的格式化表示與基本用法2.1.3在WPF中調(diào)用控制臺(tái)應(yīng)用程序中的對(duì)應(yīng)例子2.1控制臺(tái)應(yīng)用程序入門(mén)

控制臺(tái)應(yīng)用程序是通過(guò)命令行方式運(yùn)行的程序。用戶可在命令行窗口輸入文本字符串,在顯示器上把文本逐行顯示出來(lái)。2.1.1控制臺(tái)輸出與輸入1、控制臺(tái)輸出通過(guò)System.Console類提供的靜態(tài)Write、WriteLine方法實(shí)現(xiàn)控制臺(tái)輸出。Console.Write();把各種類型的數(shù)據(jù)或?qū)ο筠D(zhuǎn)換成字符串寫(xiě)入標(biāo)準(zhǔn)輸出流Console.WriteLine();與Write的區(qū)別:自動(dòng)輸出回車換行符(“\r\n”);例如:intage=18;strings="abc";Console.Write(s);Console.WriteLine(age);2.1.1控制臺(tái)輸出與輸入2、控制臺(tái)輸入常用有:Console.ReadKey()從標(biāo)準(zhǔn)輸入流讀取用戶按下的字符或功能鍵。例如:varc=Console.ReadKey();Console.ReadLine();從標(biāo)準(zhǔn)輸入流讀取一行字符。例如:

strings=Console.ReadLine();2.1.2數(shù)據(jù)的格式化表示與基本用法

無(wú)論是控制臺(tái)應(yīng)用程序、WPF應(yīng)用程序還是其他類型的應(yīng)用程序模型,都可以利用string.Format方法將數(shù)據(jù)轉(zhuǎn)換為字符串,并按規(guī)定的格式化表示形式定義輸出的格式。2.1.2數(shù)據(jù)的格式化表示與基本用法1、格式化字符串的一般表示形式{N[,M][:格式碼]}N—從零開(kāi)始的整數(shù),表示第幾個(gè)參數(shù)。M—可選,用整數(shù)表示最小長(zhǎng)度。若參數(shù)N的長(zhǎng)度小于M,默認(rèn)用空格填充;若大于,按實(shí)際數(shù)輸出。M為負(fù)左對(duì)齊,M為正右對(duì)齊;格式碼—可選。C—貨幣形式、D—十進(jìn)制、F—固定精度、E—指數(shù)、N—用逗號(hào)分隔千位數(shù)字、P—百分比、X—十六進(jìn)制,格式碼也可以用占位符表示:0—強(qiáng)制占位符、#—有效占位符2.1.2數(shù)據(jù)的格式化表示與基本用法2、利用string.Format方法格式化字符串在控制臺(tái)應(yīng)用程序中,可以先用String.Format方法拼接字符串,再用WriteLine方法輸出;該方法可于各種類型的應(yīng)用程序(桌面、Web、移動(dòng)),而不是僅在控制臺(tái)應(yīng)用程序中可以這樣做。例如:inti=123;strings1=string.Format("{0:d6}",i);

strings2=$"{i:d6}“//結(jié)果:s1=000123,s2=000123Console.WriteLine("s1="+s1+",s2="+s2);2.1.2數(shù)據(jù)的格式化表示與基本用法3.利用“$”字符串表示法得到格式化后的字符串$”字符串表示法是從C#6.0開(kāi)始增加的一種格式化字符串的簡(jiǎn)潔表示形式,這種方式比使用string.Format更直觀易理解。例如:inti=123;strings1=$"{i:d6}";Console.WriteLine(s1);2.1.2數(shù)據(jù)的格式化表示與基本用法4.利用ToString方法格式化字符串如果是一個(gè)變量,使用ToString方法可能更簡(jiǎn)單,該方法同樣適用于各種類型的應(yīng)用程序。例如:intn1=12;strings1=n1.ToString("X4");//X:十六進(jìn)制。結(jié)果:000Cstrings2=n1.ToString("d5");//結(jié)果:000122.2WPF應(yīng)用程序入門(mén)2.2.1基本概念2.2.2WPF窗口和WPF頁(yè)2.2.3WPF控件模型及其樣式控制2.2.4WPF基本控件2.2.5在WPF應(yīng)用程序中彈出消息框2.2.6文本和密碼輸入2.2.7在WPF應(yīng)用程序中調(diào)用DLL文件2.2.8WPF中的顏色表示2.2.1基本概念概念1:WPFWPF是一種“以屬性為核心”的編程模型。主要用于開(kāi)發(fā)C/S客戶端程序(比如QQ、360安全衛(wèi)士、飛信、股票軟件、……等)。WPF基于DirectX和GPU加速來(lái)實(shí)現(xiàn)的圖形界面顯示技術(shù)。WinForm的界面是全部用C#代碼實(shí)現(xiàn),WPF的界面除了用C#來(lái)實(shí)現(xiàn)以外,還可以用XAML來(lái)實(shí)現(xiàn)。凡是用XAML編寫(xiě)的界面都可以用C#代碼實(shí)現(xiàn),但反之不一定。概念2:App類App類的基類為Application類,該類主要定義在整個(gè)應(yīng)用程序范圍內(nèi)都可以使用的資源和屬性。例如:Applicationcurrent=App.Current;2.2.1基本概念1、應(yīng)用程序入口

仍然是Main方法,但該方法被隱藏了,改為讓開(kāi)發(fā)人員通過(guò)

App.xaml文件來(lái)設(shè)置。<Applicationx:Class="Source.App"……

StartupUri="MainWindow.xaml"><Application.Resources>……</Application.Resources></Application>592.2.1基本概念2.XAML標(biāo)記和代碼隱藏

WPF使用XAML(可擴(kuò)展應(yīng)用程序標(biāo)記語(yǔ)言)為應(yīng)用程序提供所見(jiàn)即所得的聲明性編程模型,使用C#語(yǔ)言編寫(xiě)后臺(tái)邏輯代碼。(1)XAML標(biāo)記

XAML是一種基于XML(可擴(kuò)展標(biāo)記語(yǔ)言)且遵循XML結(jié)構(gòu)規(guī)則的聲明性標(biāo)記語(yǔ)言。XAML文件是具有.xaml擴(kuò)展名的XML文件,文件編碼默認(rèn)使用UTF-8。(2)代碼隱藏

應(yīng)用程序的主要行為是實(shí)現(xiàn)響應(yīng)用戶交互的功能,包括處理事件(例如,單擊菜單、工具欄或按鈕)以及調(diào)用業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)邏輯。在WPF中,通過(guò)與XAML標(biāo)記相關(guān)聯(lián)的C#代碼來(lái)實(shí)現(xiàn)此行為。這種用C#實(shí)現(xiàn)的代碼稱為代碼隱藏。602.2.1基本概念2.XAML標(biāo)記和代碼隱藏

WPF使用XAML(可擴(kuò)展應(yīng)用程序標(biāo)記語(yǔ)言)為應(yīng)用程序提供所見(jiàn)即所得的聲明性編程模型,使用C#語(yǔ)言編寫(xiě)后臺(tái)邏輯代碼。(1)XAML標(biāo)記

XAML是一種基于XML(可擴(kuò)展標(biāo)記語(yǔ)言)且遵循XML結(jié)構(gòu)規(guī)則的聲明性標(biāo)記語(yǔ)言。XAML文件是具有.xaml擴(kuò)展名的XML文件,文件編碼默認(rèn)使用UTF-8。(2)代碼隱藏

應(yīng)用程序的主要行為是實(shí)現(xiàn)響應(yīng)用戶交互的功能,包括處理事件(例如,單擊菜單、工具欄或按鈕)以及調(diào)用業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)邏輯。在WPF中,通過(guò)與XAML標(biāo)記相關(guān)聯(lián)的C#代碼來(lái)實(shí)現(xiàn)此行為。這種用C#實(shí)現(xiàn)的代碼稱為代碼隱藏。612.2.1基本概念3.根元素和XAML命名空間聲明XAML命名空間解決了XAML標(biāo)記和C#代碼共享的問(wèn)題。根元素和XAML命名空間一個(gè)XAML文件(擴(kuò)展名為.xaml的文件)只能有一個(gè)根元素。x:Class用于將XAML和代碼隱藏類關(guān)聯(lián)。xmlns特性聲明XAML默認(rèn)的命名空間。622.2.1基本概念x:前綴編程構(gòu)造根元素的xmlns:x用于XAML命名空間映射,目的是為了通過(guò)x:前綴聲明可被其他XAML和C#代碼引用的對(duì)象。控件的Name特性:聲明的目的是為了在代碼隱藏類中引用它。只有在模板、自定義控件、動(dòng)畫(huà)等特殊場(chǎng)合才需要用x:Name特性。在XAML中映射自定義命名空間若在XAML中引用自定義對(duì)象,必須在XAML中映射自定義命名空間。63642.2.1基本概念4、XAML基本語(yǔ)法

概念:XAML的語(yǔ)法與HTML的語(yǔ)法非常相似,即都是利用元素、特性(Attribute)和屬性(Property)來(lái)描述元素對(duì)象的各種要素XAML最基本的語(yǔ)法:<對(duì)象名

特性名1="值1"特性名2="值2"……></對(duì)象名>XAML中的對(duì)象名、特性名以及屬性名都區(qū)分大小寫(xiě)。652.2.1基本概念4、XAML基本語(yǔ)法(續(xù))(1)對(duì)象元素語(yǔ)法對(duì)象是指類的實(shí)例,在XAML中用對(duì)象元素來(lái)描述。例如:<ButtonName="OkButton"Content="確定"/>(2)特性語(yǔ)法(最常用)用特性(Attribute)來(lái)描述對(duì)象的屬性(Property),特性名和特性值之間用賦值號(hào)(=)分隔,特性的值始終用字符串來(lái)指定,引號(hào)默認(rèn)用雙引號(hào),也可以是單引號(hào),原則是“值”兩邊的引號(hào)必須匹配。例如:<ButtonBackground="Blue"Foreground="Red"Content="按鈕1"/>特性語(yǔ)法還可用于描述事件成員。例如:

<ButtonClick="Button_Click">ClickMe!</Button>662.2.1基本概念4、XAML基本語(yǔ)法(續(xù))(3)屬性語(yǔ)法:有時(shí)僅僅用特性語(yǔ)法無(wú)法來(lái)描述對(duì)象的某些屬性,此時(shí)可以用屬性語(yǔ)法來(lái)描述。一般格式為:<類名.屬性名>……</類名.屬性名>例如:<ButtonBackground="Blue"Foreground="Red"Content="右擊觀察快捷菜單"Margin="73,108,74,115">

<Button.ContextMenu><ContextMenu><MenuItem>快捷菜單項(xiàng)1</MenuItem><MenuItem>快捷菜單項(xiàng)2</MenuItem></ContextMenu>

</Button.ContextMenu></Button>672.2.1基本概念4、XAML基本語(yǔ)法(續(xù))(4)集合語(yǔ)法:如果某個(gè)屬性采用集合類型,可以使用集合語(yǔ)法。例如(這段代碼是利用【屬性】窗口設(shè)置后自動(dòng)生成的):<Window.Background><LinearGradientBrush>

<LinearGradientBrush.GradientStops><GradientStopOffset="0.0"Color="Red"/><GradientStopOffset="1.0"Color="Blue"/></LinearGradientBrush.GradientStops></LinearGradientBrush></Window.Background>(5)XAML內(nèi)容屬性:內(nèi)容屬性的用途是為了簡(jiǎn)化標(biāo)記,或者用于嵌套子元素。例如:

<TextBox>ThisisaTextBox</TextBox>

相當(dāng)于:

<TextBoxText="ThisisaTextBox"/>682.2.1基本概念4、XAML基本語(yǔ)法(續(xù))(6)內(nèi)容屬性和集合語(yǔ)法組合<StackPanel><Button>按鈕1</Button><Button>按鈕2</Button></StackPanel>(7)類型轉(zhuǎn)換器將用字符串進(jìn)行設(shè)置的特性值轉(zhuǎn)換為其他對(duì)象類型或基元值。例如:<ButtonMargin="10,20,30,40"Content="確定"/>相當(dāng)于:<ButtonContent="確定">

<Button.Margin><ThicknessLeft="10"Top="20"Right="30"Bottom="40"/></Button.Margin></Button>692.2.1基本概念4、XAML基本語(yǔ)法(續(xù))(7)XAML中的空白處理XAML中的空白字符包括空格、換行符、制表符等。默認(rèn)情況下,XAML處理器會(huì)將所有空白字符自動(dòng)轉(zhuǎn)換為空格。注意:默認(rèn)情況下,連續(xù)的多個(gè)空格將被替換為“一個(gè)”空格。如果希望保留文本字符串中的多個(gè)空格,可以在該元素的開(kāi)始標(biāo)記內(nèi)添加xml:space=“preserve”特性。

702.2.2WPF窗口和WPF頁(yè) WPF應(yīng)用程序有兩種常見(jiàn)的界面呈現(xiàn)技術(shù),一種稱為“WPF窗口”,簡(jiǎn)稱“窗口”;另一種稱為“WPF頁(yè)”,簡(jiǎn)稱“頁(yè)(Page)”。712.2.2WPF窗口和WPF頁(yè)1.窗口1、窗口分類WPF窗口由非工作區(qū)和工作區(qū)兩部分構(gòu)成,非工作區(qū)主要包括圖標(biāo)、標(biāo)題、系統(tǒng)菜單、按鈕和邊框。通過(guò)【W(wǎng)indowStyle】屬性可設(shè)置窗口樣式:標(biāo)準(zhǔn)窗口(SingleBorderWindow,默認(rèn))無(wú)標(biāo)題窗口(None):只有工作區(qū)部分。

工具窗口(ToolWindow):非工作區(qū)的右上角只有關(guān)閉按鈕,不包括最小化、最大化和還原按鈕。通知圖標(biāo)(NotifyIcon)。722.2.2WPF窗口和WPF頁(yè)2、窗口生存周期指從第1次打開(kāi)窗口到關(guān)閉窗口經(jīng)歷的一系列過(guò)程。在窗口的生存期中,會(huì)引發(fā)很多事件(見(jiàn)表7-2)。

常用:SourceInitialized事件Closing事件732.2.2WPF窗口和WPF頁(yè)3、激活窗口活動(dòng)窗口:當(dāng)前正在捕獲用戶輸入(如鍵盤(pán)或鼠標(biāo)等)的窗口。首次打開(kāi)一個(gè)窗口時(shí),該窗口便成為活動(dòng)窗口。當(dāng)窗口變?yōu)榛顒?dòng)窗口時(shí),會(huì)引發(fā)Activated事件。當(dāng)前活動(dòng)窗口停用時(shí)引發(fā)Deactivated事件。利用IsActive屬性可檢查窗口是否處于活動(dòng)狀態(tài)。742.2.2WPF窗口和WPF頁(yè)4、創(chuàng)建并顯示新窗口在C#代碼中調(diào)用Show方法或者ShowDialog方法顯示窗口。無(wú)模式窗口:調(diào)用Show方法。模式窗口:調(diào)用ShowDialog方法。對(duì)于“無(wú)模式”窗口,調(diào)用Hide方法可將其隱藏。752.2.2WPF窗口和WPF頁(yè)

5、關(guān)閉窗口直接調(diào)用Close方法即可關(guān)閉當(dāng)前打開(kāi)的窗口窗口關(guān)閉時(shí)會(huì)引發(fā)兩個(gè)事件:Closing事件和Closed事件。6、窗口關(guān)聯(lián)通過(guò)設(shè)置子窗口的Owner屬性讓該子窗口附屬于其父窗口。例如:WindowownedWindow=newWindow();ownedWindow.Owner=this;ownedWindow.Show();762.2.2WPF窗口和WPF頁(yè)

2.頁(yè)要點(diǎn):(1)在WPF應(yīng)用程序中,既可以用窗口(Window)設(shè)計(jì)界面,也可以用

頁(yè)(Page)設(shè)計(jì)界面。(2)用Page時(shí),可通過(guò)Frame或者NavigationWindow來(lái)承載。

1、在窗口中承載Page(不常用)

將Window作為頁(yè)的宿主窗口。例如:Windoww=newWindow();Page1p=newPage1();w.Content=p;w.Show();這種方式只能用C#代碼實(shí)現(xiàn),而且承載的頁(yè)沒(méi)有導(dǎo)航功能,頁(yè)中的超鏈接也不會(huì)起作用,因此在實(shí)際應(yīng)用中很少這樣用。772.2.2WPF窗口和WPF頁(yè)

2、在NavigationWindow中承載Page(不常用)將NavigationWindow(瀏覽器用的窗口)作為頁(yè)的宿主窗口。例如:Windoww=newSystem.Windows.Navigation.NavigationWindow();w.Content=newPageExamples.Page1();w.Show();采用這種方式時(shí),可以在頁(yè)中設(shè)置導(dǎo)航窗口(NavigationWindow)的標(biāo)題以及窗口大小。也可以在C#代碼中使用NavigationService類提供的靜態(tài)方法實(shí)現(xiàn)導(dǎo)航功能。Page的常用屬性如下。WindowTitle:設(shè)置導(dǎo)航窗口的標(biāo)題。WindowWidth和WindowHeight:設(shè)置導(dǎo)航窗口的寬度和高度。ShowsNavigationUI:false表示不顯示導(dǎo)航條,true表示顯示導(dǎo)航條。NavigationService屬性:獲取該頁(yè)的宿主窗口中管理導(dǎo)航服務(wù)的對(duì)象,利用該對(duì)象可實(shí)現(xiàn)前進(jìn)、后退、清除導(dǎo)航記錄等操作。782.2.2WPF窗口和WPF頁(yè)

3、在Frame中承載Page(常用)在Frame元素中將其Source屬性設(shè)置為導(dǎo)航到的頁(yè),在這種方式下,既可以用XAML加載頁(yè)并實(shí)現(xiàn)導(dǎo)航,也可以用C#代碼來(lái)實(shí)現(xiàn)。例如:用XAML實(shí)現(xiàn):<FrameName="frame1"NavigationUIVisibility="Visible"Source="Page1.xaml"Background="#FFF9F4D4"/>用C#實(shí)現(xiàn):frame1.Source=newUri("Page1.xaml",UriKind.Relative);792.2.3WPF控件模型及其樣式控制1.WPF控件模型內(nèi)容:指顯示控件內(nèi)容的區(qū)域,可以是文本、圖像或其他控件元素。Padding:內(nèi)邊距。即邊框和內(nèi)容之間的矩形環(huán)區(qū)域。邊框:即內(nèi)邊距和外邊距之間的黑色矩形環(huán)區(qū)域。Margin:外邊距。指邊框和圖中虛線包圍的矩形環(huán)區(qū)域,表示該控件和其他控件之間的距離。802.2.3WPF控件模型及其樣式控制2.控件共有的基本屬性Name和x:Name

在WPF應(yīng)用程序中,可以用Name特性指定元素對(duì)象的名稱,以便在代碼隱藏類中能通過(guò)C#代碼找到該XAML元素。例如: <ButtonName="btnOK"Content="確定"/>XAML:

如果既希望在C#代碼中能引用指定的元素對(duì)象,又希望在XAML代碼中也能引用該元素對(duì)象,可通過(guò)x:Name特性來(lái)聲明這個(gè)元素。例如: <Buttonx:Name="ButtonOK"Content="確定"/>812.2.3WPF控件模型及其樣式控制外邊距(Margin)常用有兩種形式,一種是用一個(gè)值來(lái)描述,例如下面的代碼表示按鈕周邊四個(gè)方向的外邊距都是10。XAML:<ButtonName="Button1"Margin="10">按鈕1</Button>C#:Button1.Margin=newThickness(10);另一種是按照“左、上、右、下”的順序用4個(gè)值分別描述。例如下面的代碼表示Button2按鈕的左、上、右、下的外邊距分別是0、10、0、10XAML:<ButtonName="Button2"Margin="0,10,0,10">按鈕2</Button>C#:Button2.Margin=newThickness(0,10,0,10);內(nèi)邊距(Padding)控制元素內(nèi)部與其子元素或文本之間的間距,其用法和Margin屬性的用法相似。822.2.3WPF控件模型及其樣式控制水平對(duì)齊(HorizontalAlignment)聲明元素相對(duì)于其父元素的水平對(duì)齊方式。垂直對(duì)齊(VerticalAlignment)描述元素相對(duì)于其父元素的垂直對(duì)齊方式。可能的取值分別為T(mén)op(頂端對(duì)齊)、Center(中心對(duì)齊)、Bottom(底端對(duì)齊)和Stretch(默認(rèn),垂直拉伸)。

員說(shuō)

明Left、Center、Right子元素在其父元素內(nèi)左端對(duì)齊、中心對(duì)齊、右端對(duì)齊Stretch(默認(rèn))拉伸子元素至父元素的已分配空間。如果聲明了Width和Height,則Width和Height優(yōu)先832.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

842.2.4WPF基本控件1.StackPanel和WrapPanel這兩個(gè)控件主要用于將其子元素按縱向或者橫向依次排列。StackPanel和WrapPanel的常用屬性都是Orientation屬性,用于控制排列的方向??蛇x值為Vertical(縱向排列)和Horizontal(橫向排列)。StackPanel默認(rèn)縱向排列且子元素超出邊界時(shí)不再顯示,WrapPanel默認(rèn)橫向排列且子元素超出邊界時(shí)自動(dòng)轉(zhuǎn)到下一行顯示。852.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

862.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

872.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

882.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

892.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

902.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

912.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

922.2.3WPF控件模型及其樣式控制3.控件資源和樣式控制(1)Style元素

利用Style元素可以很方便地一次性控制界面(窗口或頁(yè))中包含的多個(gè)元素呈現(xiàn)的效果,樣式的控制范圍由元素樹(shù)中所定義的資源(Resources)的位置來(lái)決定。(2)基本用法

后面我們還會(huì)在單獨(dú)的章節(jié)中學(xué)習(xí)各種資源及其樣式控制的辦法,本章僅需要了解最基本的用法即可。

932.2.4WPF基本控件1.StackPanel和WrapPanel

這兩個(gè)控件主要用于將其子元素按縱向或者橫向依次排列。 StackPanel和WrapPanel的常用屬性都是Orientation屬性,用于控制排列的方向。可選值為Vertical(縱向排列)和Horizontal(橫向排列)。 StackPanel默認(rèn)縱向排列且子元素超出邊界時(shí)不再顯示,WrapPanel默認(rèn)橫向排列且子元素超出邊界時(shí)自動(dòng)轉(zhuǎn)到下一行顯示。

942.2.4WPF基本控件2.GroupBox

GroupBox包含一個(gè)標(biāo)題和一個(gè)內(nèi)容項(xiàng),標(biāo)題和內(nèi)容都可以是任何類型。常用屬性如下。

Header:獲取或設(shè)置分組框的標(biāo)題。

Content:獲取或設(shè)置分組框的內(nèi)容。

952.2.4WPF基本控件3.Border

Border用于在某個(gè)元素周圍繪制邊框,或者為某元素提供背景。Border的子元素只能有一個(gè),但這個(gè)子元素內(nèi)可以包含多個(gè)元素。常用屬性如下。CornerRadius:獲取或設(shè)置邊框的圓角半徑。BorderBrush:獲取或設(shè)置邊框的畫(huà)筆。BorderThickness:獲取或設(shè)置邊框的粗細(xì)。Padding:獲取或設(shè)置Border與其包含的子對(duì)象之間的距離。962.2.4WPF基本控件4.本文顯示(TextBlock、Label)(1)TextBlockTextBlock主要用于顯示純文本信息。常用屬性有以下幾種。Text:獲取或設(shè)置要顯示的文本(文字或圖形字符)。FontFamily:獲取或設(shè)置文本使用的字庫(kù)名稱。FontSize:獲取或設(shè)置文本的字體大小。Foreground:獲取或設(shè)置文本的顏色。(2)LabelLabel是一個(gè)可包含任意內(nèi)容的對(duì)象。下面的代碼演示了如何利用它顯示文本。972.2.4WPF基本控件5.按鈕(Button、RepeatButton)Button:除了顯示文字之外還可以顯示圖像或者同時(shí)顯示圖像和文字。RepeatButton:從按下按鈕到釋放按鈕的時(shí)間段內(nèi)會(huì)自動(dòng)重復(fù)引發(fā)其Click事件。Delay屬性:指定事件的開(kāi)始時(shí)間Interval屬性:控制重復(fù)的間隔時(shí)間。982.2.4WPF基本控件【例2-4】演示窗口、頁(yè)、文本和圖形字符的基本用法,運(yùn)行效果如圖2-6所示。其中,左側(cè)為單擊該例子后看到的界面,右側(cè)為單擊【彈出窗口】后看到的效果。992.2.5在WPF應(yīng)用程序中彈出消息框消息框(MessageBox類)調(diào)用靜態(tài)Show方法顯示消息框,常用重載形式有:publicstaticDialogResultShow(stringtext)publicstaticDialogResultShow(stringtext,stringcaption)publicstaticDialogResultShow(stringtext,stringcaption,MessageBoxButtonbuttons,MessageBoxImageicon)1002.2.5在WPF應(yīng)用程序中彈出消息框【例2-5】演示消息框的基本用法,運(yùn)行結(jié)果如圖2-7所示。1012.2.6文本和密碼輸入1.TextBoxTextBox控件用于顯示或編輯純文本字符。常用屬性如下。Text:表示顯示的文本;MaxLength:限制用戶輸入的字符數(shù);AcceptsReturn:False(默認(rèn))、True(按回車鍵換行)TextWrapping:控制是否自動(dòng)轉(zhuǎn)到下一行,當(dāng)其值為“Wrap”時(shí),該控件可自動(dòng)擴(kuò)展以容納多行文本;BorderBrush:邊框顏色;BorderThickness:邊框?qū)挾龋绻幌M摽丶@示邊框,將其設(shè)置為0即可。例如:<TextBoxMaxLength="5"Width="60"BorderBrush="#FF5ECD3D"BorderThickness="2"TextWrapping="Wrap"Text="多行文本"/>TextBox控件的常用事件是TextChanged事件。1022.2.6文本和密碼輸入2.PasswordBox:密碼輸入。PasswordChar屬性:掩碼,即不論輸入什么字符,顯示的都是用它指定的字符;Password屬性:獲取或設(shè)置輸入的密碼字符串。PasswordChanged事件:當(dāng)密碼字符串改變時(shí)發(fā)生。除了這兩個(gè)屬性之外,其他用法和TextBox相同。例如:<PasswordBoxPassword="abc"PasswordChar="*"></PasswordBox>注意:PasswordBox應(yīng)該用PasswordChanged事件,不能用KeyDown、MouseDown或者M(jìn)ouseUp事件來(lái)判斷。1032.2.6文本和密碼輸入【例2-6】演示文本框和密碼框的基本用法,運(yùn)行效果如圖2-8所示。1042.2.7在WPF應(yīng)用程序中調(diào)用DLL文件

在WPF應(yīng)用程序中調(diào)用DLL文件的辦法與在控制臺(tái)應(yīng)用程序中調(diào)用DLL文件的辦法類似,區(qū)別僅是在哪里編寫(xiě)調(diào)用代碼?!纠?-7】設(shè)計(jì)一個(gè)WPF頁(yè),從鍵盤(pán)接收n個(gè)數(shù),在單獨(dú)的庫(kù)中計(jì)算并返回這n個(gè)數(shù)的和。運(yùn)行效果如圖2-9所示。1052.2.8WPF中的顏色表示

任何一種顏色都是通過(guò)對(duì)紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化和它們相互之間的疊加來(lái)得到的。

通過(guò)Alpha通道可控制顏色的透明度。1.顏色通道的XAML表示形式

用XAML表示顏色時(shí),可直接用字符串來(lái)聲明。一般形式為“#rrggbb”或者“#aarrggbb”,其中“#”表示十六進(jìn)制,a表示透明度,r表示紅色通道,g表示綠色通道,b表示藍(lán)色通道。也可以使用“#rgb”或者“#argb”的簡(jiǎn)寫(xiě)形式,例如,“#00F”或者“#F00F”。1062.2.8WPF中的顏色表示2.常用顏色格式XAML和C#都可以使用sRGB、ScRGB、HLS以及HSB格式表示顏色,XAML默認(rèn)使用sRGB。在【屬性】窗口中,單擊R、G、B之一,還可以選擇其他顏色格式。(1)sRGB格式

這種格式用4個(gè)字節(jié)表示一個(gè)像素的顏色。4個(gè)字節(jié)分別表示A(Alpha,即透明度)、R(紅色通道)、G(綠色通道)和B(藍(lán)色通道)。1072.2.8WPF中的顏色表示(2)scRGB格式ScRGB格式也是用4個(gè)字節(jié)表示一個(gè)像素的顏色(A、R、G、B各占1個(gè)字節(jié))。4個(gè)字節(jié)分別表示A(Alpha,即透明度)、R(紅色通道)、G(綠色通道)和B(藍(lán)色通道)。(3)HLS格式和HSB格式

這兩種格式分別用不透明度(Alpha)、色調(diào)(Hue)、飽和度(Saturation)和亮度(Lightness)來(lái)表示顏色。1082.2.8WPF中的顏色表示3.命名顏色

為了方便使用,WPF還提供了一組命名顏色?!纠?-8】顯示W(wǎng)PF提供的所有命名顏色,運(yùn)行效果如圖2-10所示。

第3章基本數(shù)據(jù)類型和流程控制語(yǔ)句111Ch3基本數(shù)據(jù)類型和流程控制語(yǔ)句3.1數(shù)據(jù)類型和運(yùn)算符3.2簡(jiǎn)單類型3.3字符串3.4數(shù)組3.5數(shù)據(jù)類型之間的轉(zhuǎn)換3.6流程控制語(yǔ)句3.1數(shù)據(jù)類型和運(yùn)算符3.1.1C#的類型系統(tǒng)3.1.2常量與變量3.1.3運(yùn)算符與表達(dá)式1133.1.1C#的類型系統(tǒng)C#類型劃分為兩類:值類型和引用類型。值類型:包括簡(jiǎn)單類型、枚舉類型、自定義結(jié)構(gòu)類型、可空類型。引用類型:包括類、接口、數(shù)組、委托。

1143.1.1C#的類型系統(tǒng)值類型和引用類型的區(qū)別:值類型的變量保存的是變量的值;引用類型的變量保存的是對(duì)象的引用地址。當(dāng)把一個(gè)值類型的變量賦給另一個(gè)值類型的變量時(shí),會(huì)在棧(stack)中保存兩個(gè)完全相同的值;把一個(gè)引用變量賦給另一個(gè)引用變量,在棧中的兩個(gè)值雖然相同,但是由于這兩個(gè)值都是堆(heap)中對(duì)象的引用地址,所以實(shí)際上引用的是同一個(gè)對(duì)象。1153.1.1C#的類型系統(tǒng)值類型和引用類型的區(qū)別(續(xù))5.進(jìn)行數(shù)據(jù)操作時(shí),對(duì)于值類型,由于每個(gè)變量都有自己的值,因此對(duì)一個(gè)變量的操作不會(huì)影響其他變量;6.對(duì)于引用類型的變量,對(duì)一個(gè)變量的數(shù)據(jù)進(jìn)行操作就是對(duì)這個(gè)變量在堆中的數(shù)據(jù)進(jìn)行操作,如果兩個(gè)引用類型的變量引用同一個(gè)對(duì)象,對(duì)一個(gè)變量的操作也會(huì)影響另一個(gè)變量。1163.1.1C#的類型系統(tǒng)特性值類型引用類型變量中保存的內(nèi)容實(shí)際數(shù)據(jù)對(duì)象的引用指針內(nèi)存空間配置棧(stack)受管制的堆(managedheap)內(nèi)存需求較少較多執(zhí)行效率較快較慢內(nèi)存釋放時(shí)間點(diǎn)超過(guò)變量的作用域時(shí)由垃圾回收機(jī)制負(fù)責(zé)回收值類型和引用類型的區(qū)別一覽表1173.1.2常量與變量1、常量C#用const關(guān)鍵字聲明常量。例如:constintpi=3.1415927;編譯器會(huì)把所有聲明為const的常量全部替換為實(shí)際的常數(shù)。2、變量:表示一個(gè)數(shù)值、一個(gè)字符串值或者一個(gè)類的實(shí)例。inta=100;//聲明一個(gè)整型變量a,并賦初值為100inta;//聲明一個(gè)整型變量aa=100;//為整型變量a賦值為100inta=100,b,c=200,d;//a、c賦初值,b未賦初值1183.1.2常量與變量3、匿名類型的局部變量局部變量在C#中還可以用var來(lái)聲明。用var聲明的仍然是一種強(qiáng)類型的數(shù)據(jù),只是具體的數(shù)據(jù)類型由編譯器負(fù)責(zé)推斷而已。例如:varkey=Console.ReadKey();

這條語(yǔ)句和下面的語(yǔ)句是等價(jià)的:ConsoleKeyInfokey=Console.ReadKey();1193.1.2常量與變量【例3-1】演示const以及var的基本用法。運(yùn)行效果如圖3-1所示。其中,左側(cè)為WPF應(yīng)用程序的運(yùn)行效果,右側(cè)為單擊【用Console實(shí)現(xiàn)】按鈕后彈出的控制臺(tái)應(yīng)用程序的運(yùn)行效果。1203.1.3運(yùn)算符與表達(dá)式1、運(yùn)算符的種類:一元運(yùn)算符:帶有一個(gè)操作數(shù)的運(yùn)算符,如i++。二元運(yùn)算符:帶有兩個(gè)操作數(shù)的運(yùn)算符,如x+y。三元運(yùn)算符:帶有三個(gè)操作數(shù)的運(yùn)算符(只有一個(gè)?:運(yùn)算符)例如:varc=a>0?5:3;//如果a>0,則c為5,否則c為32、表達(dá)式

可計(jì)算并且結(jié)果為單個(gè)值、對(duì)象、方法或命名空間的代碼片段。

3.2簡(jiǎn)單類型整型即:《計(jì)算機(jī)組成原理》中介紹的定點(diǎn)數(shù)。在高級(jí)語(yǔ)言中,用“整型”來(lái)表示“定點(diǎn)整數(shù)”。C#提供了8種整數(shù)類型,分別表示1字節(jié)、2字節(jié)、4字節(jié)和8字節(jié)的整數(shù),每種又都分為有符號(hào)數(shù)和無(wú)符號(hào)數(shù)。給變量賦常數(shù)值時(shí),如果不用類型指定符,默認(rèn)將int類型的數(shù)值隱式地轉(zhuǎn)換為該類型進(jìn)行賦值。例:longy=1234;//將int型的數(shù)值1234隱式地轉(zhuǎn)換為long類型1213.2.1整型1、由于小寫(xiě)字母容易和數(shù)字混淆,所以Uint、Long、Ulong類型的常量指定符一般都用大寫(xiě)字母。例如:longx=1234L;2、給變量賦值時(shí),既可以采用十進(jìn)制的常數(shù)也可以采用十六進(jìn)制的常數(shù)。如果是十六進(jìn)制常數(shù),在程序中必須加前綴“0x”。例如:longa=0x12ab;該語(yǔ)句聲明一個(gè)長(zhǎng)整型變量a,并賦值為十六進(jìn)制的數(shù)(12AB)由于二進(jìn)制數(shù)都可以用十六進(jìn)制數(shù)來(lái)直觀地表示,所以不需要再提供二進(jìn)制數(shù)的表示形式。1223.2.2浮點(diǎn)型1、浮點(diǎn)類型有:float、double、decimal它們均屬于值類型。2、內(nèi)部表示在計(jì)算機(jī)內(nèi)部的硬件實(shí)現(xiàn)中,浮點(diǎn)數(shù)分別使用“32位單精度”和“64位雙精度”的IEEE754標(biāo)準(zhǔn)格式來(lái)表示(浮點(diǎn)數(shù)的格式見(jiàn)計(jì)算機(jī)組成原理中的介紹)。3、在C#中可以用下面的形式給浮點(diǎn)型變量賦值:floatx=2.3f;//x的值為2.3,不加f后綴默認(rèn)為doubley=2.7;//y的值為2.7doublez=2.7E+23;decimalx1=32.12345678901234m;1233.2.2浮點(diǎn)型4、實(shí)數(shù)常數(shù)后如果沒(méi)有后綴,默認(rèn)為double類型,double類型也可以加D或d后綴。15d、1.5d、1e10d和122.456D都是double類型。注意:在實(shí)數(shù)中,小數(shù)點(diǎn)后必須始終是十進(jìn)制數(shù)字。1.3F是實(shí)數(shù)(F表示該數(shù)為float類型的常數(shù)),但1.F不是,因?yàn)镕不是十進(jìn)制數(shù)字。5、小數(shù)型(decimal)是一種特殊的浮點(diǎn)型數(shù)據(jù),其特點(diǎn)是精度高,但表示的數(shù)值范圍并不大。decimalmoney=300.5M;decimaly=9999999999999999999999999M;decimalx=122.123456789123456789M;1243.2.3布爾型(bool)1、布爾型(bool)只有兩個(gè)值:true和falseboolisMale=false;boolb=(i>0&&i<10);2、條件表達(dá)式的運(yùn)算結(jié)果必須是bool類型

錯(cuò)誤用法

正確用法inti=5;j=6;inti=5,j=6;if(i)j+=10;if(i!=0)j+=10;if(j=15)j+=10;if(j==15)j+=10;1253.2.4字符(char)1、字符是值類型,用char表示每個(gè)字符占用的字節(jié)數(shù)與字符的編碼方式有關(guān)。C#的字符表示的是單個(gè)Unicode編碼的字符。一個(gè)Unicode字符占兩字節(jié)(字符的長(zhǎng)度為1)。字符型常量:用單引號(hào)引起來(lái),例如:charc1='A';2、也可以用十六進(jìn)制的轉(zhuǎn)義符前綴(“\x”)或Unicode表示法前綴(“\u”)來(lái)表示字符型常量,例如:charc2='\x0041';//字母“A”的十六進(jìn)制表示charc3='\u0041';//字母“A”的Unicode編碼表示1263.2.5枚舉(enum)1、枚舉類型將一組常量用一個(gè)類型來(lái)表示,該類型簡(jiǎn)稱枚舉。定義一個(gè)稱為MyColor的枚舉類型:publicenumMyColor{Red,Green,Blue}也可以寫(xiě)為publicenumMyColor{Red=0,Green=1,Blue=2}2、枚舉中的所有常量值必須是同一種類型(稱為基礎(chǔ)類型)?;A(chǔ)類型只能是8種整型類型之一。如果不指定基礎(chǔ)類型,默認(rèn)為int類型。注意下面的寫(xiě)法是錯(cuò)誤的(想一想為什么是錯(cuò)誤的):enumMyNumber:byte{x1=255,x2};127【例3-2】定義一個(gè)MyColor枚舉類型,然后聲明MyColor類型的變量,通過(guò)該變量使用枚舉值。再通過(guò)enum類型提供的靜態(tài)GetNames方法將MyColor的所

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論