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委托:包含了對方法的引用,定義一個方法的模板作用:當程序調(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--當很多程序都要用到某方法,把類單獨打包方案:把類封裝成二進制自描述的代碼,以方便復(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--標題欄:Text屬性(標題欄顯示的內(nèi)容)控制按鈕:MaximizeBox屬性(最大化按鈕),MinimizeBox屬性(最小化按鈕)邊界:FormBorderStyle屬性(邊界類型)、

Size屬性(窗體大?。?、Location屬性(窗體在屏幕上的位置)、BackColor屬性(背景顏色)窗口區(qū):添加各種控件窗體的組成--26--窗體會進行且只進行一次加載,在必需的加載操作完成后會引發(fā)Load事件,執(zhí)行一些初始化操作在Load事件中對窗體的大小、標題、顏色等屬性進行了設(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組件不一定是控件標準控件和組件放置在工具箱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屬性字符串值控件標簽控件

文本框控件

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

群組框Tab控件

容器控件--36--菜單菜單項:MenuItem類的一個對象工具條菜單與工具條--37--例:菜單與工具欄的編程--38--Demo07-5-菜單與工具欄的編程標準與自定義對話框標準對話框:系統(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ù)使用。定制控件的方法從標準控件繼承--擴展現(xià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窗體上運行程序從標準控件繼承--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窗體程序中,事件與委托也是隨處可見:鼠標的點擊事件(在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)定義了鼠標點擊事件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ā)的?當點擊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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論