部分Windowss开发.ppt

上传人:壹****1 文档编号:568599332 上传时间:2024-07-25 格式:PPT 页数:182 大小:1.58MB
返回 下载 相关 举报
部分Windowss开发.ppt_第1页
第1页 / 共182页
部分Windowss开发.ppt_第2页
第2页 / 共182页
部分Windowss开发.ppt_第3页
第3页 / 共182页
部分Windowss开发.ppt_第4页
第4页 / 共182页
部分Windowss开发.ppt_第5页
第5页 / 共182页
点击查看更多>>
资源描述

《部分Windowss开发.ppt》由会员分享,可在线阅读,更多相关《部分Windowss开发.ppt(182页珍藏版)》请在金锄头文库上搜索。

1、第第2部分部分 Windows Forms开发开发卓文华讯卓文华讯化学工业出版社化学工业出版社第二部分第二部分 创建经典的创建经典的Windows程序程序Windows Forms开发开发 第第14章章 Windows Forms介介绍第第15章章 基本控件基本控件第第16章章 Windows Forms高高级应用用第第17章章 熟熟练使用通用窗口使用通用窗口第第18章章 图形形图像程序像程序设计第第19章章 在程序中在程序中访问数据数据库第第20章章 LINQ技技术第14章 Windows Forms介绍14.1 Windows Forms程序概述程序概述14.2 Windows Forms

2、项目概述目概述14.3 管理管理Windows Forms项目目14.4 创建建简单的的Windows应用程序用程序14.5 小小结14.1 Windows Forms程序概述Windows Forms,指能,指能够在在Microsoft操作系操作系统平台上运行的,有着友好界面外平台上运行的,有着友好界面外观(如窗体、菜(如窗体、菜单、控件等)的程序。、控件等)的程序。启启动程序程序 Windows Forms窗体窗体应用程序与控制台用程序与控制台应用程序有很用程序有很大的不同,但是程序的入口是相同的,均大的不同,但是程序的入口是相同的,均为Main函数。函数。在在Windows Forms应

3、用程序中,用程序中,Main函数也是函数也是应用用程序中要程序中要执行的第一个函数。行的第一个函数。下列代下列代码是是C#中一个非常中一个非常简单的启的启动Windows程序的程序的例子。例子。static public void Main() Application.Run(new Form1(); 14.1 Windows Forms程序概述窗体:窗体:Windows操作系操作系统最主要的成功源于其友最主要的成功源于其友好的外好的外观,即窗体。在,即窗体。在Windows Forms应用程用程序中序中创建窗体需使用建窗体需使用System.Windows.Forms.Form类或其派生或其

4、派生类创建一个建一个Forms对象。象。事件:每一个事件:每一个Windows控件都控件都拥有大量的事件,有大量的事件,使其可以达到与用使其可以达到与用户交互的目的。事件的交互的目的。事件的监视及及管理由前面所介管理由前面所介绍的的Application类负责。开。开发人人员就是通就是通过编写事件的响写事件的响应方法,即事件所引方法,即事件所引发的操作,来达到的操作,来达到对程序程序进行控制及交互的目的。行控制及交互的目的。14.1 Windows Forms程序概述事件响事件响应的方法的方法 :在:在.NET中,事件的声明是通中,事件的声明是通过event(事件)关(事件)关键字来声明的。事

5、件的响字来声明的。事件的响应及及处理是通理是通过一个一个delegate(委托)来(委托)来处理的。理的。如果想如果想为一个事件添加多个相一个事件添加多个相应方法,可以使用方法,可以使用“+=”(加等于)操作符;同(加等于)操作符;同时,还可以通可以通过非非常常简单的的“=”(减等于)操作符取消(减等于)操作符取消这些响些响应方方法。法。示例:示例:button1.Click += new System.EventHandler(MyMethod); void MyMethod(object sender, System.EventArgs e);14.2.1 新建Windows Forms项

6、目当当创建建Windows Forms新新项目目时,就相当于新建,就相当于新建了一个工程。了一个工程。 步步骤:启启动Microsoft Visual Studio 2008 在菜在菜单栏中中单击【文件文件】|【新建新建】|【项目目】命令,命令,弹出出【新建新建项目目】窗口窗口 ,在,在【新建新建项目目】窗口中,可以窗口中,可以选择“项目目类型型”,在,在【名称名称】文本框中可以文本框中可以输入入项目名称,在目名称,在【位置位置】文本框中文本框中输入入项目保存的位置,目保存的位置,也可以也可以单击【浏览】按按钮查找要保存的位置。找要保存的位置。单击【确定确定】按按钮就就创建了一个建了一个Win

7、dows Forms项目,目,在窗体在窗体设计器中器中显示一个默示一个默认窗体窗体Form1。在菜在菜单栏中中单击【文件文件】|【全部保存全部保存】命令,即可保命令,即可保存存项目。目。 14.2.1 新建Windows Forms项目项目保存路径下的各文件目保存路径下的各文件夹及文件及文件说明如下:明如下:bin文件文件夹:包含:包含debug子目子目录及及WindowsApplication1.exe文件和文件和WindowsApplication1.pdb文件。文件。.exe文件文件为生成的可生成的可执行文件,行文件,.pdb文件包含完整的文件包含完整的调试信息。信息。obj文件文件夹:

8、包含:包含debug子目子目录,含有,含有编译过程中生成的中程中生成的中间代代码。Properties文件文件夹:包含:包含AssemblyInfo.cs文件,它是在文件,它是在创建建项目目过程中自程中自动添加的。此文件包含程序集属性的添加的。此文件包含程序集属性的设置。置。Resources文件文件夹:包含:包含项目所需的目所需的资源文件。源文件。Program.cs文件:文件:应用程序文件,包含用程序文件,包含应用程序代用程序代码。Form1.cs:窗体文件,包含窗体代:窗体文件,包含窗体代码。Form1.Designer.cs:与窗体及控件有关的代:与窗体及控件有关的代码。Form1.r

