Lect05 用户界面交互V3_第1页
Lect05 用户界面交互V3_第2页
Lect05 用户界面交互V3_第3页
Lect05 用户界面交互V3_第4页
Lect05 用户界面交互V3_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5讲用户界面交互GUI(Delegate,Forms

,Controls)2023年2月4日学习内容一、委托(Delegate)二、组件(Component)三、窗体(Forms)四、控件(Controls)2一、委托什么是委托委托的声明与实例化多重代理3委托:包含了对方法的引用,定义一个方法的模板作用:当程序调用一个方法来执行某个操作,但在编译时不知道该方法具体是什么时,在程序运行时指定调用的方法1.什么是委托--4--委托声明声明委托并提供一个签名该签名要与委托将要调用的方法的签名一致

[修饰符]delegate返回类型委托名称(参数列表)实例化创建委托对象,指向有合适签名的方法把委托对象与特定的方法联系起来2.委托的声明与实例化--5--声明委托并提供一个签名,该签名要与委托将要调用的方法的签名一致publicdelegatevoidEventHandler(object

sender,EventArgse);publicvoidbutton_Click(objectsender,EventArgse)

{}创建一个委托实例,该委托指向具有合适签名的方法var

action=new

EventHandler(button_Click);通过委托对象调用方法action(button,e);创建和调用委托的步骤--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);}“方法的引用”作为参数--8--1.创建MathsOp类,包含一个Add方法;2.声明委托MathsDT并提供一个签名;3.实例化委托,并调用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);}}课堂练习--9--使用委托调用多个方法维护一个方法列表,依次调用列表中的方法语法: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);

【例】委托的实例化、组合、移除和调用--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;

}

}二、组件组件创建和引用组件接口与组件的关系12面向对象基本单元:细粒度的类和对象企业级项目需要粗粒度,即组件二进制:以.DLL打包成程序集可复用:任何.NET语言可引用功能封装:不用考虑实现细节独立存在、协同工作:单独开发、编译、测试1组件--13--当很多程序都要用到某方法,把类单独打包方案:把类封装成二进制自描述的代码,以方便复用如果程序员扩充了组件,客户端只需要更新.dll,而客户程序无需变动为什么要用组件--14--基本步骤建立类库项目添加代码生成DLL2.创建和引用组件--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"鱼";

}}}例:创建pet组件--16--建立一个应用程序项目引用组件:“添加引用”pet.dll添加引用代码编译、执行:把...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--接口描述了组件对外提供的服务在组件与组件、组件和客户之间都通过接口进行交互一个组件可以实现多个组件接口组件接口可被多个组件来实现3接口与组件的关系

--19--组件、类、接口的关系请叙述创建组件的步骤请叙述引用组件的步骤课堂问答Show05-基本组件的创建与使用--20--Demo07-3-基本组件的创建与使用三、窗体GUI设计环境Windows窗体--21--创建Windows应用程序新建项目,“项目类型”为“ViusalC#”“模板”选择“Windows窗体应用程序”1.GUI设计环境22工具箱属性窗设计工具--23--Form窗体:是一个控件的容器对应有两个文件:Form1.Designer.csForm1.cs是用户添加代码的地方2.WindowsForm窗体--24--在程序中用赋值语句设置属性public

Form1()

{InitializeComponent();this.Location=newPoint(200,300);}属性窗口:改变的外观和特性设置Form窗体的属性--25--标题栏:Text属性(标题栏显示的内容)控制按钮:MaximizeBox属性(最大化按钮),MinimizeBox属性(最小化按钮)边界:FormBorderStyle属性(边界类型)、

Size属性(窗体大小)、Location属性(窗体在屏幕上的位置)、BackColor属性(背景颜色)窗口区:添加各种控件窗体的组成--26--窗体会进行且只进行一次加载,在必需的加载操作完成后会引发Load事件,执行一些初始化操作在Load事件中对窗体的大小、标题、颜色等属性进行了设置privatevoidForm1_Load(objectsender,EventArgse){this.Width=200;this.Height=100;

this.ForeColor=Color.Cyan;

this.BackColor=Color.Red;

this.Text="Welcomeyou!";}Load(加载)事件--27--应用程序中的第一个窗体被自动指定为启动窗体显示别的窗体,要设置启动窗体

staticvoidMain()

