版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專用地質(zhì)勘探設(shè)備租賃協(xié)議
- 股票配資賬戶風(fēng)險(xiǎn)控制反饋合同
- 環(huán)保設(shè)備采購(gòu)合同
- 高危孕產(chǎn)婦質(zhì)控制度
- 業(yè)務(wù)罰款協(xié)議模板
- 液氬、液氮泄漏現(xiàn)場(chǎng)應(yīng)急處置方案
- 水產(chǎn)養(yǎng)殖合作協(xié)議
- 第23課《得道多助失道寡助》教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文八年級(jí)上冊(cè)
- 股票配資基本合同
- 關(guān)于醫(yī)院勞動(dòng)合同
- 空心六棱塊護(hù)坡施工方案
- 一只窩囊的大老虎說(shuō)課
- 《行政許可法》講義課件
- 綜采工作面及順槽發(fā)生冒頂安全技術(shù)措施
- DB51T3085-2023川產(chǎn)道地藥材生產(chǎn)技術(shù)規(guī)范 麥冬
- 三年級(jí)上冊(cè) 《方向與位置》(說(shuō)課稿)-三年級(jí)上冊(cè)數(shù)學(xué)青島版
- 地理信息安全在線培訓(xùn)考試系統(tǒng)題庫(kù)
- GB/T 42779-2023海洋牧場(chǎng)基本術(shù)語(yǔ)
- 五年級(jí)上冊(cè)英語(yǔ)冀教版課件The Story of Nian
- 大學(xué)生職業(yè)生涯規(guī)劃完整全套教學(xué)課件
- 溝槽支護(hù)專項(xiàng)方案
評(píng)論
0/150
提交評(píng)論