9、esx:Windows窗体窗体资源源编辑器生成的器生成的资源文件。源文件。WindowsApplication1.csproj:项目文件。目文件。WindowsApplication1.sln:解决方案文件。:解决方案文件。14.2.2 打开已有的Windows Forms项目步骤:步骤:启动启动Microsoft Visual Studio 2008 。在菜单栏中单击在菜单栏中单击【文件文件】|【打开打开】|【项目项目/解决方案解决方案】命令,弹出命令,弹出【打开项目打开项目】窗口,选择要打开的项目的窗口,选择要打开的项目的文件(扩展名为文件(扩展名为.sln) 。单击单击【打开打开】按钮后

10、,就打开了一个已有的按钮后,就打开了一个已有的Windows Forms项目项目 14.3 管理Windows Forms项目14.3.1 向项目添加窗体步步骤:在解决方案在解决方案资源管理器中,右源管理器中,右击项目名称,在目名称,在右右键快捷菜快捷菜单中中单击【添加添加】|【Windows窗窗体体】命令,或者在菜命令,或者在菜单栏中中单击【项目目】|【添添加加Windows窗体窗体】命令,均可命令,均可弹出出【添加新添加新项】窗口。窗口。在在该窗口的窗口的【模板模板】列表框中列表框中选择“Windows窗窗体体”,在,在【名称名称】文本框中文本框中输入窗体的名字,入窗体的名字,默默认为Fo

11、rm2、Form3等。等。单击【添加添加】按按钮,即可向即可向项目中添加一个窗体。目中添加一个窗体。 14.3.2 修改窗体属性当一个当一个Windows Forms项目被目被创建,系建,系统会会为窗体窗体设置默置默认属性。如果要修改窗体属性。如果要修改窗体的属性,一般有如下两种方法。的属性,一般有如下两种方法。通通过【属性属性】窗口修改窗体的属性。窗口修改窗体的属性。在程序代在程序代码中通中通过修改代修改代码修改窗体的属性。修改窗体的属性。大部分属性既可以通大部分属性既可以通过【属性属性】窗口修改,窗口修改,又可以通又可以通过代代码修改,而有些属性只能在修改,而有些属性只能在程序中通程序中通

12、过修改代修改代码来修改。来修改。14.3.2 修改窗体属性打开打开【属性属性】窗口的方法有很多,既可以窗口的方法有很多,既可以通通过在菜在菜单栏中中单击【视图】|【属性属性】命命令,也可以先令,也可以先选中窗体并右中窗体并右击,在右,在右键快快捷菜捷菜单中中单击【属性属性】命令,命令,还可以通可以通过快捷快捷键【Ctrl】+【W】+【P】。14.3.3 窗体常见的属性、方法和事件窗体属性:窗体属性:标题栏、窗体名称、窗体大小、窗体名称、窗体大小、颜色、色、边框、框、显示位置、背景示位置、背景图片和起始片和起始位置位置 。标题栏 :由窗体的:由窗体的Text属性决定,默属性决定,默认的的标题为F

13、orm1、Form2、Form3等等 。窗体名称:窗体名称:Name属性,属性,该属性用于在代属性用于在代码中中标识对象的名称象的名称 。由于。由于Name属性要属性要在代在代码中使用,中使用,Name属性只能在属性只能在【属性属性】窗口中被修改,在代窗口中被修改,在代码中不能修改。中不能修改。 14.3.3 窗体常见的属性、方法和事件窗体的大小由窗体的大小由Size属性决定。属性决定。窗体的背景色由窗体的背景色由BackColor属性决定属性决定 。窗体窗体边框由框由FormBorderStyle属性决定。属性决定。窗体的窗体的显示位置由示位置由Location属性决定。属性决定。窗体的背景

14、窗体的背景图片由片由BackgroundImage属性决定属性决定 。窗体的起始位置,即窗体初始出窗体的起始位置,即窗体初始出现时所在的位所在的位置置 ,由,由StartPosition属性决定。属性决定。其他属性:其他属性:Enabled、ControlBox、MaximizeBox、MinimizeBox、Visible、Icon、Cursor、WindowState。 14.3.3 窗体常见的属性、方法和事件窗体方法:窗体方法:Show方法和方法和Hide方法:用于方法:用于显示窗体或示窗体或隐藏窗体,其藏窗体,其语法形式分法形式分别如下:如下:窗体名窗体名.Show( )窗体名窗体名.

15、Hide( )Close方法:用于关方法:用于关闭窗体,其窗体,其语法形式如法形式如下:下:窗体名窗体名.Close( )Focus方法:用于激活窗体并方法:用于激活窗体并给予其焦点,予其焦点,其其语法形式如下:法形式如下:Public bool Focus( )14.3.3 窗体常见的属性、方法和事件SetBounds方法:用于方法:用于设置窗体的位置和大小,置窗体的位置和大小,其其语法形式如下:法形式如下:Public void SetBounds(int x,int y,int width,int height)SetDesktopLocation方法:以桌面坐方法:以桌面坐标设置窗体置

16、窗体的位置。其的位置。其语法形式如下:法形式如下:Public void SetDesktopLocation(int x,int y)SetDesktopBounds方法:以桌面坐方法:以桌面坐标设置窗体置窗体的的边界,可以使用此方法界,可以使用此方法设置桌面上窗体的位置置桌面上窗体的位置和大小,可确保窗体在桌面上完全可和大小,可确保窗体在桌面上完全可见,其,其语法法形式如下:形式如下:Public void SetDesktopBounds(int x,int y, int width,int height) 14.3.3 窗体常见的属性、方法和事件窗体事件的一般窗体事件的一般语法形式如下

17、。法形式如下。Private void 窗体名窗体名_事件名事件名(object sender, EventArgs e) 事件响事件响应代代码其中,参数其中,参数sender为事件事件发出者;出者;e为事件的附加数据,事件的附加数据,事件不同,事件不同,e也不同。也不同。Load事件:加事件:加载窗体窗体时被引被引发。它在窗体。它在窗体显示之示之前被前被执行,通常行,通常进行一些初始化的工作,是比行一些初始化的工作,是比较常用的事件。常用的事件。Activated事件:窗体事件:窗体获得焦点(被激活)得焦点(被激活)时被引被引发。可以使用此事件。可以使用此事件处理一些窗体被激活理一些窗体被激

18、活时需要需要更新的内容。更新的内容。14.3.3 窗体常见的属性、方法和事件Deactivate事件:窗体失去焦点事件:窗体失去焦点时被引被引发。FormClosing事件:在关事件:在关闭窗体窗体时发生。生。如果此如果此时不想关不想关闭窗体,可以将窗体,可以将传递给事事件件处理程序的理程序的FormClosingEventArgs参参数的数的Cancel属性属性设置置为true。FormClosed事件:关事件:关闭窗体后窗体后发生。可以生。可以使用此事件使用此事件执行一些行一些诸如如释放窗体占用的放窗体占用的内存内存资源、保存源、保存输入窗体中的信息或更新入窗体中的信息或更新其父窗体的任其

19、父窗体的任务。14.3.4 继承已有窗体的方式与派生与派生类继承基承基类类似,窗体也能似,窗体也能够继承承父窗体的父窗体的设置、属性和控件布局等。也就置、属性和控件布局等。也就是是说,可以,可以创建有建有标准属性的窗体作准属性的窗体作为基基窗体,并基于此基窗体派生其他子窗体或窗体,并基于此基窗体派生其他子窗体或继承窗体。承窗体。创建建继承窗体的方法有两种,一种是通承窗体的方法有两种,一种是通过编程方式程方式创建建继承窗体;另一种是使用承窗体;另一种是使用继承承选择器器创建建继承窗体。承窗体。 14.3.4 继承已有窗体的方式通通过编程方式程方式创建建继承窗体承窗体 以以编程方式程方式创建建继承

20、窗体承窗体时,主要是在,主要是在类定定义中将引用添加到要从其中将引用添加到要从其继承的窗体。承的窗体。引用引用应包含基窗体的命名空包含基窗体的命名空间,然后是基,然后是基窗体本身的名称,其窗体本身的名称,其语法形式如下。法形式如下。class 继承窗体名称承窗体名称:基窗体所在命名空基窗体所在命名空间名称名称.基窗体名称基窗体名称14.3.4 继承已有窗体的方式使用使用继承承选择器器创建建继承窗体承窗体 通通过继承承选择器,可利用已器,可利用已经在其他解决方案中在其他解决方案中创建的代建的代码或用或用户界面。界面。为了使用了使用继承承选择器,器,包含包含该基窗体的基窗体的项目必目必须已生成已生

21、成为可可执行文件或行文件或DLL。若要生成可。若要生成可执行文件,可以在菜行文件,可以在菜单栏中中单击【生成生成】|【生成解决方案生成解决方案】命令。命令。在解决方案在解决方案资源管理器中,右源管理器中,右击项目名称,在右目名称,在右键快捷菜快捷菜单中中单击【添加添加】|【新建新建项】命令,命令,弹出出【添加新添加新项】窗口。窗口。在在【添加新添加新项】窗口左窗口左侧的的【类别】列表框中列表框中选择“Windows Forms”类别,在右,在右侧【模版模版】列表列表框框选择“继承的窗体承的窗体”,打开,打开继承承选择器。器。在在继承承选择器中器中选择添加的添加的继承窗体的基窗体后,承窗体的基窗

22、体后,单击【确定确定】按按钮,完成窗体的,完成窗体的继承。承。14.4 创建简单的Windows应用程序一般情况下,一般情况下,设计创建一个建一个Windows应用程序的步用程序的步骤如下。如下。程序需求分析。程序需求分析。设计类及及对象。象。界面界面设计。为窗体及控件添加各窗体及控件添加各类事件及方法。事件及方法。打包打包发布。布。14.5 小结本章主要介本章主要介绍了了Windows Forms项目的目的基基础知知识,包括如何,包括如何创建及打开一个建及打开一个Windows Forms项目,向目,向项目添加窗体,目添加窗体,修改窗体属性,修改窗体属性,继承已有窗体。承已有窗体。对上述知上

23、述知识的了解和掌握是后的了解和掌握是后续章章节学学习的基的基础。第15章 基本控件15.1 控件与控件与组件概述件概述15.2 常用基本控件常用基本控件15.3 常用容器控件常用容器控件15.4 小小结15.1 控件与组件概述在在.NET Framework中,中,组件是指件是指实现System.ComponentModel.IComponent接口的一个接口的一个类,或是从或是从实现IComponent接口的接口的类中直接或中直接或间接派生出的接派生出的类。Visual Studio 2008提供了一系列常用提供了一系列常用组件,如件,如BackgroundWorker组件、件、Timer组

24、件、件、ErrorProvider组件等,用件等,用户也可以自行也可以自行创建建组件。件。控件是用于提供(或控件是用于提供(或实现)用)用户界面(界面(UI)功能的)功能的组件。件。因此可以因此可以说,每个控件都是一个,每个控件都是一个组件,但并不是每个件,但并不是每个组件件都可以作都可以作为控件。控件。.NET Framework专门为控件提供了两个基控件提供了两个基类,一个用于,一个用于Windows窗体控件,另一个用于窗体控件,另一个用于ASP.NET服服务器控件。器控件。Visual Studio 2008提供了一些常用控件,如提供了一些常用控件,如Label控件、控件、Button控

25、件、控件、TextBox控件等,控件等,读者也可以自己者也可以自己创建控件。建控件。15.2 常用基本控件15.2.1 Label控件Label控件是控件是Visual C#.Net的的Windows Forms控件中一种常用基本控件,又称控件中一种常用基本控件,又称标签控件。控件。标签控件通常是只控件通常是只读的,用的,用户无无法法对其其进行行编辑,被用于,被用于显示用示用户不能不能编辑的文本或的文本或图像,即用于像,即用于标识窗体上的窗体上的对象。象。 加加载Label控件控件 :在工具箱中,:在工具箱中,Label控件控件的的图标是是用用户双双击或拖或拖动工具箱中的工具箱中的Label控

26、件,便控件,便可将可将Label控件加控件加载到窗体上。到窗体上。 15.2.1 Label控件Label控件的属性控件的属性 :Text属性:用于属性:用于设置置标签控件控件显示的文本内示的文本内容。容。TextAlign属性:用于属性:用于设置置标签中文本的中文本的对齐方式。方式。AutoSize 属性:用于属性:用于设置置标签控件,使其控件,使其动态调整大小以适整大小以适应其内容。其内容。Visible属性:用于属性:用于设置置标签控件是否可控件是否可见,包含有包含有true和和false两个属性两个属性值。 15.2.1 Label控件BorderStyle属性:用于属性:用于设置置标

27、签的的边框框样式,取式,取值为BorderStyle枚枚举 。TabIndex属性:用于属性:用于设置置标签的的Tab键顺序。序。当使用当使用【Tab】键访问控件控件时,Tab键顺序序越靠前的控件越先被越靠前的控件越先被访问。UseMnemonic属性:用于属性:用于设置是否将控件置是否将控件的的Text属性中的属性中的“&”符号解符号解释为访问键前前缀字符,默字符,默认值为true。 15.2.2 textBox控件textBox控件是工具箱中最常用的控件之一,又控件是工具箱中最常用的控件之一,又称文本框控件,通常用于称文本框控件,通常用于获取用取用户输入或入或显示示文本内容文本内容在工具箱

28、中,在工具箱中,textBox控件的控件的图标为textBox控件属性:控件属性:Text属性:用于属性:用于设置文本控件置文本控件显示的文本内容。默示的文本内容。默认情况下,最多可在一个文本框中情况下,最多可在一个文本框中输入入2048个字符。个字符。如果将如果将Multiline 属性属性设置置为true,则最多可最多可输入入32KB的文本。的文本。Multiline属性:用于属性:用于设置文本框中的内容是否允置文本框中的内容是否允许输入和入和显示多行文本,包含示多行文本,包含true和和false两个属性两个属性值。MaxLength属性:用于属性:用于设置文本框内最多允置文本框内最多允

29、许的字的字符数。符数。15.2.2 textBox控件ReadOnly属性:用于设置文本框中的内容是否允属性:用于设置文本框中的内容是否允许被改动,包含有许被改动,包含有true和和false两个属性。两个属性。PasswordChar属性:用于设置密码框属性,当属性:用于设置密码框属性,当用户不希望他人看到用户的密码时,则可设置该用户不希望他人看到用户的密码时,则可设置该属性。属性。WordWrap属性:用于设置文本框中的内容是否属性:用于设置文本框中的内容是否允许换行,包含允许换行,包含true和和false两个属性值。两个属性值。ScrollBars属性:用于设置文本框的滚动条模式,属性

30、:用于设置文本框的滚动条模式,取值为取值为ScrollBars枚举。枚举。 15.2.2 textBox控件控件添加事件的方式控件添加事件的方式 :双双击控件只能添加控件只能添加该控件常用的一种事件。控件常用的一种事件。对于控件的其他事件就需要使用于控件的其他事件就需要使用【属性属性】窗口中窗口中的事件按的事件按钮 来添加事件。来添加事件。步步骤:将将textBox控件添加到窗体上后,右控件添加到窗体上后,右击textBox控件,在右控件,在右键快捷菜快捷菜单中中单击【属性属性】命令,命令,弹出出【属性属性】窗口。窗口。在其中在其中单击事件按事件按钮,便可,便可显示示textBox控件控件所有

31、的事件,所有的事件,选中中KeyPress事件,双事件,双击即可即可添加添加该事件。事件。 15.2.2 textBox控件textBox控件的事件:控件的事件:TextChanged事件:当用事件:当用户在文本框中在文本框中输入新入新信息或改信息或改变了了Text属性属性值时,触,触发该事件。事件。KeyPress事件:当用事件:当用户在文本框具有焦点在文本框具有焦点时按按任意任意键,均会触,均会触发该事件。事件。GotFocus事件:当用事件:当用户单击该控件或者按控件或者按【Tab】键时控件控件获得焦点,触得焦点,触发该事件。事件。textBox控件的方法:控件的方法:15.2.2 te

32、xtBox控件textBox控件的方法控件的方法 :Select()方法:用于方法:用于选择文本框中的内容。其文本框中的内容。其语法形式如下:法形式如下:public void Select (int start,int length)Copy()方法:用于将文本框中的当前方法:用于将文本框中的当前选定内容复制到剪定内容复制到剪贴板中。板中。public void Copy ()使用方式如下:使用方式如下:textBox1.Copy();Cut()方法:用于将文本框中的当前方法:用于将文本框中的当前选定内容移定内容移动到剪到剪贴板,板,public void Cut ()使用方式如下。使用方式

33、如下。textBox1.Cut();Paste()方法:用于将文本框中的当前方法:用于将文本框中的当前选定内容用剪定内容用剪贴板中的内容替板中的内容替换。public void Paste ()使用方式如下。使用方式如下。Textbox1.Paste();Clear()方法:用于清空文本框,其方法:用于清空文本框,其语法形式如下。法形式如下。public void Clear ()15.2.3 Button控件Button控件是控件是Visual C#.Net的的Windows Forms控件中一种常用基本控件,又称控件中一种常用基本控件,又称为按按钮控件。它既可以使用控件。它既可以使用Tex

34、t属性属性显示文示文本,也可以使用本,也可以使用Image属性和属性和ImageList属属性性显示示图像。像。在工具箱中,在工具箱中,Button控件的控件的图标为Button控件的属性控件的属性 :Text 、Image 、ImageList 、Font 、BackColor、 Enable、 FlatStyle。 15.2.3 Button控件Button控件的事件如下。控件的事件如下。Click事件:当用事件:当用户单击命令按命令按钮时,触,触发该事事件。件。MouseDown事件:当光事件:当光标位于命令按位于命令按钮上并上并且按下鼠且按下鼠标时,触,触发该事件。事件。MouseUp

35、事件:当光事件:当光标位于命令按位于命令按钮上并且上并且释放鼠放鼠标时,触,触发该事件。事件。15.2.4 CheckBox控件和RadioButton控件CheckBox控件又称复控件又称复选框,用于指示某框,用于指示某个特定条件是个特定条件是处于打开状于打开状态还是是处于关于关闭状状态。RadioButton控件又称控件又称单选按按钮或或选项按按钮 。通常将多个。通常将多个单选按按钮放在一个放在一个GroupBox或或Panel容器控件内容器控件内组成一成一组,这一一组中的中的单选按按钮之之间是互斥的,只允是互斥的,只允许用用户从中从中选择一个,其他一个,其他单选按按钮将自将自动处于未于未

36、选中状中状态。 15.2.4 CheckBox控件和RadioButton控件CheckBox控件和控件和RadioButton控件的属性控件的属性 Text:设置或置或获取控件取控件显示的示的标题内容内容 。TextAlign :设置置Text值的的对齐方式方式 。Checked :设置或置或获取按取按钮是否被是否被选择 。CheckAlign:设置控件中的置控件中的 或或 在控件中的位在控件中的位置。置。 FlatStyle:设置按置按钮的的样式式 。CheckBox控件和控件和RadioButton控件的事件控件的事件Click事件:当用事件:当用户单击控件控件时,触,触发Click事件

37、事件 。CheckedChanged事件:当事件:当Checked值改改变时,触,触发CheckedChanged事件事件 。 ComboBox控件和控件和ListBox控件都是列表控件都是列表选择控件,主要用于列出提供用控件,主要用于列出提供用户选择的的列表,用列表,用户可以从中可以从中选择一个或多个一个或多个选项。它它们均派生于均派生于ListControl类,该类提供提供了一些基本的列表管理功能。了一些基本的列表管理功能。ListBox又称又称为列表框,列表框,显示一个示一个项列表,列表,用用户可从中可从中选择一一项或多或多项。ComboBox又称又称组合框,分两个部分合框,分两个部分显

38、示,示,顶部是一个允部是一个允许用用户输入列表入列表项的文本框;的文本框;下面是一个列表框,它下面是一个列表框,它显示一个示一个项列表,列表,用用户可从中可从中选择一一项。 15.2.5 ComboBox控件和ListBox控件ListBox控件的属性控件的属性 :MultiColumn属性:属性:设置列表框是否支持多行置列表框是否支持多行显示。示。ScrollAlwaysVisible属性:属性:设置置滚动条是否条是否显示。示。SelectionMode属性:属性:设置一次可以置一次可以选择多少列表多少列表项。(None,One,MultiSimple,MultiExtended)Sorte

39、d属性:属性:设置列表框中的各置列表框中的各项是否按字母是否按字母顺序排序排序序 。Items属性:属性:设置存置存储在列表框中的所有在列表框中的所有项,是一个集,是一个集合属性,完成列表框的数据添加工作。合属性,完成列表框的数据添加工作。15.2.5 ComboBox控件和ListBox控件SelectedIndex属性:属性:获取当前取当前选定定项的索的索引,只能在程序中使用引,只能在程序中使用该属性。属性。listBox1.ItemslistBox1.SelectedIndexSelectedItems属性:当列表框允属性:当列表框允许选择多多项时,此属性返回一个集合,此属性返回一个集合

40、,该集合包含集合包含列表框中列表框中选定的所有定的所有项。SelectedIndices属性:当列表框允属性:当列表框允许选择多多项时,此属性返回一个集合,此属性返回一个集合,该集合包集合包含列表框中含列表框中选定所有定所有项的索引。的索引。 Text属性:属性:该属性存放列表框中当前属性存放列表框中当前选定定项的文本的文本 15.2.5 ComboBox控件和ListBox控件15.2.5 ComboBox控件和ListBox控件ListBox控件的事件控件的事件 :SelectedIndexChanged当当SelectedIndex属属性性变化化时触触发该事件。事件。ListBox控件的

41、方法控件的方法 :Add 、Insert 、Clear、 Remove 、SetSelected、 FindString 15.2.5 ComboBox控件和ListBox控件ComboBox控件的属性控件的属性 :DropDownStyle属性:属性:设置置组合框的合框的样式,取式,取值于于DropDownStyle枚枚举 。SelectedText属性:属性:设置或置或获取取组合框的文本合框的文本框内所框内所选定的文本定的文本 。SelectedItem属性:属性:获取取组合框内所合框内所选定的定的选项。MaxDropDownItems属性:属性:设置或置或获取取组合合框中下拉部分中框中下

42、拉部分中显示的最大示的最大项数目数目 。取。取值介于介于1和和100之之间,超,超过这两个两个值均会均会弹出出“属性属性值无效无效”提示框。提示框。15.2.5 ComboBox控件和ListBox控件ComboBox控件的事件控件的事件 :DropDown事件:当事件:当显示示组合框的下拉部分合框的下拉部分时触触发该事件,也可以事件,也可以认为是是单击下拉箭下拉箭头时发生。生。DropDownClosed事件:当事件:当组合框的下拉部分合框的下拉部分不再可不再可见时触触发该事件。事件。ComboBox控件的方法控件的方法 :Add、Insert、Clear、Remove 15.2.6 Dat

43、eTimePicker控件Windows窗体的窗体的DateTimePicker 控件使控件使用用户可以从日期或可以从日期或时间列表中列表中选择单个个项。 控件外控件外观15.2.6 DateTimePicker控件DateTimePicker控件的属性控件的属性 :Format属性:属性:设置置显示示时间的格式,取的格式,取值于于DateTimePickerForm枚枚举。Value属性:属性:显示当前示当前时间 。ShowCheckBox属性:属性:设置是否在控件中的置是否在控件中的选定日期旁定日期旁边显示一个复示一个复选框框 。CustomFormat属性:属性:设置或置或获取自定取自定

44、义的日的日期期时间格式字符串,当格式字符串,当Format属性属性为Custom时,该属性有效。属性有效。 15.2.7 PictureBox控件PictureBox控件又称控件又称图片框,用于片框,用于显示示图像。在像。在工具箱中,工具箱中,PictureBox控件的控件的图标为 PictureBox控件的属性:控件的属性:Name属性:属性:设置置PictureBox控件的名称。控件的名称。Visible属性:属性:设置置PictureBox控件是否可控件是否可见,Image属性:属性:设置控件置控件显示的示的图像,是一个像,是一个对象属性,象属性,可在运行可在运行时或或设计时设置。置。I

45、mageLocation属性:属性:设置或置或获取要在取要在图片框中片框中显示示的的图像的路径。像的路径。SizeMode属性:属性:设置置图片在控件中片在控件中显示的大小或位置。示的大小或位置。 15.2.7 PictureBox控件使用使用PictureBox控件加控件加载图像像 在窗体上放置在窗体上放置PictureBox控件。控件。在在【属性属性】窗口中窗口中选择Image属性,然后属性,然后单击省略号按省略号按钮以以显示示【打开打开】窗口。窗口。如果要如果要查找特定文件找特定文件类型(如型(如GIF文件),可文件),可以在以在【文件文件类型型】列表框中列表框中选择相相应的的类型型.选

46、择要要显示的示的图片文件。片文件。15.2.8 ProgressBar控件ProgressBar控件又称控件又称为进度条,它度条,它负责指指示示进度,度,进度完成度完成时,进度条被填度条被填满。ProgressBar控件的属性控件的属性 :Minimum属性:属性:设置置进程指示器的最左端,默程指示器的最左端,默认值为0。Maximum属性:属性:设置置进程指示器的最右端,默程指示器的最右端,默认值为100。Value属性:表示操作属性:表示操作过程中已完成的程中已完成的进度。度。Step属性:除直接属性:除直接设置置Value属性外,属性外,还可以通可以通过设置置Step属性属性值来指定来指

47、定Value属性属性递增的增的值,以便修改,以便修改ProgressBar控件控件显示的示的值,默,默认值为10。 15.2.8 ProgressBar控件ProgressBar控件的方法控件的方法PerformStep()方法:按照方法:按照Step属性中指定的属性中指定的数量增加数量增加进度条的度条的值,使,使进程条按固定程条按固定值递增,增,其其语法形式如下。法形式如下。public void PerformStep() Increment ()方法:使方法:使显示示值按指定的整数按指定的整数进行更改,使行更改,使进度条按度条按动态值递增,其增,其语法形式法形式如下。如下。public

48、void Increment(int value)其中,其中,value为动态变化的整数,指示化的整数,指示进度条度条递增的增的进度。度。15.2.9 WebBrowser控件WebBrowser控件又称控件又称为网网页浏览器,它器,它为WebBrowser ActiveX控件提供了托管控件提供了托管包装。托管包装使用包装。托管包装使用户可以在可以在Windows窗窗体客体客户端端应用程序中用程序中显示网示网页。 WebBrowser控件的属性如下。控件的属性如下。Url属性:更新地址属性:更新地址栏获取或取或设置当前网置当前网页的的URL。DocumentTitle属性:属性:设置更新置更新

49、标题栏。ScrollBarsEnabled属性:属性:设置网置网页显示框是示框是否否显示示滚动条条 。15.2.9 WebBrowser控件WebBrowser控件的事件如下。控件的事件如下。Navigated事件:在事件:在WebBrowser控件控件导航到航到新文档并开始加新文档并开始加载该文档文档时发生。生。 DocumentCompleted事件:网事件:网页完成加完成加载时触触发该事件。事件。WebBrowser控件的方法控件的方法 :Navigate 、GoForward 、GoBack、 Refresh、 GoHome 。15.3 常用容器控件15.3.1 GroupBox控件G

50、roupBox控件用于控件用于为其他控件提供可其他控件提供可识别的分的分组,又称容器控件,又称容器控件 。分。分组框内的每个框内的每个控件可以方便地移控件可以方便地移动,当移,当移动分分组框框时,其中包含的所有控件也跟着一起移其中包含的所有控件也跟着一起移动。 GroupBox控件的主要属性如下。控件的主要属性如下。Text属性:属性:设置容器控件的置容器控件的标题。Visible属性:属性:设置容器控件是否可置容器控件是否可见。15.3.2 Panel控件Panel控件又称控件又称为面板控件,面板控件,该控件控件类似似于于GroupBox控件,但控件,但Panel 控件没有控件没有Text属

51、性,不能像容器控件一属性,不能像容器控件一样设置置标题,但但Panel控件可以有控件可以有滚动条。当用条。当用户禁用禁用面板面板时,该面板上的所有控件都将被禁用。面板上的所有控件都将被禁用。Panel控件也是下面将要介控件也是下面将要介绍的的FlowLayoutPanel、TabControl和和SplitContainer的基的基类。Panel控件的属性控件的属性 :AutoScroll、 BackColor、 BackgroundImage 、BackgroundImage、Layout、 BorderStyle 。15.3.3 FlowLayoutPanel控件FlowLayoutPan

52、el控件,又称布局面板控件,又称布局面板 。FlowLayoutPanel控件的主要属性如下。控件的主要属性如下。FlowDirection属性:属性:设置流方向,即布局面置流方向,即布局面板上各控件的排列方向。板上各控件的排列方向。WrapContents属性:属性:设置是置是换行行还是剪裁控是剪裁控件的内容。件的内容。 AutoSize属性:属性:设置是否可以自置是否可以自动调整控件的整控件的内容。内容。FlowBreak属性:取属性:取值为true时,控件停止在,控件停止在当前流方向布局控件,并切当前流方向布局控件,并切换到下一行或下一到下一行或下一列。列。15.3.4 TabContr

53、ol控件TabControl控件可以控件可以显示出多个示出多个选项卡,用于卡,用于包含包含图片或按有片或按有组织的方式的方式显示其他控件。示其他控件。这些些选项卡卡类似于笔似于笔记本中的分隔卡和档案柜文本中的分隔卡和档案柜文件件夹中的中的标签。TabControl控件的常用属性:控件的常用属性:Multiline属性:属性:设置是否可以置是否可以创建多行建多行选项卡。卡。Alignment属性:属性:设置在控件的哪一置在控件的哪一侧排列排列选项卡,卡,包含包含Left 和和 Right两个取两个取值。TabPages属性:它是控件中的属性:它是控件中的TabPage对象集合。象集合。使用使用该

54、集合可以添加和集合可以添加和删除除选项卡卡对象。象。 15.3.5 SplitContainer控件SplitContainer控件可控件可视为一个复合体,一个复合体,由由3部分部分组合而成,分合而成,分别为两个面板控件两个面板控件以及它以及它们中中间一个可移一个可移动的拆分条。当光的拆分条。当光标悬停在停在该拆分条上拆分条上时,指,指针将相将相应地改地改变形状以提示形状以提示该拆分条可移拆分条可移动。15.3.5 SplitContainer控件SplitContainer控件的常用属性如下。控件的常用属性如下。Orientation属性:属性:设置控件拆分的模式。置控件拆分的模式。Fixe

55、dPanel属性:属性:设置控件的大小。置控件的大小。该属性决定属性决定调整整SplitContainer控件大小后,哪个面板将保持原来的大控件大小后,哪个面板将保持原来的大小。小。IsSplitterFixed属性:属性:设置控件的移置控件的移动情况。情况。该属性决属性决定是否可以通定是否可以通过键盘或鼠或鼠标来移来移动拆分器。拆分器。SplitterDistance属性:属性:设置从左置从左边缘或上或上边缘到可移到可移动拆分条的距离(以像素拆分条的距离(以像素为单位)。位)。SplitContainer控件的事件控件的事件 :SplitterMoving 、SplitterMoved 。1

56、5.4 小结本章介本章介绍了了Visual Studio 2008中常用的基中常用的基本控件、常用容器控件的相关基本控件、常用容器控件的相关基础知知识,并分并分别介介绍了各控件的相关属性、方法及了各控件的相关属性、方法及事件。下章将事件。下章将继续介介绍较复复杂的一些控件、的一些控件、组件以及菜件以及菜单、工具、工具栏、状、状态栏、MDI等。等。第16章 Windows Forms高级应用16.1 高高级控件控件16.2 用用户定定义控件控件16.3 常用常用组件件16.4 在窗体中加入菜在窗体中加入菜单16.5 在窗体中加入工具在窗体中加入工具栏16.6 在窗体中加入状在窗体中加入状态栏16

57、.7 在窗体中加入多窗体在窗体中加入多窗体16.8 创建建MDI窗体窗体16.9 小小结16.1 高级控件16.1.1 TreeView控件控件TreeView控控件件又又称称树视图,可可以以为用用户显示示节点点层次次结构。构。TreeView控件的常用属性如下。控件的常用属性如下。Nodes集合:集合:设置包含在置包含在树视图中的中的顶级节点点列表。列表。Scrollable属性:属性:设置控件是否会置控件是否会显示示滚动条。条。 Showlines属性:属性:设置或置或获取一个取一个值,确定是,确定是否否显示示连接子接子节点和父点和父节点的点的线条。条。CheckBoxes属性:属性:设置

58、是否在置是否在节点旁点旁边显示示带有复有复选框的框的树视图。 16.1.1 TreeView控件TreeView控件的常用方法控件的常用方法为:Add()、Remove() 、Clear()。TreeView控件的常用事件是控件的常用事件是AfterSelect事事件,当用件,当用户选定定树节点后,触点后,触发该事件。事件。 16.1.2 ListView控件ListView控件又称列表控件又称列表视图,用于,用于显示示带图标的的项的列表。的列表。 ListView控件的常用属性如下:控件的常用属性如下:View属性属性Items属性属性Columns属性属性Group属性属性ListView

59、控件的常用方法如下。控件的常用方法如下。BeginUpdate() 、EndUpdate() 、Clear()ListView控件的常用事件如下。控件的常用事件如下。ItemActivate事件:当激活一个事件:当激活一个选项时,引,引发该事件。事件。AfterLabelEdit事件:当事件:当编辑了了标签后,引后,引发该事件。事件。ColumnClick事件:当事件:当单击一个列一个列时,引,引发该事件。事件。16.1.3 MonthCalendar控件MonthCalendar控件又称控件又称为日日历表,它表,它为用用户查看和看和设置日期信息提供了一个直置日期信息提供了一个直观的的图形界面

60、。形界面。MonthCalendar控件的一个重要功能是用控件的一个重要功能是用户可以可以选择日期的范日期的范围。MonthCalendar控件的常用属性如下:控件的常用属性如下:MaxSelectionCount属性属性MinDate属性属性MaxDate属性属性SelectionRange属性属性ShowToday属性属性ShowWeekNumbers属性属性CalendarDimensions属性属性FirstDayOfWeek属性属性16.2 用户定义控件16.2.1 用用户定定义控件概述控件概述用用户控件:控件:这类控件一般用于把控件的用控件一般用于把控件的用户界面和功能封装在一起,

61、或者把几个其界面和功能封装在一起,或者把几个其他控件他控件组合在一起,从而改善控件的界面。合在一起,从而改善控件的界面。定制控件:当没有控件可以定制控件:当没有控件可以满足要求足要求时,就就创建建这类控件,即从控件,即从头开始开始创建控件。建控件。它要自己它要自己绘出用出用户界面,在界面,在创建控件的建控件的过程中没有程中没有现有的控件可以使用。有的控件可以使用。16.2.2 用户定义控件的创建、生成及应用Windows控件开控件开发的一般步的一般步骤如下:如下:创建建Windows控件控件项目。目。设计Windows控件界面。控件界面。设计Windows控件代控件代码,即,即为控件添加属性、

62、控件添加属性、方法和事件。方法和事件。生成生成Windows控件。控件。16.3 常用组件16.3.1 BackgroundWorker组件件BackgroundWorker组件件又又称称后后台台工工作作区区,可可以以在在不不同同于于应用用程程序序的的主主用用户界界面面线程程的的另另一一线程程上上异异步步(在在后后台台上上)执行行耗耗时的操作。的操作。BackgroundWorker组件的常用属性如下:件的常用属性如下:CancellationPendingWorkerReportsProgressWorkerSupportsCancellationIsBusy16.3.1 Backgroun

63、dWorker组件BackgroundWorker 组件的常用方法如下:件的常用方法如下:RunWorkerAsync()方法方法CancelAsync()方法方法ReportProgress()方法方法BackgroundWorker 组件的常用事件如下:件的常用事件如下:DoWork事件事件RunWorkerCompleted事件事件ProgressChanged事件事件16.3.2 Timer组件Timer组件又称定件又称定时器或器或计时器,它可以按器,它可以按一定一定时间间隔周期性自隔周期性自动触触发事件。当程事件。当程序运行序运行时,定,定时器并不是可以器并不是可以见的。的。Time

64、r组件的常用方法包括件的常用方法包括Start和和Stop,这两种方法可用于打开和关两种方法可用于打开和关闭计时器。器。计时器在关器在关闭时重置,不存在重置,不存在暂停停Timer组件件的方法。的方法。 16.3.3 ErrorProvider组件ErrorProvider 组件,通常用于件,通常用于对窗体或控件上窗体或控件上的用的用户输入入进行行验证。 ErrorProvider组件的常用属性如下:件的常用属性如下:Icon属性:属性:设置置为自定自定义错误图标而不是默而不是默认图标,默默认图标为。DataSource属性:属性:设置置为数据集数据集显示示错误信息。信息。ErrorProvi

65、der 组件的主要方法是件的主要方法是SetError()方法。方法。该方法可以指定方法可以指定错误信息字符串和信息字符串和错误图标应出出现的位置。的位置。示例:示例:errorProvider1.SetError(textBox1, 长度超度超过了了);16.4 在窗体中加入菜单16.4.1 创建基本菜单位于窗体位于窗体标题栏下的菜下的菜单称称为主菜主菜单,它,它由由MenuStrip控件生成。控件生成。该控件使用控件使用Items包含各个菜包含各个菜单项。菜。菜单项或子菜或子菜单项均由均由ToolStripMenuItem控件生成。双控件生成。双击各菜各菜单项,生成,生成单击事件,填写事件

66、代事件,填写事件代码即可。即可。16.4.1 创建基本菜单步步骤:把把MenuStrip控件从工具箱中拖控件从工具箱中拖动到窗体上,到窗体上,就会出就会出现菜菜单编辑器器 。在菜在菜单编辑器内,器内,单击【请在此在此处输入入】文本文本框,并框,并输入在菜入在菜单中中显示的文本,按示的文本,按【Enter】键后,菜后,菜单编辑器就建立了一个主菜器就建立了一个主菜单项。 在菜在菜单文本中文本中输入入“&”符号,符号,为菜菜单项添加快添加快捷捷键 。如果要如果要为菜菜单项添加快捷添加快捷键,可以,可以设置菜置菜单项的的ShortcutKeys属性属性 ,步,步骤如下:如下:选择某子菜某子菜单项。在在

67、【属性属性】窗口中,窗口中,选择“ShortcutKeys”属性。属性。单击其右其右侧的下拉箭的下拉箭头,在,在弹出的列表中勾出的列表中勾选“Ctrl”复复选框,在框,在【键】下拉列表框中下拉列表框中选择“C”。添加分割添加分割线:利用分割:利用分割线可以可以给主菜主菜单下的子菜下的子菜单进行分行分组。可以通。可以通过输入入“”作作为菜菜单文本来文本来为菜菜单项之之间加上分割加上分割线。编辑菜菜单项:如果要在某一个菜:如果要在某一个菜单项前面插入另一个前面插入另一个菜菜单项,可以右,可以右击菜菜单项,在右,在右键快捷快捷键菜菜单中中单击【插入插入】|【MenuItem】命令。命令。16.4.2

68、 添加快捷键通常会使用右通常会使用右键快捷菜快捷菜单来来执行某个快捷操作,在行某个快捷操作,在C#中使中使用用ContextMenuStrip控件控件创建右建右键菜菜单。 示例步示例步骤:添加添加ContextMenuStrip控件,另外添加一个控件,另外添加一个Group控件到窗体上。控件到窗体上。为控件控件绑定右定右键菜菜单:先:先选中中Group控件,然后控件,然后单击该控件的控件的ContextMenuStrip属性,系属性,系统会自会自动查找拖找拖动到当前到当前页面的所有面的所有ContextMenuStrip控件并将控件并将这些控件些控件罗列在列在该属性的下拉菜属性的下拉菜单中,中

69、,选择相相应的的ContextMenuStrip控件,控件,定定义右右键菜菜单:在:在为控件分配完菜控件分配完菜单之后,就可以定之后,就可以定义单个的菜个的菜单。可以。可以选中中ContextMenuStrip控件,系控件,系统会自会自动在在编辑页面的面的上面上面显示一个可示一个可编辑的的动态菜菜单,可以在,可以在为该菜菜单添加菜添加菜单项,在在这里添加了里添加了“打开打开”和和“退出退出”这两个菜两个菜单项。为右右键菜菜单添加代添加代码:双:双击菜菜单即可即可进入相入相应的代的代码编辑区。区。16.4.3 创建右键菜单工具工具栏用于用于为用用户提供一种快捷操作,不需提供一种快捷操作,不需要用

70、要用户在多在多级菜菜单中去搜索需要的子菜中去搜索需要的子菜单,只需要只需要单击相相对应的工具的工具栏命名即可。工命名即可。工具具栏通常包含一些按通常包含一些按钮、组合框、合框、编辑框框等等组件。按件。按钮用于用于执行命令或切行命令或切换状状态,组合框、合框、编辑框用于框用于选择、输入。工具入。工具栏上的按上的按钮与相与相应的菜的菜单功能相同。功能相同。16.5 在窗体中加入工具栏16.5.1 ToolStrip控件和ToolStripButton控件位于窗体菜位于窗体菜单栏下的工具按下的工具按钮称称为工具工具栏,它由,它由ToolStrip控件生成。工具控件生成。工具栏上的各个工具按上的各个工

71、具按钮由由ToolStripButton对象来表示,双象来表示,双击各按各按钮项,生,生成成单击事件,填写事件代事件,填写事件代码即可。即可。 ToolStrip控件的常用属性如下。控件的常用属性如下。Items属性:工具属性:工具栏按按钮ToolStripButton的集合。的集合。ShowItemToolTips属性:指示是否要在属性:指示是否要在ToolStrip项上上显示工具提示。示工具提示。ToolStrip控件的常用事件控件的常用事件为ItemClick事件,在事件,在单击工具按工具按钮时发生。生。16.5.1 ToolStrip控件和ToolStripButton控件ToolSt

72、ripButton控件的常用属性如下。控件的常用属性如下。Checked属性:指示是否已按下属性:指示是否已按下该工具按工具按钮。CheckOnClick属性:指示在属性:指示在单击工具按工具按钮时,该工具按工具按钮是否是否自自动显示示为按下或未按下状按下或未按下状态。CheckState属性:指示工具按属性:指示工具按钮处于于选中、未中、未选中中还是不确定状是不确定状态,取,取值于于CheckState枚枚举。DisplayStyle属性:是否在工具按属性:是否在工具按钮上上显示文本和示文本和图像,取像,取值于于ToolStripItemDisplayStyle枚枚举。Image属性:属性:

73、设置置显示在工具按示在工具按钮上的上的图像。像。Selected属性:指示属性:指示该项是否是否处于于选定状定状态。Text属性:属性:设置要置要显示在工具按示在工具按钮上的文本。上的文本。ToolStripButton控件的常用事件如下。控件的常用事件如下。Clicked事件:事件:单击工具工具栏按按钮时触触发该事件。事件。CheckedChanged事件:事件:Checked属性属性发生生变化化时触触发该事件。事件。16.5.2 创建工具栏步步骤:在窗体上放置在窗体上放置1个个ToolStrip控件,在其控件,在其【属性属性】窗口中窗口中选择Items属性,属性,单击右右侧的省略号按的省略

74、号按钮,打开,打开项集合集合编辑器,在器,在【选择项并添加到以下列表并添加到以下列表】下拉列表框下拉列表框中中选择要添加的要添加的项,单击【添加添加】按按钮,即可向,即可向【成成员】列表框中添加相列表框中添加相应的的项。单击ToolStripButton控件的控件的Image属性右属性右侧的省略号的省略号按按钮,弹出出【选择资源源】窗口,窗口,单击【导入入】按按钮,由本地由本地资源添加源添加图像。像。为toolStrip1控件添加控件添加ItemClicked事件,以便通事件,以便通过该事件来确定用事件来确定用户单击的是哪一个工具按的是哪一个工具按钮。同。同时,为ToolStripButton

75、控件添加控件添加Click事件来确定用事件来确定用户单击工工具按具按钮。16.6 在窗体中加入状态栏状状态栏位于窗体的底部,通常用于位于窗体的底部,通常用于显示示应用用程序的各种状程序的各种状态信息。信息。状状态栏由由StatusStrip控件生成,状控件生成,状态项由由ToolStripStatusLabel控件生成。控件生成。16.6.1 StatusStrip控件和ToolStripStatusLabel控件StatusStrip控件的常用属性如下。控件的常用属性如下。Items属性:用于属性:用于获取各个状取各个状态项。ShowItemToolTips属性:指示是否属性:指示是否为状状

76、态栏显示工具提示。示工具提示。StatusStrip控件的常用事件控件的常用事件为ItemClicked事件,事件,单击StatusStrip控件控件时触触发该事件。事件。16.6.1 StatusStrip控件和ToolStripStatusLabel控件ToolStripStatusLabel控件用于在控件用于在StatusStrip中中提供一个提供一个显示区域,用于示区域,用于显示文本或示文本或图像。像。ToolStripStatusLabel控件的常用属性如下。控件的常用属性如下。Alignment属性:属性:设置置ToolStripStatusLabel控件在控件在StatusStr

77、ip上的上的对齐位置。位置。BorderStyle属性:属性:设置置ToolStripStatusLabel控件的控件的边框框样式。式。Image属性:属性:设置要置要显示在面板上的示在面板上的图像。像。Text属性:要属性:要显示在面板上的文本。示在面板上的文本。ToolStripStatusLabel控件的常用事件控件的常用事件为Click事事件,件,单击状状态栏面板面板时触触发该事件。事件。16.6.2 创建状态栏示例步示例步骤:(以以实现第第1状状态项显示系示系统当前的当前的时间,第,第2状状态项显示光示光标在窗体上移在窗体上移动时的坐的坐标为例例) 。在窗体上放置在窗体上放置1个个S

78、tatusStrip控件,控件,为窗体添加一个状窗体添加一个状态栏。在。在【属性属性】窗口中窗口中选中中Items属性,属性,单击其右其右侧的省略号按的省略号按钮,打开,打开项集合集合编辑器,器,为状状态栏添加面添加面板板toolStripStatus。Label1和和toolStripStatusLabel2。设置置StatusStrip控控件的件的ShowItemToolTips属性属性为“true”,设置两个置两个ToolStripStatusLabel控件的控件的ToolTipText属性分属性分别为“显示示时间”和和“显示坐示坐标”,这样可以可以为状状态栏添添加工具提示。加工具提示。

79、16.7 在窗体中加入多窗体16.7.1 多窗体概述多窗体多窗体应用程序一般包含一个主窗体和多个用程序一般包含一个主窗体和多个其他窗体,其他窗体用于其他窗体,其他窗体用于辅助主窗体完成助主窗体完成各种任各种任务。例如,。例如,为主窗体主窗体输入数据,把入数据,把主窗体的信息主窗体的信息输出出给用用户等。主窗体的等。主窗体的设计与与单窗体窗体应用程序的窗体用程序的窗体设计相同。相同。添加窗体:在多窗体添加窗体:在多窗体应用程序中,需要建立用程序中,需要建立多个窗体。多个窗体。16.7.1 多窗体概述设置启置启动窗体窗体:启:启动窗体即窗体即应用程序运行用程序运行时显示的窗体。示的窗体。示例:示例

80、:static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1();16.7.1 多窗体概述对于窗体的生成与关于窗体的生成与关闭,操作分,操作分别如下。如下。建立窗体建立窗体实例:在例:在C#中,窗体中,窗体实际就是一个就是一个类。若要。若要操作某一个窗体,必操作某一个窗体,必须先先实例化一个窗体例化一个窗体类,代,代码如如下。下。Form1 f = new Form1();显示窗体:使用示窗

81、体:使用Form类的的Show()方法或方法或ShowDialog()方法可以方法可以显示窗体,代示窗体,代码如下。如下。f.Show();隐藏窗体:使用藏窗体:使用Form类的的Hide()方法可以方法可以隐藏窗体,藏窗体,代代码如下。如下。f.Hide();关关闭窗体:使用窗体:使用Form类的的Close()方法可以关方法可以关闭窗体,窗体,代代码如下。如下。f.Close();16.7.2 窗体间的关联从主窗体中启从主窗体中启动其他窗体,可以在主窗体中生其他窗体,可以在主窗体中生成其他窗体的成其他窗体的实例,或引用其他窗体,然后通例,或引用其他窗体,然后通过该实例的例的Show()方法

82、方法显示窗体。示窗体。 示例:示例:Form2 f = new Form2();mainForm.Hide();/mianForm为主窗体的名称主窗体的名称f.Show();从其他窗体从其他窗体访问主窗体主窗体可以在其他窗体可以在其他窗体类中声明一个引用主窗体中声明一个引用主窗体实例的公有例的公有变量。在主窗体启量。在主窗体启动其他窗体其他窗体时,把主窗体,把主窗体实例例传给该变量即可。量即可。这样,在其他窗体中,就可以利用,在其他窗体中,就可以利用该变量量访问主窗体了。主窗体了。16.7.2 窗体间的关联从其他窗体从其他窗体访问主窗体主窗体 ,示例:,示例:例如,主窗体中包含例如,主窗体中包

83、含1个个TextBox控件和控件和Button控件,窗体控件,窗体2包含包含1个个TextBox控件。当控件。当单击主窗体的主窗体的Button控件控件时,将,将弹出窗体出窗体2,且,且该窗体窗体TextBox控件控件的的值为主窗体主窗体TextBox控件的控件的值。主窗体代主窗体代码如下。如下。private void button1_Click(object sender, EventArgs e) Form2 f = new Form2(); f.form1 = this; f.Show();其他窗体代其他窗体代码如下。如下。public partial class Form2 : Fo

84、rm public Form1 form1; public Form2() InitializeComponent(); private void Form2_Load(object sender, EventArgs e) textBox1.Text = form1.ControlstextBox1.Text; 16.7.2 窗体间的关联从主窗体中从主窗体中访问其他窗体其他窗体若要在主窗体中若要在主窗体中访问其他窗体,需要在主窗体其他窗体,需要在主窗体中中为其他窗体生成公有属性或公有其他窗体生成公有属性或公有变量。当其量。当其他窗体关他窗体关闭时,就可以把,就可以把这些些变量或属性的量或属性

85、的值返回返回给主窗体。主窗体。16.7.3 创建多窗体见书例例1611。16.8 创建MDI窗体MDI应用用程程序序允允许用用户同同时显示示多多个个文文档档,每每个个文文档档显示示在在它它自自己己的的窗窗体体中中。MDI窗窗体体包包括括一一个个父父窗窗体体和和若若干干个个子子窗窗体体。MDI父父窗窗体体是是包包含含MDI子子窗窗体体的的容容器器,MDI子子窗窗体体是是用用户与与MDI应用用程程序序交交互互的的窗窗体体。要要创建建一一个个MDI窗窗体体,必必须先先创建建几几个个窗窗体体,然然后后将将其其中中一一个个窗窗体体设置置为主主窗窗体体,其其余余窗窗体体均均为子窗体。子窗体。16.8 创建

86、MDI窗体创建主窗体的步建主窗体的步骤如下:如下:新建一个新建一个Windows Forms项目。目。设置置MDI主窗体的属性。主窗体的属性。打开打开【属性属性】窗口,要将窗口,要将该窗体窗体设为主窗体,只需主窗体,只需将将该窗体的窗体的IsMdiContainer属性属性设置置为True 。最后由用最后由用户自行自行设计主窗体。主窗体。 16.9 小结Windows Form项目目大大多多是是由由窗窗体体和和控控件件所所组成成的的。因因此此,使使用用窗窗体体和和控控件件进行行Windows Form项目目开开发是是每每个个开开发人人员必必须掌掌握握的的内内容容。本本章章介介绍了了Window

87、s高高级控控件件、菜菜单、工工具具栏、状状态栏、多多窗窗体体以及以及MDI窗体的使用方法。窗体的使用方法。第17章 熟练使用通用窗口 窗口是窗口是Windows程序设计中的另一项重要内容,它程序设计中的另一项重要内容,它是应用程序与用户进行交互的一个重要途径,常用于实现是应用程序与用户进行交互的一个重要途径,常用于实现应用程序的输入、输出功能。在应用程序的输入、输出功能。在C#中没有提供为窗口专门中没有提供为窗口专门设计的类。设计的类。 在在Visual Studio 2008中,可以通过使用中,可以通过使用Windows窗窗体设计器来构造自定义窗口,根据具体需要,可以向窗口体设计器来构造自定

88、义窗口,根据具体需要,可以向窗口中添加诸如中添加诸如Label、Textbox和和Button之类的控件。之类的控件。.NET Framework还包含预定义窗口,也称为通用窗口,用户可还包含预定义窗口,也称为通用窗口,用户可以自行修改以适应应用程序的需要。本章将主要介绍以自行修改以适应应用程序的需要。本章将主要介绍C#中中通用窗口的相关知识。通用窗口的相关知识。章节内容章节内容17.1 自定自定义窗口窗口17.2 文件窗口文件窗口17.3 文件文件夹浏览窗口窗口17.4 打印打印17.5 打印打印预览窗口窗口17.6 【字体字体】窗口和窗口和【颜色色】窗口窗口17.7 MessageBox类

89、17.8 小小结17.1 自定义窗口自定义窗口自定义窗口即由用户根据应用程序的需求自行设计的自定义窗口即由用户根据应用程序的需求自行设计的窗口。通常根据工作模式的不同,自定义窗口分有模窗口。通常根据工作模式的不同,自定义窗口分有模式窗口和无模式窗口两种。有模式窗口要求用户在继式窗口和无模式窗口两种。有模式窗口要求用户在继续运行程序前先响应窗口;无模式窗口不要求用户在续运行程序前先响应窗口;无模式窗口不要求用户在继续运行程序前先响应窗口,而是停留在屏幕上随时继续运行程序前先响应窗口,而是停留在屏幕上随时可用。可用。调用窗体的调用窗体的ShowDialog()方法显示有模式窗口。方法显示有模式窗口

90、。调用窗体的调用窗体的Show()方法显示无模式窗口。方法显示无模式窗口。17.2 文件窗口文件窗口包括文件打开窗口和文件保存窗口。文件窗口包括文件打开窗口和文件保存窗口。文件打开窗口由文件打开窗口由OpenFileDialog类实现,用于浏览本类实现,用于浏览本地和网络中任意计算机上的文件夹,并可选择打开一地和网络中任意计算机上的文件夹,并可选择打开一个或多个文件;个或多个文件;文件保存窗口由文件保存窗口由SaveFileDialog类实现,用于浏览文类实现,用于浏览文件系统并选择要保存文件的位置。件系统并选择要保存文件的位置。17.2 文件窗口using System.IO;private

91、 void button1_Click(object sender, EventArgs e) SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Filter = 所有文件所有文件*.*|*.*|文本文件文本文件*.txt|*.txt|C#文件文件|*.cs|C文件文件|*.c; sfdlg.InitialDirectory = c:user; sfdlg.Title = 保存文本文件保存文本文件; sfdlg.FilterIndex = 2; /如果用户单击文件保存窗口的如果用户单击文件保存窗口的【保存保存】按钮,向文件写按钮,向文件写 i

92、f (sfdlg.ShowDialog() = DialogResult.OK) FileStream fs = new FileStream(sfdlg.FileName, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter fileStream = new StreamWriter(fs); fileStream.WriteLine(textBox1.Text); fileStream.Close(); 17.3 文件夹浏览窗口在在进进行行文文件件操操作作时时,除除了了使使用用文文件件窗窗口口获获得得文文件件路路径径外外,还还经经常

93、常需需要要获获得得文文件件夹夹的的路路径径,这这就就需需要要使使用用文文件件 夹夹 浏浏 览览 窗窗 口口 。 在在 程程 序序 中中 , 使使 用用FolderBrowserDialog类类的的ShowDialog方方法法显显示示文文件夹浏览窗口。件夹浏览窗口。17.4 打印private void Form1_Load(object sender, EventArgs e) pdoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(pdoc_PrintPage); pd.Document = pdoc;/设置设置

94、Document属性为需要打印的文档属性为需要打印的文档void pdoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)e.Graphics.FillRectangle(Brushes.Red, new Rectangle(400, 400, 400, 400); private void button1_Click(object sender, EventArgs e) /打印文档打印文档 if (pd.ShowDialog() = DialogResult.OK) pd.Document.Pri

95、nt(); private void button2_Click(object sender, EventArgs e)Application .Exit (); 17.5 打印预览窗口在在C#中中,可可以以通通过过两两种种方方式式进进行行打打印印预预览览,即即使使用用PrintPreviewControl控控件件和和PrintPreviewDialog组组件。件。PrintPreviewDialog组组件件又又称称打打印印预预览览窗窗口口,用用于于显显示示文文档档打打印印后后的的外外观观,该该窗窗口口包包含含打打印印、放放大大、显示一页或多页等命令按钮显示一页或多页等命令按钮.17.5 打印

96、预览窗口using System.Drawing.Printing;private void Form1_Load(object sender, EventArgs e) PrintDocument myDocument = new PrintDocument(); myDocument.PrintPage += new PrintPageEventHandler(docToPrint_PrintPage);private void button1_Click(object sender, EventArgs e) printPreviewDialog1.Document = myDocume

97、nt;/将打印预览的打印文档设置为打将打印预览的打印文档设置为打印文档印文档 printPreviewDialog1.ShowDialog();/显示打印预览窗口显示打印预览窗口 void myDocument _PrintPage(object sender, PrintPageEventArgs e) e.Graphics.FillRectangle(Brushes.Red, new Rectangle(150, 300, 500, 500);17.5 打印预览窗口打打印印预预览览控控件件(PrintPreviewControl)用用于于按按文文档档打打印印时时的的外外观观显显示示文文档档

98、。此此控控件件没没有有命命令令按按钮钮和和其其他他用用户户界界面面元元素素,因因此此通通常常只只有有在在自自定定义义打打印印预预览览用用户户界界面面时时才才使使用用它它。如如果果需需要要标标准准的的用用户户界界面面,可可以以使使用用 PrintPreviewDialog控件控件. 17.5 打印预览窗口private void Form1_Load(object sender, EventArgs e) PrintDocument docToPrint = new PrintDocument(); printPreviewControl1.Document = docToPrint; docT

99、oPrint.PrintPage += new PrintPageEventHandler(docToPrint_PrintPage);void docToPrint_PrintPage(object sender, PrintPageEventArgs e) string text = 这是打印预览控件的演示!这是打印预览控件的演示!; Font printFont = new Font(宋体宋体,40, FontStyle.Regular); e.Graphics.DrawString(text, printFont, Brushes.Red, 100, 100); e.Graphics.

100、FillRectangle(Brushes.Red, new Rectangle(150, 300, 500, 500);17.6.1 【字体】窗口【字体字体】窗口是标准的窗口是标准的Windows窗口,用于设置当窗口,用于设置当前所选文字的字体。默认情况下,在前所选文字的字体。默认情况下,在【字体字体】窗口中窗口中显示字体、字形、大小的列表框,以及删除线和下划显示字体、字形、大小的列表框,以及删除线和下划线效果的复选框。线效果的复选框。可以通过可以通过FontDialog类的类的ShowDialog()方法显示方法显示【字体字体】窗口,通过窗口,通过FontDialog类的类的Font属性获

101、取用属性获取用户选择的字体。其中,户选择的字体。其中,Font是一个对象,用于公开是一个对象,用于公开字体、字形、字号等字体、字形、字号等 .17.6.2 【颜色】窗口【颜颜色色】窗窗口口允允许许用用户户从从调调色色板板选选择择颜颜色色,也也可可以以将将自定义的颜色添加到该调色板上。自定义的颜色添加到该调色板上。在在程程序序中中,使使用用ColorDialog类类的的ShowDialog()方方法法就就可可以以显显示示【颜颜色色】窗窗口口。当当用用户户选选择择颜颜色色或或自自定定义义颜色后,它的颜色后,它的Color属性就记住了该颜色值。属性就记住了该颜色值。17.7 MessageBox类消

102、息框用于向用户显示一些通知消息,可以显示文本、消息框用于向用户显示一些通知消息,可以显示文本、按钮和图标。按钮和图标。简单地调用简单地调用MessageBox类的静态方法类的静态方法Show()即可实即可实现消息框。使用现消息框。使用Show()方法可以通过传递参数来确定方法可以通过传递参数来确定消息框的标题、消息文本、按钮以及图标。消息框的标题、消息文本、按钮以及图标。Show()方方法的语法形式如下:法的语法形式如下: Public static DialogResult Show (string text, string caption, MessageBoxButtons button

103、s, MessageBoxIcon icon,MessageDefaultButton defaultButton) text用于设置在消息框中显示的提示文本;用于设置在消息框中显示的提示文本; caption用于设置消息框的标题;用于设置消息框的标题; buttons用于设置消息框中显示的按钮,是一个用于设置消息框中显示的按钮,是一个MessageBoxButtons枚举枚举; icon用于设置消息框上出现的图标,是一个用于设置消息框上出现的图标,是一个MessageIcon枚举;枚举;MessageBoxDefaultButton用于设置消息框上的默认按钮。用于设置消息框上的默认按钮。17

104、.7 MessageBox类MessageBoxButtons枚举值 枚举值包含的按钮AbortRetryIgnore“中止”、“重试”、和“忽略”按钮OK“确定”按钮OKCancel“确定”和“取消”按钮RetryCancel“重试”和“取消”按钮YesNo“是”和“否”按钮YesNoCancel“是”、“否”和“取消”按钮17.7 MessageBox类 MessageIcon枚举值 枚举值图像枚举值图像AsteriskQuestionErrorStopExclamationWarningHand17.8 小结本章主要介绍了通用窗口的使用方法与技巧。读者可本章主要介绍了通用窗口的使用方法与

105、技巧。读者可结合本章自定义窗口和通用窗口的学习,全面掌握窗结合本章自定义窗口和通用窗口的学习,全面掌握窗口的使用方法,可以在口的使用方法,可以在Windows应用程序设计中灵活应用程序设计中灵活运用,从而设计出功能强大、界面美观的应用程序。运用,从而设计出功能强大、界面美观的应用程序。第18章 图形图像程序设计 本章将主要介绍本章将主要介绍C#中图形、图像绘制及处理的基本知中图形、图像绘制及处理的基本知识和技巧,使读者对识和技巧,使读者对C#中图形绘制及图像处理过程有一个中图形绘制及图像处理过程有一个大致的了解。大致的了解。章节内容章节内容18.1 GDI+基基础18.2 基本基本图形的形的绘

106、制制18.3 图像像处理理18.4 小小结18.1.1 GDI+概述GDI+(Graphics Device Interface Plus,图形设备,图形设备接口)是一组通过接口)是一组通过C+类实现的应用程序编程接口,类实现的应用程序编程接口,为开发人员提供了一组与各种设备进行交互的为开发人员提供了一组与各种设备进行交互的C+类。类。 应用程序GDI+打印机显示器文件18.1.1 GDI+概述GDI+是微软推出的新一代二维图形系统,是是微软推出的新一代二维图形系统,是Windows XP和和Windows Server 2003操作系统自带操作系统自带的图形接口。的图形接口。GDI是是Win

107、dows操作系统早期版本的图操作系统早期版本的图形接口。与形接口。与GDI相比,相比,GDI+的性能更优化,并添加了的性能更优化,并添加了许多新的功能。目前许多新的功能。目前GDI+已完全替代已完全替代GDI,是在,是在Windows窗口应用程序中以编程方式呈现图形的唯一窗口应用程序中以编程方式呈现图形的唯一一方法。一方法。18.1.1 GDI+概述GDI+按功能划分,可分为按功能划分,可分为3类:类:二维矢量图形绘制:使用二维矢量图形绘制:使用GDI+绘制矢量线条和形状。绘制矢量线条和形状。 GDI+提供了用于存储矢量图形信息的类,如提供了用于存储矢量图形信息的类,如Pen类,以及存类,以及

108、存储矢量图形绘制信息的类和实际绘制图形的类,如储矢量图形绘制信息的类和实际绘制图形的类,如Graphics类。类。图像处理:图像处理:GDI+提供了提供了Bitmap、Image等类用于显示、操等类用于显示、操作和保存作和保存BMP、JPG、GIF等格式的图像。等格式的图像。文字显示:使用文字显示:使用GDI+显示各种字体、字号和样式的文本。显示各种字体、字号和样式的文本。18.1.2 Graphics类Graphics类是所有绘图的基础,绘图之前都需要先类是所有绘图的基础,绘图之前都需要先创建创建 Graphics 对象,相当于在窗体中创建了一块对象,相当于在窗体中创建了一块画布,然后使用画

109、布,然后使用GDI+ 绘制线条和形状、呈现文本或绘制线条和形状、呈现文本或显示与操作图像。显示与操作图像。1创建创建Graphics对象,对象,3种方法如下。种方法如下。利用窗体或控件的利用窗体或控件的Paint事件中的事件中的PaintEventArgs方法:方法:为窗体或控件编写为窗体或控件编写Paint事件时,事件时,Graphics对象可以通过对象可以通过Paint事件中的事件中的PaintEventArgs方法来获取。方法来获取。private void Form1_Paint(object sender,System.Windows.Forms.PaintEventArgs e)

110、Graphics g=e.Graphics; 18.1.2 Graphics类利用窗体或某个控件的利用窗体或某个控件的CreateGraphics方法:当要在方法:当要在某窗体或控件上显示图形时,可利用某窗体或控件的某窗体或控件上显示图形时,可利用某窗体或控件的CreateGraphics方法获取对方法获取对Graphics对象的引用。对象的引用。Graphics g=this.CreateGraphics(); Graphics g1=button1.CreateGraphics(); /其中,其中,this代表某窗体,代表某窗体,button1代表代表Button按钮控件。按钮控件。由由I

111、mage类派生的任意对象创建图形对象:当需要更类派生的任意对象创建图形对象:当需要更改某个已经存在的图像时,可利用改某个已经存在的图像时,可利用Image类派生的任类派生的任意对象创建图形对象。意对象创建图形对象。Graphics对象。对象。Bitmap mybitmap=new Bitmap(1.jpg);Graphics g=Graphics.FromImage(mybitmap);注意,注意,Graphics对象使用完后,应当及时释放掉,否对象使用完后,应当及时释放掉,否则会占用内存资源。则会占用内存资源。 18.1.2 Graphics类2Graphics对象的属性对象的属性方法说明C

112、lear清除整个绘图面并以指定背景色填充DrawArc绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分DrawEllipse绘制一个由边框定义的椭圆DrawIcon在指定坐标处绘制由指定的Icon对象表示的图像DrawIconUnstretched绘制指定的Icon对象表示的图像,而不缩放该图像DrawImage在指定位置并且按原始大小绘制指定的Image对象DrawImageUnscaled在坐标对所指定的位置并且按其原始大小绘制指定的Image对象DrawLine绘制一条连接由坐标对指定的两个点的线段DrawLines绘制一系列连接一组Point结构的线段DrawPie绘制一个扇形

113、DrawPolygon绘制由一组Point结构定义的多边形DrawRectangle绘制由坐标对、宽度和高度指定的矩形DrawRectangles绘制一系列由Rectangle结构指定的矩形DrawString在指定位置绘制指定的文本字符串FillEllipse填充边框所定义的椭圆的内部FillPie填充指定的椭圆所定义的扇形区的内部FillPolygon填充Point结构指定的点数组所定义的多边形的内部FillRectangle填充由一对坐标、一个宽度和一个高度指定的矩形的内部FillPath填充GraphicsPath的内部18.1.2 Graphics类下列代码演示下列代码演示Graph

114、ics对象的应用对象的应用 private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics; g.Clear(Color.FromArgb(244,23,34); g.Dispose(); private void button1_Click(object sender, EventArgs e) Graphics a = button1.CreateGraphics(); a.Clear(Color.Red); g.Dispose(); 18.1.2 Graphics类18.1.3 画笔对象的

115、使用Graphics类对象相当于画布,而画笔就相当于绘图的笔,常用类对象相当于画布,而画笔就相当于绘图的笔,常用Pen类类来创建画笔对象绘制线、图形边缘,来创建画笔对象绘制线、图形边缘,Brush类来填充图形或一个封闭类来填充图形或一个封闭区域。区域。Pen类的常用属性为宽度、颜色和样式。宽度属性用于确定线条的宽类的常用属性为宽度、颜色和样式。宽度属性用于确定线条的宽度,以像素为单位;颜色属性用于确定线条的颜色;样式属性用于确度,以像素为单位;颜色属性用于确定线条的颜色;样式属性用于确定所绘制线条的线型,通常有实线(定所绘制线条的线型,通常有实线(Solid)、虚线()、虚线(Dash)、点线

116、)、点线(Dot)、点划线()、点划线(DashDot)、双点划线()、双点划线(DashDotDot)等。另)等。另外,在外,在C#中还可以通过属性设置画笔起点和终点的样式,通常在起中还可以通过属性设置画笔起点和终点的样式,通常在起点或终点加上箭头。点或终点加上箭头。 18.1.3 画笔对象的使用1创建画笔对象创建画笔对象 常用的常用的Pen类构造函数为:类构造函数为:public Pen(Color color) public Pen(Color color,float width) 例如:例如:Pen p =new Pen(Color.Red);注意,注意,Pen对象使用完毕后,应当被及

117、时释放掉,对象使用完毕后,应当被及时释放掉,否则会占据内存资源。否则会占据内存资源。18.1.3 画笔对象的使用2画笔对象的属性画笔对象的属性。可通过设置画笔的属性值来可通过设置画笔的属性值来使用画笔。使用画笔。名称说明Color设置画笔对象的颜色Width设置画笔的宽度EndCap获取画笔绘制的直线终点的样式StartCap设置画笔绘制的直线起点的样式DashStyle设置画笔绘制的虚线的线型18.1.3 画笔对象的使用下列代码演示下列代码演示Pen对象的应用。对象的应用。Graphics a = this.CreateGraphics();a.Clear(Color.Red);Pen p

118、= new Pen(Color.Blue, 5);p.DashStyle = DashStyle.DashDot; p.EndCap = LineCap.ArrowAnchor;a.DrawLine(p, 10, 30, 200, 30);p.Dispose();a.Dispose();18.1.4 画刷对象的使用画刷的功能与刷子画刷的功能与刷子类似,用于填充似,用于填充图形的内部。形的内部。C#中代表画刷的中代表画刷的类是是Brush类,该类为抽象抽象类,它不能被,它不能被实例化。若要例化。若要创建一个画刷建一个画刷对象,必象,必须使用从使用从Brush派生出的派生出的类来来创建画刷建画刷对

119、象。常用画刷派生象。常用画刷派生类如下。如下。SolidBrush类:单色画刷。色画刷。HatchBrush类:阴影画刷。:阴影画刷。TextureBrush类:纹理(理(图像)画刷。像)画刷。GradientBrush类:渐变画刷。画刷。注意,注意,Brush对象使用完后,象使用完后,应当及当及时释放掉,放掉,否否则会占用内存会占用内存资源。源。18.1.5 Bitmap类1创建创建Bitmap对象对象 Bitmap类的构造函数有多种重载形式,分别如下。类的构造函数有多种重载形式,分别如下。(1)从指定的现有图像建立)从指定的现有图像建立Bitmap对象。对象。 Bitmap bitmap1

120、=new Bitmap(pictureBox1.Image);(2)从指定的图像文件建立)从指定的图像文件建立Bitmap对象。对象。 Bitmap bitmap2=new Bitmap(“D:picturepicture.bmp”);(3)从现有的)从现有的Bitmap对象建立新的对象建立新的Bitmap对象,例如下列代码。对象,例如下列代码。 Bitmap bitmap3=new Bitmap(bit1);另外,另外,Bitmap类相当于一个图形容器,里面装载的对象即为图像,因类相当于一个图形容器,里面装载的对象即为图像,因此在编程时可以把此在编程时可以把Bitmap类的对象看作是一个图像