{

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

}设置启动窗体属性--28--Demo07-1-Windows窗体四、控件控件对话框用户定制控件控件的属性事件(控件的方法)29控件是有用户界面的.NET组件控件类派生于System.Windows.Forms.Control控件是.NET组件,.NET组件不一定是控件标准控件和组件放置在工具箱1控件--30--动作控件:Button值控件:显示值,或编辑值布尔值控件:RadioButton、CheckBox字符串值控件:Label、TextBox数值控件:ProgressBar图像控件:PictureBox列表控件:ListBox、ListView

ComboBox公共控件

--31--创建Button对象:从工具箱把Button控件拖放到窗体添加代码:双击button1按钮,添加代码:privatevoidbutton1_Click(objectsender,EventArgse){MessageBox.Show(“Hello!”);}

运行程序按钮控件Button--32--布尔值控件单选控件复选控件

重要属性:Checked属性字符串值控件标签控件

文本框控件

重要属性:Text属性值控件--33--例:简易计算器--34--Demo07-2-简易计算器可显示多个值,SelectedItem属性表示当前选项列表框列表视图组合框listBox1.Items.Add("吉娃娃");stringst=listBox1.SelectedItem.ToString();列表控件--35--作用:进行逻辑分组,便于管理和理解扁平容器

群组框Tab控件

容器控件--36--菜单菜单项:MenuItem类的一个对象工具条菜单与工具条--37--例:菜单与工具栏的编程--38--Demo07-5-菜单与工具栏的编程标准与自定义对话框标准对话框:系统定义,用户直接调用。是.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--定制控件是允许开发人员生成新的功能,把现有的控件聚集到一个定制控件上,使之可以在应用程序种重复使用。定制控件的方法从标准控件继承--扩展现有控件:继承标准控件,并重写或添加属性、方法等方式从UserControl类继承--组合现有控件从Control类继承--自定义控件3用户定制控件

--41--例:扩展TextBox控件功能创建Windows窗体控件库项目;系统创建了一个派生于UserControl的类,修改、添加代码【生成】【生成解决方案】,UserControl1.dll创建Windows窗体项目,工具箱中的【公共控件】,把UserControl1.dll添加到工具箱

把UserControl1控件从工具箱拖放到Form窗体上运行程序从标准控件继承--42--例:用户控件的创建和引用--43--Demo07-4-用户控件的创建和引用控件派生于System.Windows.Forms.Control类Control控件的属性:Name和Text是基本属性Name属性:获取或设置控件的名称

Text属性:设置或返回控件中显示的文本信息

4.控件的属性--44--确定此控件与其容器控件的固定关系可设定Top、Bottom、Right、Left中任意的几种Anchor属性--45--规定了子控件与父控件的边缘依赖关系Dock的值有6种:Top、Bottom、Left、Right、Fill,None(默认)Dock属性--46--请列举常用的公共控件?Name和Text属性的作用是什么?课堂问答--47--事件就是发生的一件事情,一个动作或操作在现实生活中,事件与委托常常是成对出现的火灾事件—委托消防员处理盗窃事件—委托警察处理

……………..在Windows窗体程序中,事件与委托也是随处可见:鼠标的点击事件(在Button控件上)—委托Button的点击响应函数来处理键盘的输入事件(在TextBox控件上)—委托TextBox的输入响应函数来处理5事件

--48--窗体程序是一个事件与委托的处理过程窗体等待事件的发生,捕获事件,分析事件,发布事件,调用相应的响应函数来处理事件。消息:用事件对消息进行重新封装,用委托类和对象对消息映射进行重新定义事件驱动的窗体程序--49--C#事件是用关键字event定义的,封装了Windows消息声明方法:

<修饰符>event<委托类型>事件名;例:在Leader类中,我们定义事件Speak:class

Leader{

publicdelegatevoidWriteScript(stringtitle,intwordcount);

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

}C#事件--50--更精确地对事件进行了封装直接使用原始委托来管理事件(而不用event)条件是:发布类必须把委托成员定义为public变量,订阅类对象方可注册其响应函数。使用event事件,使客户对象不能触发事件,只有发布类对象可以发布事件event的作用--51--窗体程序体现委托和事件的优点:控制台程序本质上是顺序执行的,而窗体程序是事件驱动的。在Button控件中,系统定义了鼠标点击事件Click:

eventEventHandlerClick;EventHandler是系统定义的委托类型:

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事件是怎么触发的?当点击button1,Windows捕获,Windows把这个动作作为系统消息(WM_LBUTTONDOWN)发送给button1,button1从消息队列中不断的取出消息,引导button1触发Click事件button1.Click事件和EventHandler委托--53--事件发布

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论