Lect05 用戶界面交互V3_第1頁(yè)
Lect05 用戶界面交互V3_第2頁(yè)
Lect05 用戶界面交互V3_第3頁(yè)
Lect05 用戶界面交互V3_第4頁(yè)
Lect05 用戶界面交互V3_第5頁(yè)
已閱讀5頁(yè),還剩53頁(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)介

第5講用戶界面交互GUI(Delegate,F(xiàn)orms

,Controls)2023年2月4日學(xué)習(xí)內(nèi)容一、委托(Delegate)二、組件(Component)三、窗體(Forms)四、控件(Controls)2一、委托什么是委托委托的聲明與實(shí)例化多重代理3委托:包含了對(duì)方法的引用,定義一個(gè)方法的模板作用:當(dāng)程序調(diào)用一個(gè)方法來(lái)執(zhí)行某個(gè)操作,但在編譯時(shí)不知道該方法具體是什么時(shí),在程序運(yùn)行時(shí)指定調(diào)用的方法1.什么是委托--4--委托聲明聲明委托并提供一個(gè)簽名該簽名要與委托將要調(diào)用的方法的簽名一致

[修飾符]delegate返回類型委托名稱(參數(shù)列表)實(shí)例化創(chuàng)建委托對(duì)象,指向有合適簽名的方法把委托對(duì)象與特定的方法聯(lián)系起來(lái)2.委托的聲明與實(shí)例化--5--聲明委托并提供一個(gè)簽名,該簽名要與委托將要調(diào)用的方法的簽名一致publicdelegatevoidEventHandler(object

sender,EventArgse);publicvoidbutton_Click(objectsender,EventArgse)

{}創(chuàng)建一個(gè)委托實(shí)例,該委托指向具有合適簽名的方法var

action=new

EventHandler(button_Click);通過(guò)委托對(duì)象調(diào)用方法action(button,e);創(chuàng)建和調(diào)用委托的步驟--6--classMathsOp

{publicstaticdoubleMultiply2(doublevalue){returnvalue*2;}

publicstaticdoubleSquare(doublevalue){returnvalue*value;}}classProgram{

delegatedoubleDoubleOp

(doublex);

staticvoidMain(string[]args)

{DoubleOp

op

=new

DoubleOp

(MathsOp.Multiply2);

doubleresult=op(3.0);}}例:委托實(shí)例--7--static

void

ProcessAndDisplayNumber

(

DoubleOp

action,double

value){

double

result=action(value);Console.WriteLine("Valueis{0},resultof

operationis{1}",value,result);}“方法的引用”作為參數(shù)--8--1.創(chuàng)建MathsOp類,包含一個(gè)Add方法;2.聲明委托MathsDT并提供一個(gè)簽名;3.實(shí)例化委托,并調(diào)用classMathsOp{publicdoubleAdd(doublex,doubley){returnx+y;}}classProgram{delegatedoubleMathsDT(doublex,doubley);staticvoidMain(string[]args)

{

var

math=newMathsOp();

MathsDT

d=

new

MathsDT(math.Add);mathsDelegate(10,5);}}課堂練習(xí)--9--使用委托調(diào)用多個(gè)方法維護(hù)一個(gè)方法列表,依次調(diào)用列表中的方法語(yǔ)法:DelegateTyped1=d2+d3;用+=添加方法,用-=移除方法例如:d1+=new

DelegateType(Method);……d1-=newDelegateType(Method);3多重代理--10--class

C

{

public

static

void

M1(int

i)

{Console.WriteLine("C.M1:"

+

i);

}

public

static

void

M2(int

i)

{

Console.WriteLine("C.M2:"

+

i);

}}internal

delegate

void

D(int

i);

【例】委托的實(shí)例化、組合、移除和調(diào)用--11--class

Test

{

public

static

void

Demo()

{

D

d1=new

D(C.M1);

d1(-1);

//Call

M1

D

d2=new

D(C.M2);

d2(-2);

//Call

M2

D

d3

=

d1

+

d2;

d3(10);

//Call

M1,

then

M2;

d3

+=

cd1;

d3(20);

//Call

M1,M2,

then

M1

d3

-=

cd1;

//Remove

Last

M1

d3(40);

//Call

M1,

then

M2;

}

}二、組件組件創(chuàng)建和引用組件接口與組件的關(guān)系12面向?qū)ο蠡締卧杭?xì)粒度的類和對(duì)象企業(yè)級(jí)項(xiàng)目需要粗粒度,即組件二進(jìn)制:以.DLL打包成程序集可復(fù)用:任何.NET語(yǔ)言可引用功能封裝:不用考慮實(shí)現(xiàn)細(xì)節(jié)獨(dú)立存在、協(xié)同工作:?jiǎn)为?dú)開(kāi)發(fā)、編譯、測(cè)試1組件--13--當(dāng)很多程序都要用到某方法,把類單獨(dú)打包方案:把類封裝成二進(jìn)制自描述的代碼,以方便復(fù)用如果程序員擴(kuò)充了組件,客戶端只需要更新.dll,而客戶程序無(wú)需變動(dòng)為什么要用組件--14--基本步驟建立類庫(kù)項(xiàng)目添加代碼生成DLL2.創(chuàng)建和引用組件--15--namespacePet{public

interface

Ibark{

string

Bark();}

public

class

Dog:Animal,IBark

{

public

string

Bark()

{

return

“汪汪”;

}

public

override

string

Eat()

{return"骨頭";

}

}public

class

Cat:Animal,IBark

{

public

string

Bark(){

return

“喵喵”;

}

public

override

string

Eat()

{return"魚(yú)";

}}}例:創(chuàng)建pet組件--16--建立一個(gè)應(yīng)用程序項(xiàng)目引用組件:“添加引用”pet.dll添加引用代碼編譯、執(zhí)行:把...exe和...dll放到同一目錄引用組件--17--usingSystem;usingpet;