121、类的对象看作是一个图像 . pictureBox1.Image=bitmap1;18.1.5 Bitmap类1创建创建Bitmap对象对象 Bitmap类的构造函数有多种重载形式,分别如下。类的构造函数有多种重载形式,分别如下。(1)从指定的现有图像建立)从指定的现有图像建立Bitmap对象。对象。 Bitmap bitmap1=new Bitmap(pictureBox1.Image);(2)从指定的图像文件建立)从指定的图像文件建立Bitmap对象。对象。 Bitmap bitmap2=new Bitmap(“D:picturepicture.bmp”);(3)从现有的)从现有的Bitma

122、p对象建立新的对象建立新的Bitmap对象,例如下列代码。对象,例如下列代码。 Bitmap bitmap3=new Bitmap(bit1);另外,另外,Bitmap类相当于一个图形容器,里面装载的对象即为图像,因类相当于一个图形容器,里面装载的对象即为图像,因此在编程时可以把此在编程时可以把Bitmap类的对象看作是一个图像类的对象看作是一个图像 . pictureBox1.Image=bitmap1;18.1.5 Bitmap类2Bitmap类常用的属性类常用的属性属性说明Palette获取或设置应用于Image对象的调色板RawFormat获取Image对象的格式Size获取Image

123、对象的大小Width获取Image对象的宽度Height获取Image对象的高度18.1.5 Bitmap类2Bitmap类常用的方法类常用的方法 方法说明GetPxiel获取此Bitmap中指定像素的颜色GetType获取当前实例的TypeLockBits将Bitmap对象锁定到系统内存中MakeTransparent使默认的透明颜色对此Bitmap透明RotateFile将Image对象旋转、翻转或者同时旋转和翻转Image对象Save以指定的格式保存到指定的Stream对象SaveAdd将指定的Image对象中的信息添加到此Image对象中SetPixel设置Bitmap对象中指定像素的

