Lect05 用戶界面交互V3_第1頁
Lect05 用戶界面交互V3_第2頁
Lect05 用戶界面交互V3_第3頁
Lect05 用戶界面交互V3_第4頁
Lect05 用戶界面交互V3_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

sender,EventArgse);publicvoidbutton_Click(objectsender,EventArgse)

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

action=new

EventHandler(button_Click);通過委托對象調(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);}}例:委托實例--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類,包含一個Add方法;2.聲明委托MathsDT并提供一個簽名;3.實例化委托,并調(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)用多個方法維護一個方法列表,依次調(diào)用列表中的方法語法: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);

【例】委托的實例化、組合、移除和調(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ū)ο蠡締卧杭毩6鹊念惡蛯ο笃髽I(yè)級項目需要粗粒度,即組件二進制:以.DLL打包成程序集可復(fù)用:任何.NET語言可引用功能封裝:不用考慮實現(xiàn)細節(jié)獨立存在、協(xié)同工作:單獨開發(fā)、編譯、測試1組件--13--當(dāng)很多程序都要用到某方法,把類單獨打包方案:把類封裝成二進制自描述的代碼,以方便復(fù)用如果程序員擴充了組件,客戶端只需要更新.dll,而客戶程序無需變動為什么要用組件--14--基本步驟建立類庫項目添加代碼生成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"魚";

}}}例:創(chuàng)建pet組件--16--建立一個應(yī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--接口描述了組件對外提供的服務(wù)在組件與組件、組件和客戶之間都通過接口進行交互一個組件可以實現(xiàn)多個組件接口組件接口可被多個組件來實現(xiàn)3接口與組件的關(guān)系

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

Form1()

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

Size屬性(窗體大小)、Location屬性(窗體在屏幕上的位置)、BackColor屬性(背景顏色)窗口區(qū):添加各種控件窗體的組成--26--窗體會進行且只進行一次加載,在必需的加載操作完成后會引發(fā)Load事件,執(zhí)行一些初始化操作在Load事件中對窗體的大小、標(biāo)題、顏色等屬性進行了設(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)用程序中的第一個窗體被自動指定為啟動窗體顯示別的窗體,要設(shè)置啟動窗體

staticvoidMain()

{

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

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

ComboBox公共控件

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

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

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

文本框控件

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

群組框Tab控件

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

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

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

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

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

把UserControl1控件從工具箱拖放到Form窗體上運行程序從標(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(默認)Dock屬性--46--請列舉常用的公共控件?Name和Text屬性的作用是什么?課堂問答--47--事件就是發(fā)生的一件事情,一個動作或操作在現(xiàn)實生活中,事件與委托常常是成對出現(xiàn)的火災(zāi)事件—委托消防員處理盜竊事件—委托警察處理

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

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

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

Leader{

publicdelegatevoidWriteScript(stringtitle,intwordcount);

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

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

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

delegatevoidEventHandler(object

sender,EventArgse);Click事件

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

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論