//引用pet命名空間namespaceUsePet{

classProgram{staticvoidBuyPet(IBarkpet)

{Console.WriteLine(pet.Bark());}

staticvoidMain()

{Dogdog1=newDog();

Catcat1=newCat();

BuyPet(cat1);

BuyPet(dog1);

}

}}例:引用pet組件--18--接口描述了組件對(duì)外提供的服務(wù)在組件與組件、組件和客戶之間都通過(guò)接口進(jìn)行交互一個(gè)組件可以實(shí)現(xiàn)多個(gè)組件接口組件接口可被多個(gè)組件來(lái)實(shí)現(xiàn)3接口與組件的關(guān)系

--19--組件、類、接口的關(guān)系請(qǐng)敘述創(chuàng)建組件的步驟請(qǐng)敘述引用組件的步驟課堂問(wèn)答Show05-基本組件的創(chuàng)建與使用--20--Demo07-3-基本組件的創(chuàng)建與使用三、窗體GUI設(shè)計(jì)環(huán)境Windows窗體--21--創(chuàng)建Windows應(yīng)用程序新建項(xiàng)目,“項(xiàng)目類型”為“ViusalC#”“模板”選擇“Windows窗體應(yīng)用程序”1.GUI設(shè)計(jì)環(huán)境22工具箱屬性窗設(shè)計(jì)工具--23--Form窗體:是一個(gè)控件的容器對(duì)應(yīng)有兩個(gè)文件:Form1.Designer.csForm1.cs是用戶添加代碼的地方2.WindowsForm窗體--24--在程序中用賦值語(yǔ)句設(shè)置屬性public

Form1()

{InitializeComponent();this.Location=newPoint(200,300);}屬性窗口:改變的外觀和特性設(shè)置Form窗體的屬性--25--標(biāo)題欄:Text屬性(標(biāo)題欄顯示的內(nèi)容)控制按鈕:MaximizeBox屬性(最大化按鈕),MinimizeBox屬性(最小化按鈕)邊界:FormBorderStyle屬性(邊界類型)、