124、颜色SetPropertyItem将指定的属性项设置为指定的值SetResolution设置此Bitmap的分辨率18.1.6 字体与文本2字体对象的属性字体对象的属性名称说明Bold指示是否为粗体Italic指示是否为斜体UnderLine指示是否带下划线Strikeout指示是否带删除线Style获取字形Size获取字号18.1.6 字体与文本3文本的绘制方法文本的绘制方法1 绘制文本使用绘制文本使用DrawString()方法,其重载形式有多种,这里只介绍其中方法,其重载形式有多种,这里只介绍其中一种,该方法的语法形式如下一种,该方法的语法形式如下:public void DrawStr

125、ing (String s, Font font, Brush brush, Rectangle rectangle);18.1.6 字体与文本在窗口上在窗口上输出字符串出字符串:private void button1_Click(object sender, EventArgs e) Graphics g = this.CreateGraphics(); SolidBrush b = new SolidBrush (Color.Red); Font f=new Font(华文行楷文行楷,26,FontStyle.Italic ); g.DrawString(输出文字出文字, f, b, n

126、ew Rectangle(50, 30, 200, 40); b.Dispose(); f.Dispose(); g.Dispose();18.2 基本图形的绘制1绘制点制点 绘制点使用制点使用Bitmap类的的SetPixel方法方法实现。其。其语法形式如下法形式如下: Public void SetPixel(int x,int y,Color color); 例如:例如: Bitmap myBitmap=new Bitmap(”1.jpg”); myBitmap.SetPixel(10,20,Color.Black); 上述代上述代码指示在指示在图像上的点像上的点(10,20)处,设置像

127、素的置像素的颜色色为黑色。黑色。18.2 基本图形的绘制2绘制直制直线绘制直制直线使用使用DrawLine方法方法实现,通常有如下两种构造方法,通常有如下两种构造方法: public void DrawLine(Pen pen,int x1,int y1,int x2,int y2); public void DrawLine(Pen pen,Point p1,Point p2); 其中,其中,x1、y1和和x2、y2分分别为起点和起点和终点的坐点的坐标值。p1和和p2分分别对应起点起点 和和终点。点。例如:例如: Graphics g=this.CreateGraphics(); Pen p

128、=new Pen(Color.Red,2); g.DrawLine(p,40,50,200,300);18.2 基本图形的绘制3绘制矩形制矩形使用使用DrawRectangle方法方法绘制矩形,其构造函数如下:制矩形,其构造函数如下: Public void DrawRectangle(Pen pen,int x,int y,int width,int height) 其中,其中,x、y为矩形左上角矩形左上角顶点的坐点的坐标,width为矩形的矩形的宽度,度,height为矩形矩形 的高度。的高度。例如:例如: Graphics g=this.CreateGraphics(); Pen pen

129、=new Pen(Color.Red,2); g.Clear(this.BackColor); g.DrawRectangle(pen,10,10,200,200);18.2 基本图形的绘制4绘制制椭圆5绘制制圆弧弧6绘制多制多边形形7绘制曲制曲线8画画贝塞塞尔曲曲线9绘制路径形成的制路径形成的图形形10填充填充图形形18.3 图像处理在在C#中中,GDI+可可以以显示示和和处理理多多种种文文件件类型型的的图像像,如如.bmp、.jpg、.gif、.wmf、.ico等等,本本节将将介介绍C#对这些些图像像文文件件的的基基本本处理理操操作作,如如图像像的的导入入导出出、放放大大缩小小以以及及色色

130、彩彩处理(包括分辨率和理(包括分辨率和对比度等)。比度等)。18.3.1 图像的基本操作1图像的像的导入入2图像的保存像的保存3复制与粘复制与粘贴18.3.2 图像的高级操作1平移、平移、缩放和旋放和旋转操作操作private void button1_Click(object sender, EventArgs e)Graphics g = this.CreateGraphics(); g.FillRectangle(new SolidBrush(Color.Red),120, 30, 200, 100); /椭圆g.RotateTransform(45.0f); /顺时针旋旋转45g.Fi

131、llRectangle(new SolidBrush(Color.Blue),120, 30, 200, 100); /水平方向向右平移水平方向向右平移200个像素,垂直方向向上平移个像素,垂直方向向上平移100个像素个像素g.TranslateTransform(200.0f, 100.0f);g.FillRectangle(new SolidBrush(Color.Green),120, 30, 200, 100);g.ScaleTransform(0.5f, 0.5f); /缩小到一半小到一半g.FillRectangle(new SolidBrush(Color.Yellow),120

132、, 30, 200, 100); g.Dispose(); 18.3.2 图像的高级操作2图像的分辨率像的分辨率处理理private void button1_Click(object sender, EventArgs e) Color c = new Color(); Bitmap b1 = new Bitmap(pictureBox1.Image); Bitmap b2 = new Bitmap(b1); int r, g, b, s, i, j, k1, k2, w, h; w = pictureBox1.Image.Width; h = pictureBox1.Image.Heigh

133、t; s = 8;/将将图片的每片的每8个像素分个像素分为一一组 for (i = 0; i w s; i += s) for (j = 0; j h s; j += s) c = b1.GetPixel(i, j);/获取像素取像素颜色色值 for (k1 = 0; k1 s 1; k1+) for (k2 = 0; k2 s 1; k2+) b2.SetPixel(i + k1, j + k2, c);/设置位置位图的新像素的新像素值 pictureBox2.Refresh(); pictureBox2.Image = b2; b1.Dispose(); b2.Dispose();18.3

134、.2 图像的高级操作3图像的像的对比度比度调整整private void button1_Click(object sender, EventArgs e) Color c1=new Color (); Bitmap bit1 = new Bitmap(pictureBox1.Image); Bitmap bit2 =new Bitmap(bit1); int i, j, h, w, r, g, b; w = bit1.Width; h = bit1.Height; for (i = 0; i w 1; i+) for (j = 0; j 128) r = 255; else r = 0; i

135、f (g 128) g = 255; else g = 0; if (b 128) b = 255; else b = 0; Color cc = Color.FromArgb(r, g, b); bit2.SetPixel(i, j, cc); pictureBox2 .Image =bit2; bit1.Dispose(); bit2.Dispose(); 18.4 小结本章主要介本章主要介绍了了C#中中图形形图像像处理的基理的基本知本知识。介介绍了了Graphics类、Bitmap类、Pen类、Brush类和字体和字体类的常用方法和定的常用方法和定义格式,格式,以便在不同的以便在不同的环

136、境下使用。境下使用。介介绍了常了常见基本几何基本几何图形的形的绘制,尤其制,尤其是相是相应参数的使用,参数的使用,这是是进行行绘图的基的基础。另外介另外介绍了了图像的几种常像的几种常见处理操作。理操作。第19章 在程序中访问数据库19.1 ADO.NET与与.NET19.2 ADO.NET与与ADO19.3 深入深入ADO.NET19.4 数据控件数据控件19.5 数据数据绑定控件定控件19.6 小小结19.1 ADO.NET与.NETADO.NET由微由微软公司推出,基于公司推出,基于.NET平台,平台,面向分布式,是以面向分布式,是以XML数据格式数据格式为核心的核心的一种数据一种数据库访

137、问技技术,其主要特点如下。,其主要特点如下。ADO.NET是是.NET框架中非常重要的一部分,框架中非常重要的一部分,且且ADO.NET必必须在在.NET框架支持下才能运行。框架支持下才能运行。XML是是ADO.NET的基的基础,即从数据源里,即从数据源里获取取的数据都是以的数据都是以XML格式保存。格式保存。ADO.NET的主要功能就是提供数据的主要功能就是提供数据访问类。19.1 ADO.NET与.NET ADO.NET体系体系结构构 19.2 ADO.NET与ADO19.2.1 ADO概述概述数据数据访问方式的方式的发展展阶段:段:ODBC(Open Database Connectiv

138、ity)OLEDB(Object Linking and Embedding Database)ADO(ActiveX Data Objects)ADO的常用的常用3个个对象如下。象如下。Connection对象象Command对象象Recordset对象象19.2.1 ADO概述典型的典型的ADO对象象编程步程步骤:连接到数据源。接到数据源。指定指定访问数据源的命令,可以同数据源的命令,可以同时指定指定变量参量参数,通常会涉及到数,通常会涉及到Command对象。象。执行命令,如果命令使数据按表中行的形式返行命令,如果命令使数据按表中行的形式返回,回,则将将这些数据存些数据存储在易于在易于检

139、查、操作或更、操作或更改的改的缓存存Recordset中。中。在适当情况下,可以通在适当情况下,可以通过修改修改缓存行的内容来存行的内容来更新数据源。更新数据源。结束操作,束操作,释放数据放数据连接接Connection和内存中和内存中的的缓存存Recordset,关,关闭操作命令操作命令Command。19.2.2 ADO.NET与ADO的关系ADO与与ADO.NET既相似也有区既相似也有区别,它,它们的相似之的相似之处是都是都能能够编写写对数据数据库服服务器中的数据器中的数据进行行访问和操作的和操作的应用用程序,并且易使用、高速度、低内存消耗且占用磁程序,并且易使用、高速度、低内存消耗且占

140、用磁盘空空间较少,支持建立基于客少,支持建立基于客户端端/服服务器和器和Web的的应用程序的用程序的功能。它功能。它们的主要区的主要区别如下。如下。ADO使用使用OLE DB接口并基于微接口并基于微软的的COM技技术,而,而ADO.NET拥有自己的有自己的ADO.NET接口并且基于微接口并且基于微软的的.NET体系架构。体系架构。ADO以以Recordset存存储,而,而ADO.NET则以以DataSet表示。表示。总之,由于之,由于ADO使用使用COM技技术,这就要求所使用的数据就要求所使用的数据类型必型必须符合符合COM规范,而范,而ADO.NET基于基于XML格式,格式,XML灵活多灵活

141、多变的基于文本的的基于文本的结构使得它能构使得它能够应用于相当广用于相当广泛的网泛的网络作作业,并且不需要再做,并且不需要再做COM编排排导致的数据致的数据类型型转换,从而提高了平台互用性和整体性能。,从而提高了平台互用性和整体性能。19.3 深入ADO.NET19.3.1 .NET数据提供程序数据提供程序.NET Framework数据提供程序用于数据提供程序用于连接接到数据到数据库、执行命令和行命令和检索索结果。果。.NET Framework提供了如下几个提供了如下几个.NET Framework数据提供程序。数据提供程序。OLE DB .NET Framework数据提供程序。数据提供

142、程序。SQL Server .NET Framework数据提供程序。数据提供程序。ODBC .NET Framework数据提供程序。数据提供程序。Oracle .NET Framework数据提供程序。数据提供程序。19.3.1 .NET数据提供程序.NET Framework数据提供程序提供了数据提供程序提供了4个核心类,个核心类,这这4个核心类其功能如下。个核心类其功能如下。Connection类:建立与特定数据源的连接。类:建立与特定数据源的连接。Command类:对数据源执行数据库命令,用于返回数类:对数据源执行数据库命令,用于返回数据、修改数据、运行存储过程以及发送或检索参数信据

143、、修改数据、运行存储过程以及发送或检索参数信息等。息等。DataReader类:从数据源中读取只向前的只读数据流,类:从数据源中读取只向前的只读数据流,它是一个简易的数据流。它是一个简易的数据流。DataAdapter类:用于将数据源的数据填充至类:用于将数据源的数据填充至DataSet数据集并解析更新数据集。可以说,数据集并解析更新数据集。可以说,DataAdpater类是类是.NET数据提供程序与数据提供程序与DataSet之间的一座桥梁。之间的一座桥梁。19.3.2 Connection类Connection类用于用于连接数据接数据库,也可使用,也可使用Command类,它会,它会隐含含

144、创建一个建一个Connection对象。象。在使用在使用Connection类时,一般可以使用无,一般可以使用无参数的构造函数参数的构造函数创建建Connection类实例,例,然后然后设置置ConnectionString属性,也可以属性,也可以直接使用直接使用带参数的构造函数参数的构造函数创建建Connection类实例。例。 19.3.2 Connection类示例:示例:使用无参数的构造函数来使用无参数的构造函数来创建建Connection对象,象,其其语法形式如下。法形式如下。string str = Data Source=localhost;Initial Catalog=boo

145、k;Persist Security Info=True;User ID=admin;Password=123; SqlConnection sqlcon = new SqlConnection();Sqlcon. ConnectionString= str;利用利用带参数的构造函数参数的构造函数创建建SqlConnection实例,例,其其语法形式如下。法形式如下。string str = Data Source=localhost;Initial Catalog=book;Persist Security Info=True;User ID=admin;Password=123; SqlC

146、onnection sqlcon = new SqlConnection(str);19.3.2 Connection类SqlConnection连接字符串中各接字符串中各项的意的意义如下。如下。Data Source:设置要置要连接的接的SQL Server实例所在的例所在的服服务器名或网器名或网络地址,地址,localhost表示本机。表示本机。Initial Catalog:设置要置要连接的数据接的数据库名。名。Persist Security Info:表示是否保存安全信息。:表示是否保存安全信息。User ID:设置数据置数据库访问者的姓名。者的姓名。PassWord:设置数据置数据

147、库访问者的密者的密码。Connection对象的常用方法如下。象的常用方法如下。Open()方法:建立数据方法:建立数据库连接。当接。当创建完建完Connection对象之后,象之后,应调用用Open()方法才能建立数据方法才能建立数据库连接。接。Close()方法:断开数据方法:断开数据库连接。当数据接。当数据库连接使用完接使用完毕后,后,应调用用Close()方法及方法及时断开数据断开数据库连接。接。19.3.3 Command类Command类用于完成用于完成对数据源的各种操作,包括数据源的各种操作,包括查询、插入、插入、删除、除、更新操作。可以使用更新操作。可以使用SQL语句来完成句来

148、完成这些操作。些操作。 示例:示例:使用无参数构造函数来使用无参数构造函数来创建建SqlCommand对象,例如下列代象,例如下列代码。SqlCommand command = new SqlCommand();command.CommandType = CommandType.Text;command.Connection=myconn;使用使用带参数构造函数参数构造函数创建建SqlCommand对象,参数象,参数为查询Sql语句,句,而且只能是而且只能是查询语句,例如下列代句,例如下列代码。string sqlstr = select * from book;SqlCommand comm

149、and = new SqlCommand(sqlstr);command.CommandType = CommandType.Text;command.Connection=myconn;使用使用带参数构造函数参数构造函数创建建SqlCommand对象,参数象,参数为查询Sql语句且句且只能是只能是查询语句和句和SqlConnection对象,例如下列代象,例如下列代码。string sqlstr = select * from book;SqlCommand command = new SqlComman 19.3.3 Command类Command对象的常用属性如下。象的常用属性如下。Co

150、mmandType属性:表示如何解属性:表示如何解释指令字符串,属性指令字符串,属性值为Text(SQL文本命令,默文本命令,默认)、)、StoredProcedure(存(存储过程)。程)。CommandText属性:当属性:当CommandType为Text时,CommandText为SQL语句;当句;当CommandType为StoredProcedure时,CommandText为存存储过程名称。程名称。Connection属性:表示属性:表示Command类使用的使用的Connection对象。象。Parameters属性:属性:该属性用于表示与属性用于表示与SqlCommand对象

