版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能家居課程設(shè)計周志
- 幼兒園羽毛排序課程設(shè)計
- 托班情緒調(diào)節(jié)課程設(shè)計
- 旅游財務(wù)課程設(shè)計
- 整套運營課程設(shè)計
- 智能計算課程設(shè)計
- 鋁產(chǎn)業(yè)未來趨勢與市場機會分析
- 【8道期末】安徽省合肥市包河區(qū)智育聯(lián)盟校2023-2024學(xué)年八年級上學(xué)期期末道德與法治試題(含解析)
- 商業(yè)策略與匯報呈現(xiàn)藝術(shù)
- 廣州七年級語文部編版初一上冊《世說新語-陳太丘與友期行》教學(xué)設(shè)計
- 企業(yè)發(fā)展未來5年規(guī)劃
- 兒童毛細支氣管炎管理臨床實踐指南(2024版)解讀
- 2024-2025學(xué)年四年級科學(xué)上冊第一單元《聲音》測試卷(教科版)
- 四川省成都市2023-2024學(xué)年七年級上學(xué)期期末數(shù)學(xué)試題(含答案)
- 2024年交管12123學(xué)法減分考試題庫附完整答案(網(wǎng)校專用)
- 健康膳食解碼智慧樹知到期末考試答案2024年
- 拼多多市場營銷案例分析
- GJB438C模板-軟件開發(fā)計劃(已按標(biāo)準(zhǔn)公文格式校準(zhǔn))
- 山東建筑大學(xué)混凝土結(jié)構(gòu)設(shè)計期末考試復(fù)習(xí)題
- 分散式風(fēng)電項目建議書范文
- 學(xué)習(xí)小組PK挑戰(zhàn)書
評論
0/150
提交評論