Size屬性(窗體大?。ocation屬性(窗體在屏幕上的位置)、BackColor屬性(背景顏色)窗口區(qū):添加各種控件窗體的組成--26--窗體會(huì)進(jìn)行且只進(jìn)行一次加載,在必需的加載操作完成后會(huì)引發(fā)Load事件,執(zhí)行一些初始化操作在Load事件中對(duì)窗體的大小、標(biāo)題、顏色等屬性進(jìn)行了設(shè)置privatevoidForm1_Load(objectsender,EventArgse){this.Width=200;this.Height=100;

this.ForeColor=Color.Cyan;

this.BackColor=Color.Red;

this.Text="Welcomeyou!";}Load(加載)事件--27--應(yīng)用程序中的第一個(gè)窗體被自動(dòng)指定為啟動(dòng)窗體顯示別的窗體,要設(shè)置啟動(dòng)窗體

staticvoidMain()

{

Application.EnableVisualStyles();Application.Run(newForm1());

}設(shè)置啟動(dòng)窗體屬性--28--Demo07-1-Windows窗體四、控件控件對(duì)話框用戶定制控件控件的屬性事件(控件的方法)29控件是有用戶界面的.NET組件控件類派生于System.Windows.Forms.Control控件是.NET組件,.NET組件不一定是控件標(biāo)準(zhǔn)控件和組件放置在工具箱1控件--30--動(dòng)作控件:Button值控件:顯示值,或編輯值布爾值控件:RadioButton、CheckBox字符串值控件:Label、TextBox數(shù)值控件:ProgressBar圖像控件:PictureBox列表控件:ListBox、ListView

ComboBox公共控件

--31--創(chuàng)建Button對(duì)象:從工具箱把Button控件拖放到窗體添加代碼:雙擊button1按鈕,添加代碼:privatevoidbutton1_Click(objectsender,EventArgse){MessageBox.Show(“Hello!”);}

運(yùn)行程序按鈕控件Button--32--布爾值控件單選控件復(fù)選控件

重要屬性:Checked屬性字符串值控件標(biāo)簽控件

文本框控件

重要屬性:Text屬性值控件--33--例:簡(jiǎn)易計(jì)算器--34--Demo07-2-簡(jiǎn)易計(jì)算器可顯示多個(gè)值,SelectedItem屬性表示當(dāng)前選項(xiàng)列表框列表視圖組合框listBox1.Items.Add("吉娃娃");stringst=listBox1.SelectedItem.ToString();列表控件--35--作用:進(jìn)行邏輯分組,便于管理和理解扁平容器

群組框Tab控件

容器控件--36--菜單菜單項(xiàng):MenuItem類的一個(gè)對(duì)象工具條菜單與工具條--37--例:菜單與工具欄的編程--38--Demo07-5-菜單與工具欄的編程標(biāo)準(zhǔn)與自定義對(duì)話框標(biāo)準(zhǔn)對(duì)話框:系統(tǒng)定義,用戶直接調(diào)用。是.NET組件用戶自定義對(duì)話框:繼承于Form類窗體

模式和非模式對(duì)話框模式對(duì)話框:用ShowDialog()顯示對(duì)話框非模式對(duì)話框:用Show()方法顯示對(duì)話框2對(duì)話框--39--打開(kāi)文件對(duì)話框保存文件對(duì)話框privatevoidtoolStripMenuItem2_Click(objectsender,EventArgse){openFileDialog1.Filter="文本文件(*.txt)|*.txt”;

if(DialogResult.OK==openFileDialog1.ShowDialog())

OpenTextFile(openFileDialog1.FileName);}voidOpenTextFile(stringfileName){}打開(kāi)和保存文件對(duì)話框--40--定制控件是允許開(kāi)發(fā)人員生成新的功能,把現(xiàn)有的控件聚集到一個(gè)定制控件上,使之可以在應(yīng)用程序種重復(fù)使用。定制控件的方法從標(biāo)準(zhǔn)控件繼承--擴(kuò)展現(xiàn)有控件:繼承標(biāo)準(zhǔn)控件,并重寫(xiě)或添加屬性、方法等方式從UserControl類繼承--組合現(xiàn)有控件從Control類繼承--自定義控件3用戶定制控件

--41--例:擴(kuò)展TextBox控件功能創(chuàng)建Windows窗體控件庫(kù)項(xiàng)目;系統(tǒng)創(chuàng)建了一個(gè)派生于UserControl的類,修改、添加代碼【生成】【生成解決方案】,UserControl1.dll創(chuàng)建Windows窗體項(xiàng)目,工具箱中的【公共控件】,把UserControl1.dll添加到工具箱

把UserControl1控件從工具箱拖放到Form窗體上運(yùn)行程序從標(biāo)準(zhǔn)控件繼承--42--例:用戶控件的創(chuàng)建和引用--43--Demo07-4-用戶控件的創(chuàng)建和引用控件派生于System.Windows.Forms.Control類Control控件的屬性:Name和Text是基本屬性Name屬性:獲取或設(shè)置控件的名稱

Text屬性:設(shè)置或返回控件中顯示的文本信息

4.控件的屬性--44--確定此控件與其容器控件的固定關(guān)系可設(shè)定Top、Bottom、Right、Left中任意的幾種Anchor屬性--45--規(guī)定了子控件與父控件的邊緣依賴關(guān)系Dock的值有6種:Top、Bottom、Left、Right、Fill,None(默認(rèn))Dock屬性--46--請(qǐng)列舉常用的公共控件?Name和Text屬性的作用是什么?課堂問(wèn)答--47--事件就是發(fā)生的一件事情,一個(gè)動(dòng)作或操作在現(xiàn)實(shí)生活中,事件與委托常常是成對(duì)出現(xiàn)的火災(zāi)事件—委托消防員處理盜竊事件—委托警察處理

……………..在Windows窗體程序中,事件與委托也是隨處可見(jiàn):鼠標(biāo)的點(diǎn)擊事件(在Button控件上)—委托Button的點(diǎn)擊響應(yīng)函數(shù)來(lái)處理鍵盤(pán)的輸入事件(在TextBox控件上)—委托TextBox的輸入響應(yīng)函數(shù)來(lái)處理5事件

--48--窗體程序是一個(gè)事件與委托的處理過(guò)程窗體等待事件的發(fā)生,捕獲事件,分析事件,發(fā)布事件,調(diào)用相應(yīng)的響應(yīng)函數(shù)來(lái)處理事件。消息:用事件對(duì)消息進(jìn)行重新封裝,用委托類和對(duì)象對(duì)消息映射進(jìn)行重新定義事件驅(qū)動(dòng)的窗體程序--49--C#事件是用關(guān)鍵字event定義的,封裝了Windows消息聲明方法:

<修飾符>event<委托類型>事件名;例:在Leader類中,我們定義事件Speak:class

Leader{

publicdelegatevoidWriteScript(stringtitle,intwordcount);

staticeventWriteScriptSpeak;//定義事件Speak………….

}C#事件--50--更精確地對(duì)事件進(jìn)行了封裝直接使用原始委托來(lái)管理事件(而不用event)條件是:發(fā)布類必須把委托成員定義為public變量,訂閱類對(duì)象方可注冊(cè)其響應(yīng)函數(shù)。使用event事件,使客戶對(duì)象不能觸發(fā)事件,只有發(fā)布類對(duì)象可以發(fā)布事件event的作用--51--窗體程序體現(xiàn)委托和事件的優(yōu)點(diǎn):控制臺(tái)程序本質(zhì)上是順序執(zhí)行的,而窗體程序是事件驅(qū)動(dòng)的。在Button控件中,系統(tǒng)定義了鼠標(biāo)點(diǎn)擊事件Click:

eventEventHandlerClick;EventHandler是系統(tǒng)定義的委托類型:

delegatevoidEventHandler(object

sender,EventArgse);Click事件

--52--雙擊按鈕button1,生成如下方法:privatevoidbutton1_Click(objectsender,EventArgse){MessageBox.Show("我被點(diǎn)擊了!");}在Form1.Designer.cs,生成如下代碼:this.button1.Click+=newSystem.EventHandler(this.button1_Click);button1.Click事件是怎么觸發(fā)的?當(dāng)點(diǎn)擊button1,Windows捕獲,Windows把這個(gè)動(dòng)作作為系統(tǒng)消息(WM_LBUTTONDOWN)發(fā)送給button1,button1從消息隊(duì)列中不斷的取出消息,引導(dǎo)button1觸發(fā)Click事件button1.Click事件和EventHandler委托--53--事件發(fā)布

溫馨提示

  • 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)論