151、相关象相关联的参数的集合。的参数的集合。Command对象的常用方法如下。象的常用方法如下。ExecuteReader方法:返回方法:返回DataReader对象,包含一个或多个象,包含一个或多个行。行。ExecuteNonQuery方法:方法:执行非行非查询的的SQL语句并返回受影响的句并返回受影响的行数。行数。ExecuteScalar方法:返回方法:返回结果集中第一行的第一列,常用于当果集中第一行的第一列,常用于当SQL语句句查询聚合聚合值时,返回聚合,返回聚合值,例如,例如查询某班的学生人数。某班的学生人数。19.3.3 Command类示例:示例: static void Main(

152、string args) string myConStr = Data Source=localhost;Initial Catalog=stuinfo;Persist Security Info=false;User ID=admin;Password=123; SqlConnection myCon = new SqlConnection(myConStr); myCon.Open(); string sql = insert into stutable values(03,王珊王珊,信息信息工程学院工程学院); SqlCommand myCom = new SqlCommand(sql,

153、 myCon); myCom.CommandType = CommandType.Text; myCom.ExecuteNonQuery(); myCon.Close(); 19.3.4 DataSet类DataSet是物理数据是物理数据库在本地内存中的表示形式,在本地内存中的表示形式,通通过使用数据集可以在无使用数据集可以在无连接的情况下接的情况下访问数据数据库。DataSet中包含的数据中包含的数据对象及其相互象及其相互间的关系:的关系:数据表(数据表(DataTable):数据源中的数据表在内存中的):数据源中的数据表在内存中的表示。表示。数据列(数据列(DataColumn):用于描述

154、):用于描述DataTable中的列中的列(记录)。)。数据行(数据行(DataRow):用于描述):用于描述DataTable中的行(中的行(记录)。)。表表间关系(关系(DataRelation):表示不同表中两列数据):表示不同表中两列数据间的关系(如主的关系(如主键与外与外键)。)。约束(束(Constraint):定):定义一些在一些在DataTable中添加和中添加和操作数据要遵守的操作数据要遵守的规则。19.3.4 DataSet类填充数据集填充数据集 调用用DataAdapter对象的象的Fill方法方法示例:示例:using System.Data.SqlClient;pri

