版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教案首页第1次课授课时间:课程名称可视化程序设计年级大二下专业层次信息与计算教师付勇智专业技术职务讲师学时2授课题目(章、节)第一章Windows可视化程序设计方法基本教材参考用书《MicrosoftC#Windows程序设计》(上下册)CharlesPetzold著天宏工作室译北京大学出版社教学目的与要求:1.本章学习目的与要求:学习应用程序用户交互方式的主要类别,掌握可视化程序设计的基本概念方法和工具的使用,了解可视化程序设计技术的主要方法和发展历史,大体明白Microsoft.NET平台的架构组成以其各组成组件之间的彼此关系;初步掌握MicrosoftVisualStudio.NET开发环境的使用方法。2.本节学习目的与要求:在理解可视化程序设计技术的方法及工具的基础上,重点掌握应用MicrosoftVisualStudio.NET开发环境编写可视化应用程序的方法。教学内容与时间安排,教学方法:1.教学内容与时间安排⑴可视化程序设计概念(10min)⑵桌面应用程序的开发方法(5min)⑶Windows平台应用程序开发技术(5min)⑷Microsoft.NET程序开发技术(40min)(5)VisualStudio.NET使用基础(30min)2.教学方法:讲授法、问答法、讨论法和演示法。教学重点、难点:在本节课的教学内容中,VisualStudio.NET使用方法和项目管理组织形式为教学重点;Microsoft.NET程序开发技术及.NET平台的组成及工作原理为本节课的难点。授课方法及手段:在授课过程中以讲授法为主,辅助于问答法、讨论法和演示法。基本理论讲授采用讲授法和演示法进行,课堂知识的巩固采用讨论法进行,本节教学测量采用问答法进行。为了增加单位课时的信息量,应用多媒体技术组织教学过程;为了保证学生对所学内容的实际掌握能力,应当在介绍相关概念和理解后,通过多媒体及时演示在VisualStudio.NET开发环境中管理项目和编写控制台应用程序以及可视化应用程序的步骤和过程。教案续页基本内容(讲稿)备注第一章Windows可视化程序设计方法1.可视化程序设计概念应用程序的类别:控制台应用程序(ConsoleApp):传统的字符环境应用程序,用户通过键盘和显示器文字输出交互(总体过时)(STDIO)桌面应用程序(DesktopApp):程序主要以窗体、按钮、菜单、对话框、滚动条等组成,用户通过鼠标、键盘进行所见即所得的方式与系统交互(桌面应用主流)(SDK、OWL、MFC、WinForm)Web应用程序(WebApp):用户通过浏览器(IE、Firefox)访问网页的方式同远端服务器进行交互(网络应用主流)(ASP.Net、JSP/Serverlet、PHP)多媒体应用程序(MultimediaApp):用户通过视频、音频的方式,更加直观的同系统交互(电脑游戏)(Directx、OpenGL)2.桌面应用程序的开发方法桌面应用程序的开发通常是在传统语言程序设计方法的基础上,针对不同操作系统扩展对应的窗口函数库来进行。WindowsApp=Language+Function(SDK)当前主流平台:WindowsUnixXWindowMacOS3.Windows平台应用程序开发技术C+WindowsSDK(1985-2000)C+++MFC(1993-2002)Delphi+OWL/VCL(1992-2004)C+++OWL/VCL(1994-2001)Basic+Runtime(1992-2001)Java+Swing(1996-?)ASM+LIB(非主流)C#+.NET(2001-?)Basic+.NET(2001-?)4.Microsoft.NET程序开发技术.NET的组成:CLR+CTSCLR公共语言运行时(CommonLanguageRuntime):C#.NET、VB.NET、VC++.NETManaged编写的程序经过编译后所生成的.exe文件并不是底层CPU能够执行的机器语言代码,而是一种中间语言-MSIL的代码格式(类似Java中的ByteCode)MSIL的代码在执行前经过Just-In-Time即时编译转换成目标平台的机器语言并执行,完成这一工作的就是CLR。CLR实际就类似Java的虚拟机,在不同CPU结构的机器上只要具备CLR,就能运行.NET程序,这样就实现了平台的无关性。.NET中将各种系统功能调用封装为一个庞大的面向对象的类库-CTS公用类别系统(CommonTypeSystem)CTS采用类似Java的Namespace(命名空间)的层次式机制来组织整个类库根据所编写应用程序的类别不同,所调用的类库也不相同编写本课程中的WindowsForms桌面应用程序主要用到CTS中三个命名空间下的系统类:System 基本的系统对象,如字符串处理、数学函数等System.Drawing 主要的图形处理函数System.Windows.Forms 用户控件,如窗体、按钮、对话框在编写程序的过程中,通常需要对以上三个命名空间及其对应的动态链接库进行引用,具体方法稍后介绍C#程序编译运行的过程CLR.NET平台的虚拟机Microsoft.NETFramework要运行.NET程序,则需要有CRL和CTS,这两者的总体就叫做Microsoft.NETFramework(.NET框架类库)Windows操作系统从WindowsXP开始把.NET框架类库作为操作系统的一个组成部分进行发布。开发所使用的.NET框架类库版本必须和运行环境所装Framework版本相同,高版本并不兼容低版本。同一操作系统可以同时安装多个版本的.NET框架类库Microsoft提供了一个简化的Framework版本,以支持智能设备运用程序的开发,称为.NETCompactFramwork,主要运行在WindowsCE和WindowsMobile平台上Windows/VisualStudio/Framework版本对应表VisualStudio版本.NETFramework版本最低Windows版本VisualStudio.NETV1.0WindowsXPVisualStudio2003.NETV1.1WindowsXPSP2VisualStudio2005.NETV2.0WindowsVistaVisualStudio2008.NETV3.5WindowsServer2008Windows7VisualStudio2010.NETV4.0
VisualStudio2012.NETV4.5Windows8VisualStudio.NET使用基础VisualStudio项目组织方式:VS中最高层的项目组织单位是:解决方案(Solution),一个解决方案对应多个程序专项(Project)。解决方案文件以.sln结尾。专项(Project)是VS中的基本管理单元,是编译的主体。VS中一个专项通常由单一语言编写的多个源程序模块组成,编译后对应生成一个可执行程序(.exe)或动态链接库模块(.dll)。C#的程序专项文件以.csproj结尾,VB.NET的专项以.vbproj结尾。源程序文件(CodeFile)是程序员所编写的代码,在C#中,源程序文件以.cs结尾,通常一个源程序文件对应一个class的定义。解决方案的创建方法1(创建空解决方案)File->New->ProjectOtherProjectTypes->VisualStudioSolutions->BlankSolultion方法2(创建专项同时建立解决方案)程序专项的创建新建空白专项File->New->ProjectVisualC#->Windows->EmptyProject添加对dll库文件的引用右键点击专项之下的References,选择AddReferences按住Ctrl键,同时选中System.dll,System.Drawing.dll,System.Windows.Froms.dll,并确认。源程序文件的创建右键点击专项,选择Add->AddNewItem选择CodeFile类型,并为所创建源程序文件命名HelloWorldC#版C语言版#include<stdio.h>voidmain(){ printf(“HelloWorld!\n”);}C#版usingSystem;classHelloWorld{ publicstaticvoidMain() { Console.WriteLine(“HelloWorld!”); }}HelloWorldC#Windows版usingSystem;usingSystem.Windows.Forms;classHelloWorldWin{ publicstaticvoidMain() { MessageBox.Show(“HelloWorld!”); }}操作过程步骤1.创建Solution步骤2.创建Project步骤3.设置对类库.dll的引用步骤4.创建程序文件.cs步骤5.编写代码步骤6.编译生成.exe步骤7.执行程序教案末页小结本节主要教学内容:⑴可视化程序设计概念⑵桌面应用程序的开发方法⑶Windows平台应用程序开发技术⑷Microsoft.NET程序开发技术(5)VisualStudio.NET使用基础Windows平台可视化程序设计技术:本门课程介绍使用C#语言在.NET环境下调用WindowsForms相关组件,开发基于Windows操作系统下的桌面应用程序的方法及工具。。复习思考题及作业题实验一目的:熟悉VisualStudio2008.NET的操作任务:编写C#程序,分别以命令行和提示框的方式输出你的姓名及学号撰写实验报告课后作业预习面向对象程序设计的基本概念并对以下名词进行解释:类、对象、封装属性、方法、构造函数函数重载(FunctionOverloading)继承虚函数(VirtualFunction)教案首页第2次课授课时间:课程名称可视化程序设计年级大二下专业层次信息与计算教师付勇智专业技术职务讲师学时2授课题目(章、节)第二章面向对象程序设计基础(面向对象初步)基本教材参考用书《MicrosoftC#Windows程序设计》(上下册)CharlesPetzold著天宏工作室译北京大学出版社教学目的与要求:1.本章学习目的与要求:学习面向对象程序设计的基本概念与方法;掌握类与对象的关系,类的数据成员与方法成员,类成员的修饰词的使用方法;类的实例化过程,类的属性及在存取独立控制中的应用。2.本节学习目的与要求:在分析结构化程序设计方法和面向对象程序设计方法异同点的基础上,重点掌握类、对象、字段、方法、属性等相关概念及其应用。教学内容与时间安排,教学方法:1.教学内容与时间安排⑴高级程序设计语言的发展(5min)⑵结构化程序设计要点回顾(5min)⑶结构化程序设计不足点分析及其解决方法分析(20min)⑷面向对象程序设计与结构化程序设计的关系(10min)(5)类与对象的概念(10min)(6)类的定义、类的成员及其存取权限(25min)(7)类的属性及其应用(15min)2.教学方法:讲授法、问答法、讨论法和演示法。教学重点、难点:在本节课的教学内容中,类和对象的概念以及类的组成成员为教学重点;面向对象程序设计的主要思想及三大特点为本节课的难点。授课方法及手段:在授课过程中以讲授法为主,辅助于问答法、讨论法和演示法。基本理论讲授采用讲授法和演示法进行,课堂知识的巩固采用讨论法进行,本节教学测量采用问答法进行。为了增加单位课时的信息量,应用多媒体技术组织教学过程。为了保证学生对所学内容的实际掌握能力,应当在介绍相关概念和理解后,通过实例程序的演示加深学生对面向对象程序设计相关概念的理解。教案续页基本内容(讲稿)备注第二章面向对象程序设计基础1.编程语言的发展结构化程序设计语言特点:以函数为整个程序的总体组织结构变量+语句+函数库例如:C、Basic、Pascal、Fortran、Algo等。面向对象程序设计语言特点:以类作为程序的基本结构单元类、对象、类成员、类库例如:Smalltalk、C++、Java、C#、VB.NET、Objective-C等2.结构化程序设计要点回顾程序中主要采用:顺序结构、选择结构、循环结构三种基本结构方式。程序的处理对象是变量:包括整型、浮点型、双经度浮点数、字符型、指针型、结构体、枚举类型等较为初级的数据形式,数据间彼此独立,关联性小。函数是程序的主要功能单元和组织单元。缺点:随着解决问题的复杂和程序规模的增长,变量数目和函数数目大幅度增加,造成程序代码难以管理,容易出错,以及调试困难。3.结构化程序设计不足点分析及其解决方法分析封装性:将程序中涉及到的变量,根据彼此的相关程度封装在一起,把对这些数据的操作也同时封闭在一起,在封闭的实体内部函数可以自由的对属于本实体的数据变量进行操作,除非特别允许,其他实体外部的函数一般不允许对本实体内的数据进行访问,从而降低误操作发生的可能性。继承性:可以在原有实体基础上进行扩展,得到新的实体,新实体具有原实体的所有特点,同时又增加了新的特点。例如:医院的病人体检信息管理系统中,有管理所有病人基础信息的实体(所有病人都具有的数据),同时在此基础上又可以派生出男病人和女病人不同的专门体检科目数据,继续往下还可以针对男女病人分为35岁以上和35岁以下的不同体检科目分别进行处理。多态性:不同的类型的实体,只要他们满足相同的接口,都能够接入到系统中,不用修改代码就能够直接适应和调用不同的实体完成相关操作。例如:不管的白炙灯还是节能灯、不管是8W、15W、还是60W,不管是发白光、红光,还是绿光,只要灯头的接口规格一致,都能连接到同一个灯座上,并发光。同样道理,水龙头也是一个很好的说明多态性的例子。4.面向对象程序设计与结构化程序设计的关系面向对象程序设计是解决大规模程序设计问题的一种方法,是结构化程序设计技术的发展和在更高层次的演化。面向对象程序设计技术和结构化程序设计在程序设计过程中同时存在,只是所处的层次不同,结构化程序设计方法处理比较细节的问题,而面向对象方法处理更高抽象层次的问题实体。在面向对象技术中,类的各成员函数还是以结构化的方式实现的。两种方法的关注点不同:结构化的关注点是函数过程;面向对象关注的是对象的数据及其上的操作,抽象程度更高。5.类与对象的概念把握面向对象编程的最核心概念从类与对象开始什么是类?什么是对象?这两者有何差别?为什么理解这两个概念的差别至关重要?类是一个模板或蓝图对象根据模板创建出来,它拥有模板所定义的所有特性,但不同的对象其相同特性的取值可以不相同VS的类库浏览系统VisualStudio.NET中提供了一个很方便的查询浏览类库结构及其组成的工具ObjectBrowser(对象浏览器),通过点击菜单ViewObjectBrowser就可以打开对象浏览器,对类库中组成的各个类的成员字段和方法进行浏览。6.类的定义、类的成员及其存取权限类的定义C#使用class关键字定义一个类。publicclassMyClass{publicintPublicField=0;privateintPrivateField=0;publicvoidPrintValue(){}}类的成员变量字段(field)函数方法(method)字段和方法统称为类的“成员(member)”类成员的存取权限三种最基本的数据存取权限:1public:公有,外界可自由访问2private:私有,仅自身的方法可以访问3protected:保护,自身或者派生类可以访问开发建议:仅有需要被外界访问的成员才设置为public的。类的使用方法//创建对象MyClassobj=newMyClass();//通过对象变量访问公有字段obj.PublicField=100;//X,不允许直接访问类私有成员obj.PrivateField=200;//通过对象变量访问公有方法obj.PrintValue();“类”小结从MyClass示例中可以知道类的定义和使用方法:(1)用new关键字创建“类的实例(即对象)”(2)用“类”类型的变量(称为“对象变量”)来保存对创建出来的对象的引用;(3)通过对象变量来访问对象的公有成员(包括方法与字段)7.类的另一种成员——“属性”属性=字段+get/set方法属性的要点当读取属性值时,get方法被调用当向属性赋值时,set方法被调用定义一个“属性”的步骤定义一个私有字段用于存储属性数据。设计一个get方法,当读取属性值时,向外界返回私有字段的当前值。设计一个set方法,当向属性赋值时,其自动隐含的value参数保存外界传入的值,应将此值传给前面定义的私有字段。教案末页小结本节主要教学内容:⑴高级程序设计语言的发展⑵结构化程序设计要点回顾⑶结构化程序设计不足点分析及其解决方法分析⑷面向对象程序设计与结构化程序设计的关系(5)类与对象的概念(6)类的定义、类的成员及其存取权限(7)类的属性及其应用复习思考题及作业题实验三设计一个Student类,包容一个字段Name(学生姓名)和一个属性Score(考试成绩)。编写示例代码:(1)程序运行时,要求用户输入姓名和考试成绩(2)程序输出:XXX,你通过(或没通过)了考试(成绩大于等于60分)或XXX,你挂科了(成绩小于60分)。或XXX,你输入的成绩有误(输入数据超出范围)。要点:有效的成绩为[0,100]教案首页第3次课授课时间:课程名称可视化程序设计年级大二下专业层次信息与计算教师付勇智专业技术职务讲师学时2授课题目(章、节)第二章面向对象程序设计基础(续)基本教材参考用书《MicrosoftC#Windows程序设计》(上下册)CharlesPetzold著天宏工作室译北京大学出版社教学目的与要求:1.本章学习目的与要求:继续学习面向对象程序设计的相关概念与方法;掌握构造函数、函数重载的概念;详细理解C#语言两种不同存储类型的使用;深入理解类的成员属性与静态属性的差异,并掌握其使用条件。2.本节学习目的与要求:在掌握面向对象程序设计基本概念的基础上,重点掌握构造函数、函数重载、值类型、引用类型、类的成员属性与静态属性等相关概念及其应用。教学内容与时间安排,教学方法:1.教学内容与时间安排(1)对象的创建——构造函数(15min)(2)什么叫函数重载(Overload)?(20min)(3)两种不同的内存类型(Type)(20min)(4)奇特的关键字:this(25min)(5)类的“实例成员”与“静态成员”(20min)2.教学方法:讲授法、问答法、讨论法和演示法。教学重点、难点:在本节课的教学内容中,类和对象的概念以及类的组成成员为教学重点;面向对象程序设计的主要思想及三大特点为本节课的难点。授课方法及手段:在授课过程中以讲授法为主,辅助于问答法、讨论法和演示法。基本理论讲授采用讲授法和演示法进行,课堂知识的巩固采用讨论法进行,本节教学测量采用问答法进行。为了增加单位课时的信息量,应用多媒体技术组织教学过程。为了保证学生对所学内容的实际掌握能力,应当在介绍相关概念和理解后,通过实例程序的演示加深学生对面向对象程序设计相关概念的理解。教案续页基本内容(讲稿)备注第二章面向对象程序设计基础1.对象的创建——构造函数通过new关键字创建一个对象当对象创建时,一个特殊的函数被调用,此函数被称为——构造函数!类的构造函数:函数名称与类名称相同的函数publicclassMyClass{publicMyClass(){}; //缺省构造函数publicMyClass(stringinfo){} //构造函数二(重载)}一个类可以有多个构造函数,这些构造函数构成“重载(overload)”关系。在程序实际运行时,依据参数决定调用哪个构造函数。有关构造函数问:类的构造函数有什么用?答:构造函数多用于初始化类的字段。“对象变量”的剖析对象变量用于“引用”一个真实的对象。2.什么叫函数重载(Overload)?构成重载的方法拥有以下特征:1.方法名相同2.方法参数列表不同注意:方法的返回值类型不作为判断方法重载的依据。演示:(1).NET基类库中MessageBox.Show方法(2)展示如何定义重载的方法,并通过设置断点展示程序运行时到底调用的是哪个重载方法3.两种不同的内存类型(Type)“类”类型的变量属于“引用类型(ReferenceType)”的变量;其引用的对象占用的内存位于“堆(heap)”中。诸如int之类简单类型的变量属于“值类型(ValueType)”的变量,值类型的变量占用的内存位于“线程堆栈(threadstack)”中。实例publicpartialclassfrmMain:Form{publicfrmMain(){InitializeComponent();}publicintcounter=0;privatevoidbtnClickMe_Click(objectsender,EventArgse){//intcounter=0;counter++;//this.counter++;lblCount.Text=counter.ToString();}}4.奇特的关键字:thisC#中的this,是一个殊殊的对象引用,它代表对象自身。位于同一类内部的成员彼此访问,本质上是通过this这一特殊引用来完成的。只不过这个关键字通常被省略了。通过对象变量来访问变量的实例成员,是面向对象编程中的一个基本原则。思索:假设A是一个类,请看以下代码:Aobj1=newA();Aobj2=obj1;问题:1.obj1和obj2引用两个不同的对象吗?2.你能否通过写几句试验代码来证明你的想法是对的?对象变量“相互赋值”的真实含义问:以下代码输出什么结果?代码中的MyClass是一个类:inti=100;intj=100;Console.WriteLine(i==j);MyClassobj1=newMyClass();MyClassobj2=newMyClass();Console.WriteLine(obj1==obj2);有趣的“==”当“==”运算符施加于两个简单数据类型变量(如int)时,实际上是比对两个变量的值。当“==”运算符施加于两个对象变量时,实际上是比对这两个对象变量是否引用同一对象!以下代码定义了一个类:classStaticMembers{publicstaticintstaticVar=0;publicintdynamicVar=0;publicvoidincreaseValue(){staticVar++;dynamicVar++;}}请编写代码创建100个StaticMembers对象,并对每个对象调用increaseValue方法,之后,输出staticVar和dynamicVar的值ObjectCounter示例分析类的实例成员只能通过对象来访问。每个对象都有一份自己独享的实例成员,是“个人财产”。类的静态成员归所有对象所共享,是“国有资产”。5.类的“实例成员”与“静态成员”在C#中,属于同一个类的成员(包括字段/属性/方法)相互访问,拥有以下的规则:类的实例方法可以访问类的所有成员;类的静态方法只能访问或调用类的静态成员!为什么这一切如此重要?深刻理解类和对象这两个概念,是面向对象编程的基础,在此基础之上,才可以介绍更多的面向对象编程知识,下面,让我们“小试牛刀”,尝试着使用面向对象编程的基本理论,掌握多窗体编程的基本技巧……教案末页小结本节主要教学内容:(1)对象的创建——构造函数(2)什么叫函数重载(Overload)?(3)两种不同的内存类型(Type)(4)奇特的关键字:this(5)类的“实例成员”与“静态成员”复习思考题及作业题实验四题目1.定义两个完成加法功能的重载方法,一个接收两个整数作为参数,另一个接收两个浮点数作为参数。写几句示例代码证明在不同的上下文环境中,计算机会执行不同的方法。题目2.以下代码定义了一个类:classStaticMembers{publicstaticintstaticVar=0;publicintdynamicVar=0;publicvoidincreaseValue(){staticVar++;dynamicVar++;}}请编写代码创建100个StaticMembers对象,并对每个对象调用increaseValue方法,之后,输出staticVar和dynamicVar的值教案首页第4次课授课时间:课程名称可视化程序设计年级大二下专业层次信息与计算教师付勇智专业技术职务讲师学时2授课题目(章、节)第三章窗体Form的构建与属性基本教材参考用书《MicrosoftC#Windows程序设计》(上下册)CharlesPetzold著天宏工作室译北京大学出版社教学目的与要求:1.本章学习目的与要求:深入学习面向对象程序设计有关继承的内容;掌握基类与派生类的概念及其相互关系;了解C#语言有关继承语法的使用;在此基础上介绍可视化程序设计的最基本类Form窗体类及其继承派生关系,学会使用使用Form类产生所需应用程序窗体以及窗体属性的控制。2.本节学习目的与要求:在掌握类的继承基本概念的基础上,重点掌握Form窗体类的继承体系,窗体对象的产生、显示及属性设置等问题。教学内容与时间安排,教学方法:1.教学内容与时间安排(1)面向对象程序设计的关键-继承(10min)(2)基类和派生类(15min)(3)C#中有关继承派生的规定(20min)(4).NET中的窗口对象-Form(35min)(5)窗体的属性与继承(10min)2.教学方法:讲授法、问答法、讨论法和演示法。教学重点、难点:在本节课的教学内容中,窗体类的继承关系及其属性为教学重点;继承的原理及类的继承体系设计方法为本教学的难点。授课方法及手段:在授课过程中以讲授法为主,辅助于问答法、讨论法和演示法。基本理论讲授采用讲授法和演示法进行,课堂知识的巩固采用讨论法进行,本节教学测量采用问答法进行。为了增加单位课时的信息量,应用多媒体技术组织教学过程。为了保证学生对所学内容的实际掌握能力,应当在介绍相关概念和理解后,通过实例程序的演示加深学生对面向对象程序设计相关概念的理解。教案续页基本内容(讲稿)备注第三章窗体Form的构建与属性1.面向对象程序设计的关键-继承面向对象程序设计的高效之处在于可以把不同事物所具有的共性抽象出来,作为基础,在此基础上,再加入事物个性的实现,这样就减少了对共性的重复实现。这样就能够在体现现实事物丰富多彩的特点的同时,又不之余增加很大的代码编写和维护的工作量。面向对象程序设计通过继承派生的机制来实现共性特点以及在此基础上的继承。继承(Inheritance)举例例如:男学生和女学生有大量共性的信息,包括有学生的学号、姓名、课程成绩等,可以以此为基础实现学生类。在继承学生类的共性基础上,派生实现男生类和女生类,此时只需要实现男/女生类中不同的地方,比如:上体育课、就寝、上厕所。代码示例classstudent{stringstu_no;stringstu_name;intstu_score;}classmale_student:student{void就寝(){回男生宿舍();睡觉();}}classfemale_student:student{void就寝(){回女生宿舍();睡觉();}}2.基类和派生类实现共性特征的类是整个类继承体系的基础,称为基类(baseclass),也叫作父类(parentclass),例如上例中的学生类。在基类基础上加入个性特点所实现的类称为派生类(derivedclass),也叫作子类,例如上例中的男生类和女生类。派生类和基类之间是继承派生的关系,在C#语言中通过冒号表示“:”在定义派生类的同时指明其所继承自的基类,例如:classmale_student:student同时,派生类又可以作为其他类的基类继续被继承,例如:男生类又可以派生出理科男生与文科男生类。3.C#中有关继承派生的规定C#中每个类只能从唯一的基类进行继承(接口Interface除外)C#中所有的类都直接或者间接的派生自系统的最底层基类Object,在定义一个类的时候如果不指明其基类,则系统自动默认从Object进行继承。classA{}等价于classA:Object{}继承的相关规则派生类自动从基类继承并获得所有标记为public和protected的字段和方法,标记为private的成员除外,只能在基类本身内部访问。示例程序classstudent{stringstu_no;stringstu_name;stringstu_gender;intstu_score;publicstudent(StringStu_NO,StringStu_Name){stu_no=Stu_NO;stu_name=Stu_Name;}publicvoidPrint_Score(){Console.WriteLine(stu_no+":"+stu_name+"的体育课成绩为:"+stu_score.ToString()+"分");}}男生类的实现classmale_student:student{publicmale_student(StringStu_NO,StringStu_Name):base(Stu_NO,Stu_Name){stu_gender="男";}publicvoidPE_Class(){Console.Write("请输入"+stu_name+"的成绩:");stu_score=Convert.ToInt32(Console.ReadLine());Print_Score();}}女生类的实现classfemale_student:student{publicfemale_student(StringStu_NO,StringStu_Name):base(Stu_NO,Stu_Name){stu_gender="女";}publicvoidPE_Class(){Console.Write("请输入"+stu_name+"的成绩:");stu_score=10+Convert.ToInt32(Console.ReadLine());Print_Score();}}student基类的改进usingSystem;classstudent{privatestringstu_no;protectedstringstu_name;protectedstringstu_gender;protectedintstu_score;publicstudent(StringStu_NO,StringStu_Name){stu_no=Stu_NO;stu_name=Stu_Name;}publicvoidPrint_Score(){Console.WriteLine(stu_no+":"+stu_name+"的体育课成绩为:"+stu_score.ToString()+"分");}}Main函数调用classProgram{publicstaticvoidMain(){male_studentStuA=newmale_student("001","张三");female_studentStuB=newfemale_student("002","李四");StuA.PE_Class();StuB.PE_Class();studentx=(student)StuB;x.Print_Score();Console.ReadLine();}}4..NET中的窗口对象-Form在Windows应用程序中,通常有一个“窗口”作为应用程序与用户交互的基础界面在.NET环境下,一个窗口称之为“窗体”(Form).NET中窗体由System.Windows.Forms命名空间中的Form类进行定义Form类的继承关系产生Form对象classNewForm{ publicstaticvoidMain() { newSystem.Windows.Forms.Form(); }}usingSystem.Windows.Forms;classFormNew{ publicstaticvoidMain() { Formtheform; theform=newForm(); }}显示窗体usingSystem.Windows.Forms;classFormNew{ publicstaticvoidMain() { Formform=newForm(); form.Show(); }}form.Show();等价方法form.Visible=trueControl类的基本属性及方法方法说明voidShow()使控件可见voidHide()使控件不可见类型属性访问方式boolVisible读取/设置stringText读取/设置停留显示FormusingSystem.Threading;usingSystem.Windows.Forms;classShowFormAndSleep{ publicstaticvoidMain() { Formform=newForm(); form.Show(); Thread.Sleep(5000); form.Text="MyFirstForm"; Thread.Sleep(5000); }}保持窗口usingSystem.Windows.Forms;classRunFormBadly{ publicstaticvoidMain() { Formform=newForm(); form.Text="NotaGoodIdea"; form.Visible=true; Application.Run(); }}保持窗口的改进usingSystem.Windows.Forms;classRunFormBadly{ publicstaticvoidMain() { Formform=newForm(); form.Text="MyVeryOwnForm"; Application.Run(form); }}同时创建多个窗口usingSystem.Windows.Forms;classTwoForms{ publicstaticvoidMain() { Formform1=newForm(); Formform2=newForm(); form1.Text="FormpassedtoRun()"; form2.Text="SecondForm"; form2.Show(); Application.Run(form1); MessageBox.Show("Application.Run()hasreturned"+"ControlbacktoMain.Bye!","TwoForms"); }}5.窗体的属性与继承窗体的属性usingSystem.Drawing;usingSystem.Windows.Forms;classFormProperties{ publicstaticvoidMain() { Formform=newForm(); form.Text="FormProperties"; form.BackColor=Color.SkyBlue; form.Width*=2; form.Height/=2; form.FormBorderStyle=FormBorderStyle.FixedSingle; form.MaximizeBox=false; form.Cursor=Cursors.Hand; form.StartPosition=FormStartPosition.CenterScreen; Application.Run(form); }}FormBorderStyle枚举成员值注释None0没有边框、没有标题栏FixedSingle1与FixedDialog相同Fixed3D2下凹的3D外观FixedDialog3主要用于对话框Sizable4默认值、可调窗体大小FixedToolWindow5更小标题、无控制框SizableToolWindow6同上、可调窗体大小Form类的继承usingSystem.Drawing;usingSystem.Windows.Forms;classMyForm:Form{ publicstaticvoidMain() { Application.Run(newMyForm()); } publicMyForm() { Text="MyFormObject"; BackColor=Color.Pink; FormBorderStyle=FormBorderStyle.Fixed3D; Cursor=Cursors.WaitCursor; }}教案末页小结本节主要教学内容:(1)面向对象程序设计的关键-继承(2)基类和派生类(3)C#中有关继承派生的规定(4).NET中的窗口对象-Form(5)窗体的属性与继承复习思考题及作业题实验五题目1.在对象浏览器中找到MessageBox类定义,截图并数出其中Show()方法的重载数目。题目2.自己动手将学生、男生、女生的体育课成绩的程序在VS环境中重写一遍,并调试运行通过。观察将女生对象StuB强制类型转化为基类student和更上一级基类Object之后,对象可用方法的变化情况。教案首页第5次课授课时间:课程名称可视化程序设计年级大二下专业层次信息与计算教师付勇智专业技术职务讲师学时2授课题目(章、节)第四章事件驱动编程模型基本教材参考用书《MicrosoftC#Windows程序设计》(上下册)CharlesPetzold著天宏工作室译北京大学出版社教学目的与要求:1.本章学习目的与要求:学习事件驱动编程模型的基本工作原理;掌握C#语言中delegate的语法及事件处理程序的相关内容;在此基础上介绍Paint绘图事件的处理,学会通过编写Paint事件处理程序来进行绘图输出。2.本节学习目的与要求:在掌握事件驱动编程模型的基本工作原理的基础上,重点掌握C#语言中delegate的语法及Paint绘图事件的处理。教学内容与时间安排,教学方法:1.教学内容与时间安排(1)控制台编程模型与事件驱动编程模型(20min)(2)事件处理程序的途径-函数代理(25min)(3)PaintEvent-绘图事件(20min)(4)Windows用户区图形坐标系(5min)(5)多窗体共享Paint事件处理程序(10min)(6)单个窗体多个Paint事件处理程序(10min)2.教学方法:讲授法、问答法、讨论法和演示法。教学重点、难点:在本节课的教学内容中,Paint绘图事件的处理为教学重点;事件驱动编程模型的原理及delegate代理语法为本次教学的难点。授课方法及手段:在授课过程中以讲授法为主,辅助于问答法、讨论法和演示法。基本理论讲授采用讲授法和演示法进行,课堂知识的巩固采用讨论法进行,本节教学测量采用问答法进行。为了增加单位课时的信息量,应用多媒体技术组织教学过程。为了保证学生对所学内容的实际掌握能力,应当在介绍相关概念和理解后,通过实例程序的演示加深学生对面向对象程序设计相关概念的理解。教案续页基本内容(讲稿)备注第四章事件驱动编程模型1.控制台编程模型与事件驱动编程模型传统控制台编程模型程序员编程控制整个运行流程应用程序通过键盘获得用户输入数据获得所需数据后,程序很少同用户进行交互,一直运行到输出结果或下一次需要用户输入应用程序是整个执行过程的中心,用户是为执行提供数据的来源Windows事件驱动编程模型在Windows中,程序的执行是由用户、Windows操作系统、以及程序三方协同完成的程序的工作通常是设置好整个运行所需的环境,包括总体界面的安排、创建各种控件、并为用户可能的操作安装事件处理程序待程序初始化完毕,设置好各种运行所需条件后,调用Application.Run(),将系统控制流程交由Windows操作系统负责。用户使用系统过程中通过鼠标和键盘交互式的进行输入由Windows操作系统统一管理用户对鼠标和键盘的输入Windows将用户对鼠标和键盘的操作识别为鼠标事件和键盘事件并将事件发送给对应程序的事件处理程序应用程序通过执行预先定义好的事件处理程序,对用户的操作进行响应。从而完成用户请求的处理。事件处理程序处理完对应事件后再次将控制权交还Windows,并等待下一个事件的发生Windows事件驱动编程模型示意1.1.程序初始化创建窗体及控件安装事件处理程序2.Windows管理用户操作用户双击鼠标运行一个程序初始化完毕,调用Application.Run将控制权交给Windows3.用户使用鼠标、键盘进行交互式操作Windows管理鼠标键盘用户使用鼠标键盘进行输入4.事件处理程序Windows通过事件方式通知应用程序事件处理程序对事件进行响应和处理并返回控制Windows可视化编程的核心思想Don’tCallMe,IWillCallYou!应用程序不用主动调用函数操作,接收系统的消息并及时进行处理即可。事件驱动模型总结在事件驱动模型中,应用程序不再是整个执行过程的总司令Windows操作系统负责协调用户输入与程序响应事件驱动模型下,应用程序的任务只有两个:为各种可能的用户输入编写事件处理程序进行应用环境的初始化设置,并安装事件处理程序2.事件处理程序的途径-函数代理当某一事件发生的时候,系统需要有一个恰当的机制通知需要对此事件做出反应的应用程序及时的做出响应。C#中,事件发生的消息处理是通过函数调用来实现的,而事件的具体情况则通过函数的参数来进行传递。例如:地震事件发生的情况下,相关消息的传递需要传递的参数主要为:震源经纬度坐标、震源深度、震级。delegate(代理)语法对于不同类型的事件,需要传递的信息参数各不相同,这就需要针对不同事件信息定义它所调用的处理函数所接收的参数情况,在C#语言中这是delegate(代理)语法来实现的。一个delegate类型定义了某一特定事件处理程序(函数)所满足的函数接口(参数数量及类型)delegate对象的生成与安装通过newdelegate类型的名称(处理函数名称)的语法格式将一个类的成员函数变为相应的事件处理程序delegate对象。在相应事件上通过+=语法将一个事件处理程序delegate对象安装到相应事件上,从而使得相应函数能够监听相关事件的消息并进行响应。与之类似-=语法将delegate对象从事件上卸下,解除delegate对象对事件的监听和处理。例如:对象A上有事件e,它的delegate类型为D,现B对象的x函数满足D的格式要求,现需要把B.x安装到A.e上可以这样表达A.e+=newD(B.x);3.PaintEvent-绘图事件Paint事件的作用:通知应用程序,用户区窗口失效,需要重新绘制。Paint事件的产生:Form被首次创建,此时还未被绘制出应用程序从最小化状态恢复部分被其他窗口遮盖的窗口被激活窗口大小改变程序通过Invalidate调用通知内容改变Paint事件处理Paint事件处理程序的类别publicdelegatevoidPaintEventHandler(objectobjSender,PaintEventArgspea);delegate是C#中的一类特殊函数,这类函数在一个实体中存储多个相同类型的函数,调用对应实体时,给个函数一次根据加入的先后依次被调用。对delegate的添加与删除使用+=和-=操作符WindowsForm编程中所有事件处理程序都是delegate类别Paint事件处理程序的定义:staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea){}Paint事件处理程序的安装:form.Paint+=newPaintEventHandler(MyPaintHandler);Paint事件处理程序的卸载:form.Paint-=newPaintEventHandler(MyPaintHandler);Paint事件处理程序的参数staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea)此处第一个object类型的参数objSender是事件的产生者,即事件处理程序所安装到的对象,本例中是form对象。第二个参数pea类型PaintEventArgs在System.Windows.Forms中定义,它含有两个成员属性Graphics及ClipRectangle类型属性名访问控制说明GraphicsGraphicsget绘图输出对象RectangleClipRectangleget失效矩形区域Paint事件处理程序示例usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classPaintEvent{ publicstaticvoidMain() { Formform=newForm(); form.Text="PaintEvent"; form.Paint+=newPaintEventHandler(MyPaintHandler); Application.Run(form); } staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea) { Graphicsgrfx=pea.Graphics; grfx.Clear(Color.Chocolate); Console.WriteLine("PaintEvent"); }}文字输出Graphics.DrawStringDrawString方法有6种重载函数格式voidDrawString(stringstr,Fontfont,Brushbrush,floatx,floaty)参数说明:stingstr输出字符串Fontfont使用的字体Brushbrush使用的笔刷floatx横轴象素坐标floaty纵轴象素坐标4.Windows用户区图形坐标系传统笛卡尔坐标系Windows图形坐标系Windows坐标系下坐标值向右向下增长左上角为坐标原点(0,0)HelloWorld程序Paint版usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classPaintHello{ publicstaticvoidMain() { Formform=newForm(); form.Text="PaintHello"; form.BackColor=Color.White; form.Paint+=newPaintEventHandler(MyPaintHandler); Application.Run(form); } staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea) { Formform=(Form)objSender; Graphicsgrfx=pea.Graphics; grfx.DrawString("Hello,world!",form.Font,Brushes.Black,0,0); }}5.多窗体共享Paint事件处理程序usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classPaintTwoForms{ staticFormform1,form2;publicstaticvoidMain(){ form1=newForm(); form2=newForm(); form1.Text="FirstForm"; form1.BackColor=Color.White; form1.Paint+=newPaintEventHandler(MyPaintHandler); form2.Text="SecondForm"; form2.BackColor=Color.White; form2.Paint+=newPaintEventHandler(MyPaintHandler); form2.Show(); Application.Run(form1);}staticvoidMyPaintHandler(objectobjSender,PaintEventArgspea) { Formform=(Form)objSender; Graphicsgrfx=pea.Graphics; stringstr; if(form==form1) str="Hellofromthefirstform"; else str="Hellofromthesecondform"; grfx.DrawString(str,form.Font,Brushes.Black,0,0); }}6.单个窗体多个Paint事件处理程序usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classTwoPaintHandlers{ publicstaticvoidMain() { Formform=newForm(); form.Text="TwoPaintHandlers"; form.BackColor=Color.White; form.Paint+=newPaintEventHandler(PaintHandler1); form.Paint+=newPaintEventHandler(PaintHandler2); Application.Run(form); } staticvoidPaintHandler1(objectobjSender,PaintEventArgspea) { Formform=(Form)objSender; Graphicsgrfx=pea.Graphics; grfx.DrawString("FirstPaintEventHandler",form.Font, Brushes.Black,0,0); } staticvoidPaintHandler2(objectobjSender,PaintEventArgspea) { Formform=(Form)objSender; Graphicsgrfx=pea.Graphics; grfx.DrawString("SecondPaintEventHandler",form.Font, Brushes.Black,0,100); }}7.事件处理程序总结某个对象的一个事件可以有多个处理程序对事件进行处理,事件发生时各处理程序根据安装先后依次执行。多个对象也可共享同一事件处理程序,在编写事件处理程序时,如果要区分处理多个对象的事件,需要使用处理程序的第一个参数objectobjSender确定是哪个对象发生的事件继承Form类的绘图Form的派生类除了可以通过添加Paint事件处理程序绘图外,还可以通过改写Form类的Protected方法OnPaint函数来实现绘图。OnPaint方法只有一个参数,类型为PaintEventArgsProtectedvoidOnPaint(PaintEventArgspea)OnPaint函数绘图程序usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classHelloWorld:Form{ publicstaticvoidMain() { Application.Run(newHelloWorld()); } publicHelloWorld() { Text="HelloWorld"; BackColor=Color.White; } protectedoverridevoidOnPaint(PaintEventArgspea) { Graphicsgrfx=pea.Graphics; grfx.DrawString("Hello,WindowsForms!",Font,Brushes.Black,0,0); }}8.Windows事件处理总结对于所有Windows事件来说,都有一个“On事件名”的处理方法。同时有一个对应的delegate方法EventMethodDelegateArgumentPaintOnPaintPaintEventHandlerPaintEventArgsForm派生类的再次继承usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classInheritHelloWorld:HelloWorld{ publicnewstaticvoidMain() { Application.Run(newInheritHelloWorld()); } publicInheritHelloWorld() { Text="Inherit"+Text; } protectedoverridevoidOnPaint(PaintEventArgspea) { Graphicsgrfx=pea.Graphics; grfx.DrawString("HellofromInheritHelloWorld!",Font,Brushes.Black,0,100); }}教案末页小结本节主要教学内容:(1)控制台编程模型与事件驱动编程模型(2)事件处理程序的途径-函数代理(3)PaintEvent-绘图事件(4)Windows用户区图形坐标系(5)多窗体共享Paint事件处理程序(6)单个窗体多个Paint事件处理程序复习思考题及作业题实验六编写一个WindowsForm程序在窗体中显示你的姓名和学号教案首页第6次课授课时间:课程名称可视化程序设计年级大二下专业层次信息与计算教师付勇智专业技术职务讲师学时2授课题目(章、节)第五章WindowsForms编程基本数据结构基本教材参考用书《MicrosoftC#Windows程序设计》(上下册)CharlesPetzold著天宏工作室译北京大学出版社教学目的与要求:1.本章学习目的与要求:学习WindowsForms类库编程所涉及到的基础数据结构,为之后的可视化程序设计奠定数据结构基础。2.本节学习目的与要求:掌握点类、尺寸类、矩形区域类、颜色类、画笔类、画刷类及其相关属性方法的应用。教学内容与时间安排,教学方法:1.教学内容与时间安排(1)Windows基本数据结构(5min)(2)点结构Point(15min)(3)Size(尺寸)结构(20min)(4)Rectangle矩形结构(20min)(5)Color颜色结构(10min)(6)Pen画笔结构(10min)(7)Brush画刷结构(10min)2.教学方法:讲授法、问答法、讨论法和演示法。教学重点、难点:在本节课的教学内容中,六类常用WindowsForms数据结构为教学重点;各数据结构下的相关静态方法和成员方法的使用为本教学的难点。授课方法及手段:在授课过程中以讲授法为主,辅助于问答法、讨论法和演示法。基本理论讲授采用讲授法和演示法进行,课堂知识的巩固采用讨论法进行,本节教学测量采用问答法进行。为了增加单位课时的信息量,应用多媒体技术组织教学过程。为了保证学生对所学内容的实际掌握能力,应当在介绍相关概念和理解后,通过实例程序的演示加深学生对面向对象程序设计相关概念的理解。教案续页基本内容(讲稿)备注第五章WindowsForms编程基本数据结构1.Windows基本数据结构坐标点(Point)尺寸(Size)矩形(Rectangle)颜色(Color)画笔(Pen)画刷(Brush)字体(Font)2.点结构Point点的申明与赋值错误做法Pointpt;pt.X=23;pt.Y=17;正确做法Pointpt=newPoint();pt.X=23;pt.Y=17;点的申明与赋值Pointpt=newPoint(23,47);Pointpt=Point.Empty;(设置为点0,0)Pointpt=newPoint(0x0017002F)pt.X=23(0x0017)pt.Y=47(0x002F)主要为了同旧式WindowsAPI编程兼容,尽量少用此种方法。点的属性与方法类型属性访问方式intX读取/设置intY读取/设置boolIsEmpty读取staticPointEmpty静态读取Point对象的方法TypeGetType() boolEquals(Pointpt)intGetHashCode() voidOffset(intdx,intdy)stringToString()点对象的操作符重载if(pt1==pt2) {pt1.X==pt2.X&&pt1.Y==pt2.Y}if(pt1!=pt2){pt1.X!=pt2.X||pt1.Y!=pt2.Y}pt.offset(21,-12){pt.X+=21;pt.Y+=-12}Point数组的申明与赋值申明:Point[]apt=newPoint[23];申明连带赋值:Pointapt[3]=newPoint[3]{ newPoint(25,50), newPoint(43,32), newPoint(27,8)};Pointapt[3]=newPoint[]{ newPoint(25,50), newPoint(43,32), newPoint(27,8)};Pointapt[3]={ newPoint(25,50), newPoint(43,32), newPoint(27,8)};3.Size(尺寸)结构Size结构同Point结构非常相似,不同点在于它使用Width和Height属性表示宽度与高度类型属性访问方式intWidth读取/设置intHeight读取/设置boolIsEmpty读取构造函数差别Point构造函数Point()Point(intxyPacked)Point(intx,inty)Point(Sizesize)Size构造函数Size()Size(intwidth,intheight)Size(Pointpoint)Point与Size的操作与转换强制类型转换:pt=(Point)size;size=(Size)pt;操作符重载:size3=size1+size2;size2=size3-size1;size2+=size1;size3-=size2;操作符重载:pt2=pt1+size;pt3=pt2-size;pt+=size;pt-=size;浮点版本PointF中X和Y分别为float类型SizeF中Width和Height分别为float类型注意:容易出现的错误PointFptf=ne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 期末专题复习课内基础知识总结20242025学年语文九年级上册
- 2024年陕西省新安中心医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年泉州工程职业技术学院高职单招语文历年参考题库含答案解析
- 2024年防城港市妇幼保健院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年河北软件职业技术学院高职单招职业适应性测试历年参考题库含答案解析
- 2024年长治市商业医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年江西农业工程职业学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 2024年江苏商贸职业学院高职单招职业适应性测试历年参考题库含答案解析
- 二零二五年度铁路旅客运输安全管理合同
- 2024年昆明铁道职业技术学院高职单招职业适应性测试历年参考题库含答案解析
- 勘察设计招标评分标准
- 化学仓应急预案
- 安徽国星生物化学有限公司年产5万吨吡啶碱项目环境影响报告书
- YY 1412-2016心肺转流系统离心泵
- GB/T 16180-2014劳动能力鉴定职工工伤与职业病致残等级
- 爱的五种语言--课件
- 农村共建房屋协议书(2篇)
- 公路工程施工现场安全检查手册
- 公司组织架构图(可编辑模版)
- 陕西省铜川市各县区乡镇行政村村庄村名居民村民委员会明细
- 北师大版七年级数学上册教案(全册完整版)教学设计含教学反思
评论
0/150
提交评论