155、vate void Form1_Load(object sender, EventArgs e)string Str = Data Source=localhost;Initial Catalog=book;Persist Security Info=false;User ID=admin;Password=123; string Sql = select * from information; SqlConnection sqlcon = new SqlConnection(Str); DataSet Mydata = new DataSet(); SqlDataAdapter Myadap

156、ter = new SqlDataAdapter(Sql, sqlcon); Myadapter.Fill(Mydata, information); sqlcon.Close(); 19.3.4 DataSet类访问数据集数据集格式格式1:数据集:数据集对象名象名.Tables数据表名数据表名.Rowsn列名列名 格式格式2:数据集:数据集对象名象名.Tables数据表名数据表名.Rowsn.ItemsArrayk更新数据集:更新数据集:对数据集的更新包括向数据表中添加一行数数据集的更新包括向数据表中添加一行数据、从数据表中据、从数据表中删除一行数据及修改数据表中的某一条除一行数据及修改数据

157、表中的某一条记录的列的列值。更新数据源更新数据源 :当更新数据集后,可以通:当更新数据集后,可以通过DataAdapter对象的象的Update()方法同步更新数据源。方法同步更新数据源。注意使用注意使用Update()方法更新数据源之前,需要方法更新数据源之前,需要设置置DataAdapter对象的命令属性,包括象的命令属性,包括InsertCommand、DeleteCommand和和UpdateCommand,有了,有了这些命令属性,些命令属性,DataAdapter对象的象的Update()方法才会有效,否方法才会有效,否则会会产生异常。生异常。DataReader类用于从数据源中用于

158、从数据源中检索只索只读、只只进的数据流,其最大的特点是的数据流,其最大的特点是DataReader对象以象以“基于基于连接接”的方式的方式访问数据数据库。 DataReader类的常用方法的常用方法 :Read、 NextResult、 Close、 GetName 、GetString、 GetValues 19.3.5 DataReade类示例:示例: static void Main(string args) string Str = Data Source= localhost;Initial Catalog=book;Persist Security Info=false;User

159、ID=admin;Password=123; SqlConnection Con = new SqlConnection(Str); string comStr = select 编号号,书名名 from information; SqlCommand Com = new SqlCommand(comStr, Con); Con.Open(); SqlDataReader rd = Com.ExecuteReader(); do Console.WriteLine(n); Console.WriteLine(t0ttt1, rd.GetName(0), rd.GetName(1); while

160、 (rd.Read() Console.WriteLine(t0tt1, rd.GetString(0), rd.GetString(1); while (rd.NextResult(); rd.Close(); Con.Close(); Console.Read(); 19.3.5 DataReade类DataAdapter类也称也称为数据适配器,是数据适配器,是DataSet和和数据源之数据源之间检索和保存数据的索和保存数据的桥梁,用于梁,用于处理理连接的接的细节。DataAdapter既既负责从数据从数据库中中检索索数据并填充数据集数据并填充数据集DataSet,又,又负责将数据集将数据

161、集DataSet中中对数据的更改回送到数据数据的更改回送到数据库。DataAdapter对象包含象包含4个常用属性,分个常用属性,分别为SelectCommand、InsertCommand、UpdateCommand、DeleteCommand。这4个个属性均属性均为Command对象,象,DataAdapter通通过上上述述4个属性来个属性来对数据数据库进行行查询、插入、更新和、插入、更新和删除操作。上述除操作。上述4种种对象初始象初始值均均为null,赋值后才后才能使用。能使用。19.3.6 DataAdapter类19.3.6 DataAdapter类示例:示例: static voi

162、d Main(string args) string Str = server=SISSQLEXPRESS;Initial Catalog=book;Persist Security Info=False;User ID=admin;Password=123; SqlConnection conn = new SqlConnection(Str); conn.Open(); string comStr = select * from information; SqlCommand comm = new SqlCommand(comStr, conn); SqlDataAdapter myDA

163、= new SqlDataAdapter(); myDA.SelectCommand = comm; DataSet myDS = new DataSet(); myDA.Fill(myDS, information); comm.CommandText=DELETE FROM information WHERE 编号号 = TP0003; myDA.DeleteCommand = comm; myDA.Fill(myDS, information); myDA.Update(myDS, information); conn.Close(); myDS.Dispose(); 19.3.7 AD

164、O.NET原理剖析ADO.NET的数据的数据访问策略有两种,一种是将数据策略有两种,一种是将数据记录缓存于数据集(存于数据集(Dataset)中;另一种是直接)中;另一种是直接访问数据数据库并并使用数据使用数据读取器(取器(DataReader)来)来读取数据取数据记录。使用使用ADO.NET开开发数据数据库应用程序的一般步用程序的一般步骤如下。如下。导入相入相应的命名空的命名空间。选择使用的数据源,即确定将使用的使用的数据源,即确定将使用的.NET Framework数据提供数据提供程序。程序。使用使用Connection对象建立与数据源的象建立与数据源的连接。接。使用使用Command对象

165、象执行行对数据源的操作命令,通常是数据源的操作命令,通常是SQL命令。命令。使用数据集使用数据集对获得的数据得的数据进行操作,需使用行操作,需使用DataReader、DataSet等等对象。象。使用各种数据控件向用使用各种数据控件向用户显示数据。示数据。19.4 数据控件19.4.1 常用的数据控件常用的数据控件DataSet控件:它是一个集合控件:它是一个集合对象,可以包含象,可以包含任意数量的表和任意数量的表和视图,还可以包含所有表的可以包含所有表的约束、索引、关系及存束、索引、关系及存储过程等。程等。BindingSource控件:主要用于控件:主要用于连接数据接数据库,通通过该控件,

166、可以将所有控件,可以将所有Windows窗体控件窗体控件绑定到数据源。定到数据源。BindingNavigator控件:控件:绑定数据源后,可以定数据源后,可以实现数据数据导航。航。DataGridView控件:主要用于控件:主要用于显示后台数据示后台数据库的数据,通常以的数据,通常以浏览表格表格显示示。19.4.2 数据源控件BindingSource控件其控件其实并不是真正并不是真正意意义上的数据源,而是窗体控件和数上的数据源,而是窗体控件和数据源之据源之间的的桥梁,其主要功能梁,其主要功能为将窗将窗体中的控件体中的控件绑定到数据源上。定到数据源上。 19.5 数据绑定控件19.5.1 数

167、据数据绑定控件概述定控件概述数据数据绑定就是使控件与数据源的数据定就是使控件与数据源的数据绑定在一起,便于数定在一起,便于数据据访问,而控件可以,而控件可以绑定到几乎所有包含数据的定到几乎所有包含数据的结构,且构,且可以通可以通过绑定的数据定的数据设置控件的任何属性。数据置控件的任何属性。数据绑定可分定可分为简单数据数据绑定和复定和复杂数据数据绑定。定。简单数据数据绑定指将一个控件定指将一个控件绑定到定到单个数据元素,通常个数据元素,通常绑定到数据定到数据库的某一个字段。支持的某一个字段。支持简单数据数据绑定的控件有定的控件有TextBox控件、控件、Label控件等只控件等只显示示单个个值的

168、控件。的控件。复复杂数据数据绑定指将一个控件定指将一个控件绑定到多个数据元素,通常定到多个数据元素,通常绑定到数据定到数据库中的多条中的多条记录,或,或绑定到多个其他任意定到多个其他任意类型的型的可可绑定数据元素。支持复定数据元素。支持复杂数据数据绑定的控件有定的控件有DataGirdView控件、控件、ListBox控件、控件、ComBox控件等可控件等可显示多个示多个值的控件,通常使用的是的控件,通常使用的是DataGridView控件。控件。19.5.2 简单绑定控件设置置简单数据数据绑定控件的方法非常定控件的方法非常简单,具体步,具体步骤如下。如下。确定已确定已经连接到相接到相应的数据

169、源。的数据源。在在.NET集成开集成开发环境中,把境中,把简单绑定控件拖定控件拖动到窗体到窗体上,如上,如TextBox控件。控件。在在该控件的控件的【属性属性】窗口中,展开窗口中,展开DataBinding属性,属性,选择相相应的属性。如果的属性。如果绑定定Text和和Tag属性,可以直接属性,可以直接选择。如果。如果绑定其他的属性,可以定其他的属性,可以单击Advanced属性属性后的省略号按后的省略号按钮,在,在弹出的出的【高高级数据数据绑定定】窗口中窗口中选择相相应的属性。的属性。单击要要绑定属性的下拉箭定属性的下拉箭头,在下拉列表框中展开要,在下拉列表框中展开要绑定的数据源,从中定的

170、数据源,从中选择某个数据元素。某个数据元素。19.5.3 复杂绑定控件DataGirdView控件能控件能够以网格的形式以网格的形式显示数据,同示数据,同时还可以完成数据的添加、可以完成数据的添加、删除和更改操作。通常除和更改操作。通常DataGirdView控件控件应包含如下功能。包含如下功能。可可显示和示和编辑来自多种不同来自多种不同类型数据源的表型数据源的表格数据。格数据。可将数据源列的名称自可将数据源列的名称自动作作为列列标头文本。文本。可用数据源的内容可用数据源的内容进行填充,行填充,可可为数据数据库表中的每个可表中的每个可见行行创建一行。建一行。用用户单击列列标头时,可自,可自动对

171、行行进行排序。行排序。19.6 小结本章首先介本章首先介绍了了ADO.NET的概念,并介的概念,并介绍了与了与ADO的区的区别,使,使读者能者能够更加深刻更加深刻地理解它地理解它们的概念。的概念。另外深入另外深入详细介介绍了了ADO.NET的相关知的相关知识,包括其中的几个常用的,包括其中的几个常用的类,从它,从它们的的属性和方法分属性和方法分别介介绍了其使用方法。了其使用方法。最后介最后介绍了如何使用了如何使用ADO.NET访问数据,数据,包括使用包括使用ADO.NET对象和象和ADO.NET控件,控件,简要介要介绍了数据了数据绑定和数据定和数据绑定控件。定控件。第20章 LINQ技术20.

172、1 概述概述20.2 基于基于LINQ的的简单查询20.3 标准准查询操作符操作符20.4 LINQ to SQL20.5 小小结20.1 概述概述LINQ提提供供了了一一种种类似似于于SQL的的轻量量级查询语法法,以以实现对底底层数数据据的的访问功功能能,可可以以查询由由高高级语言言构构造造的的类、方方法法和和事事件件等等,而而且且LINQ也也提提供供了了对数数据据库和和XML的的查询支持。支持。查询表表达达式式指指的的是是一一组指指令令,这些些指指令令描描述述要要从从一一个个或或多多个个指指定定数数据据源源检索索的的数数据据,以及返回的数据以及返回的数据应使用的格式。使用的格式。 20.2

173、 基于LINQ的简单查询20.2.1 简单LINQ查询所所有有LINQ查询操操作作都都由由3个个不不同同的的操操作作组成成,分分别是是获取取数数据据源源、创建建查询和和执行行查询。最基本的最基本的查询由关由关键字字form、where和和select组成。成。示例:示例: static void Main() int scores = new int 88,89,100,51,23,92, 81, 60 ; IEnumerable scoreQuery = from score in scores where score 70 select score; foreach (int i in s

174、coreQuery) Console.Write(i + ); 20.2.2 LINQ的用途LINQ不不仅可以用于可以用于检索数据,而且可以索数据,而且可以进行数据行数据转换。通。通过LINQ查询,可以将源序列用作,可以将源序列用作输入,入,以多种形式以多种形式创建新建新输出序列,具体方式如下。出序列,具体方式如下。将多个将多个输入序列合并到具有新入序列合并到具有新类型的型的单个个输出序列中。出序列中。创建其元素只包含源序列中元素的一个或几个属性的建其元素只包含源序列中元素的一个或几个属性的输出序列。出序列。创建其元素包含建其元素包含对源数据源数据执行的操作行的操作结果的果的输出序列。出序列。

175、创建不同格式的建不同格式的输出序列,例如可以将出序列,例如可以将SQL行或文本行或文本文件的数据文件的数据转换为XML。20.2.3 LINQ的推迟查询示例:示例:static void Main() List Cities = new List Shanghai, Beijing, Xiamen, Qingdao, Xian ; var CityWithS = from c in Cities where c.StartsWith(S) orderby c select c; Console.WriteLine(第一次第一次查询名称以名称以S起始的城市起始的城市); foreach (str

176、ing city in CityWithS) Console.WriteLine(city); Console.WriteLine(); Cities.Add(Shenzhen); Cities.Add(Shenyang); Console.WriteLine(第二次第二次查询名称以名称以S起始的城市起始的城市); foreach (string city in CityWithS) Console.WriteLine(city); 20.3 标准查询操作符where、orderby和和select是是LINQ较为常见的查较为常见的查询操作符询操作符 其他有:其他有:group by、 Cou

177、nt、Sum、Min、Max、Average、 Distinct、 join 。where子句子句 :使用:使用where子句,可以通过多个表子句,可以通过多个表达式限定过滤条件,表达式之间通过达式限定过滤条件,表达式之间通过“&”和和“|”来连接,表达式的结果类型必须是来连接,表达式的结果类型必须是bool型。型。orderby子句子句 :可以使用:可以使用orderby子句,按照其子句,按照其后的属性进行升序排列。如要对序列进行降序排后的属性进行升序排列。如要对序列进行降序排列,可以在语句后面添加列,可以在语句后面添加descending。20.3 标准查询操作符group by子句:如果

178、要根据一个子句:如果要根据一个值对查询结果果进行分行分组,可以使用,可以使用group by子句。子句。如果要如果要检索分索分组后的后的结果,可以使用果,可以使用into子子句。句。合合计操作符操作符 :诸如如Count()、Sum()、Min()、Max()、Average()的合的合计操作符不返回操作符不返回一个集合,而是返回一个一个集合,而是返回一个值。20.3 标准查询操作符Distinct运算符运算符负责从集合中从集合中删除重复的元除重复的元素。素。 join子句用于子句用于连接两个集合,接两个集合,查询表达式表达式语法法为joininon equals。 20.4 LINQ to

179、SQL20.4.1 LINQ to SQL简单应用用LINQ to SQL体系体系结构由构由3层组成,包括成,包括应用程序用程序层、LINQ to SQL层和和SQL Server数据数据库层。应用程序通用程序通过LINQ to SQL来来访问数据数据库,其,其访问的原理就是将数据的原理就是将数据库中中的表映射的表映射为一个一个类。20.4.1 LINQ to SQL简单应用简单应用为了使了使类能能够操作数据操作数据库,必,必须使用使用DataContext类建立与数据建立与数据库之之间的的连接,接,DataContext类用于从数据用于从数据库检索索对象和提交更象和提交更改的主要通道,它主要

180、改的主要通道,它主要负责如下功能。如下功能。将将C#语句中的句中的查询转换为SQL语句。句。执行行查询。管理数据管理数据库连接,接,这样开开发人人员就不必就不必编写写Connection对象,也不必关心象,也不必关心连接的打开和接的打开和释放放问题。例如下列代例如下列代码。string strconn = Data Source=localhost;Initial Catalog=stuinfo;Persist Security Info=false;User Id=admin;Password=123;DataContext db = new DataContext(strconn);20.

181、4.2 O/R设计器 除了手工除了手工编写代写代码使数据使数据库表映射成表映射成为实体体类,Visual Studio 2008还提供了一个提供了一个O/R设计器(器(对象关系象关系设计器)来将数据器)来将数据库中中的表映射成的表映射成实体体类。 20.4.3 使用LINQ to SQL类访问数据库修改操作修改操作:在通在通过DataContext对象修改数据象修改数据库时,需要需要调用用DataContext对象的象的SubmitChanges()方法,方法,该方法方法负责将所有修改同步至数据将所有修改同步至数据库中。中。删除操作除操作:在通在通过DataContext删除数据除数据库的某些

182、的某些数据数据时,需要,需要调用用Table对象的象的DeleteOnSubmit()方法和方法和DataContext对象的象的SubmitChanges()方法。其中,方法。其中,DeleteOnSubmit()方法方法负责将将Table对象中某些象中某些记录的状的状态设置置为删除状除状态,SubmitChanges()方法方法负责将将Table中修改同步至数据中修改同步至数据库中。中。20.4.3 使用LINQ to SQL类访问数据库添加操作添加操作:在通在通过DataContext向数据向数据库添添加数据加数据时,需要,需要调用用Table对象的象的InsertOnSubmit()方

183、法和方法和DataContext对象的象的SubmitChanges()方法。其中,方法。其中,InsertOnSubmit()方法方法负责将将记录添加至添加至Table对象中,象中,SubmitChanges()方法方法负责将将Table中所中所发生的修改同步生的修改同步至数据至数据库中。中。20.5 小结本章重点介本章重点介绍了了LINQ to Objects和和LINQ to SQL。通。通过本章的学本章的学习,可以了解,可以了解LINQ的的强大功能,即大功能,即简化化查询,且,且针对不同的底不同的底层数据源均采用数据源均采用统一的一的查询语法,法,使开使开发人人员可以从繁可以从繁琐的技的技术细节中解脱中解脱出来,更加关注出来,更加关注项目的目的逻辑。尤其是。尤其是LINQ to SQL的出的出现,大大降低了数据,大大降低了数据库应用程序的开用程序的开发门槛,大大提高了数据,大大提高了数据库应用程序的开用程序的开发效率。效率。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号