收藏 分享(赏)

C#窗体编程.doc

上传人:jinchen 文档编号:7209553 上传时间:2019-05-10 格式:DOC 页数:52 大小:1.18MB
下载 相关 举报
C#窗体编程.doc_第1页
第1页 / 共52页
C#窗体编程.doc_第2页
第2页 / 共52页
C#窗体编程.doc_第3页
第3页 / 共52页
C#窗体编程.doc_第4页
第4页 / 共52页
C#窗体编程.doc_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、1第 11 章 C# 窗体编程Windows 窗体(Form,形状/表单)原来是 Visual Basic 程序的用户界面,后来成为.NET 程序的 GUI,被 Visual Studio 中的 C#、Visual Basic、J#、MC+和 C+/CLI 等开发语言工具所使用,后来又被 Visual C+ 2005 引入到 MFC 编程中。作为应用程序的基本单元,窗体实质上只是一个(类似于对话框的)简单框架窗口,内含一块空白板。开发人员可通过添加控件(包括菜单条、工具条、状态条、计时器和公用对话框等)来创建用户界面,并通过编写代码来操作数据,从而填充这个空白板。为此,Visual Studi

2、o 提供了一个有助于编写代码的集成开发环境,以及一个针对.NET 框架编程的丰富的控件集。通过使用代码来补充这些控件的功能,可以方便快捷地开发所需要的解决方案。由于时间有限,本章只介绍 C# 的窗体编程。相关帮助的位置:(先选“未筛选”作为“筛选依据”的选项,然后再定位) 窗体编程:“目录开发工具和语言 Visual Studio 文档基于 Windows 的应用程序、组件和服务创建基于 Windows 的应用程序Windows 窗体(Windows Forms) ” 用 C# 创建 .NET 窗体程序: “目录开发工具和语言Visual Studio 文档Visual C# 用 Visual

3、 C# 编写应用程序创建 Windows 窗体应用程序” .NET 类库:“目录.NET 开发.NET Framework 编程类库参考”中的System、 System.Windows.Forms 和 System.Drawing 等命名空间下面是在窗体编程需要用到的一些.NET 类型的继承关系图:FormContainerControlScrollableControlControlComponentMarshalByRefObjectObject用户窗体类ToolStrip PanelMenuStripToolStripItemToolStripButton ToolStripDropD

4、ownItemToolStripMenuItemGraphicsImagePenBrushSolidBrushTextureBrushValueTypeColor PointFFontRectangleFSizeFHatchBrushBitmap ColorDialogCommonDialogFontDialogPrintDialogFileDialogPageSetupDialogFolderBrowserDialogConsole String Delegate EventStructPathGradientBrush LinearGradientBrushButtonBaseCheckB

5、ox ButtonMathStatusStripRadioButtonComboBoxListControlGroupBoxLabelListBox PictureBoxTextBoxBaseTimerTextBoxApplicationOpenFileDialogSaveFileDialogMessageBox图 11-1 常用.NET 类型的层次结构(颜色标明类型所在的命名空间)黑色:System、红色: System.Windows.Forms、绿色:System.Drawing、2蓝色:System.Drawing.Drawing2D、褐色:System.ComponentModel1

6、1.1 创建窗体下面我们以一个简单的窗体交互绘图程序 FormDraw 为例(参见图 11-2) ,介绍用 C# 编写简单窗体程序的全过程。图 11-2 交互式窗体绘图程序1创建窗体项目打开“新建项目”对话框(参见图 11-3) ,选左边“项目类型”栏的“其他语言Visual C#”项,再选右边“模板”栏的 “Windows 应用程序”模板。选择磁盘卷和父目录位置后,输入项目名称“FormDraw ”, 去选“创建解决方案的目录 ”复选框,按“确定”钮关闭对话框。3图 11-3 新建项目对话框1)项目目录和文件Visual Studio 会自动创建名为 FormDraw 的项目目录,在项目目录

7、中,自动创建的文件有:项目文件FormDraw.sln(解决方案)和 FormDraw.csproj(C# 项目) ,代码文件Program.cs(程序入口) 、Form1.cs(窗体编程)和 Form1.Designer.cs(窗体设计) 。项目目录还自动包含存放项目的目标代码的 obj 目录和可执行程序的 bin 目录,这两个目录中都可包含 Debug 和/ 或 Realse 目录,分别存放具体的调试版和/或发行版的二进制程序代码。项目目录还自动包含了一个存放项目属性的 Proporties 目录,包含如下文件:Settings.settings(项目设置,XML 文件) 、Resourc

8、es.resx(资源) 、AssemblyInfo.cs(程序集代码)和 Resources.Designer.cs(资源设计代码) 。IDE 会自动打开一个缺省的名为“Form1”的空白窗体(Form1.cs设计 ) ,并打开对应的“工具箱”窗口,供程序员进行窗体设计。参见图 11-4。4图 11-4 C# 窗体编程界面2)代码文件内容自动生成的程序代码,定义了一个与项目同名的命名空间,还定义了用户的应用程序类 Program(基类为缺省的 System.Object)和派生的窗体类 Form1(基类为System.Windows.Forms.Form,参见图 11-5) ,后者被定义在两个

9、同名的部分类(分别位于Form1.cs 和 Form1.Designer.cs 者两个代码文件)中。 Program.cs自动生成的 Program.cs 代码为:using System;using System.Collections.Generic;using System.Windows.Forms;namespace FormDrawstatic class Program/ / 应用程序的主入口点。/ STAThreadstatic void Main()FormContainerControlScrollableControlControlComponentMarshalByRe

10、fObjectForm1Object图 11-5 Form1 及其各级基类5Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1();该文件中的代码主要是定义了 Program 类,它包含 Main 入口主程序。Main 方法中最重要的语句为:Application.Run(new Form1();它创建窗体 Form1 对象,并以其为程序界面(主框架窗口)来运行本窗体应用程序。 Form1.cs代码文件 Form1.cs 包

11、含了窗体部分类 Form1 的一部分定义,用于程序员编写事件处理代码,也是我们今后工作的主要对象。可以在“解决方案资源管理器”页中,选中“Form1.cs”项后,按鼠标右键,在弹出的浮动菜单中选“查看代码(C)”菜单项,来以远代码方式打开该文件。下面是该文件的初始代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespa

12、ce FormDrawpublic partial class Form1 : Formpublic Form1()InitializeComponent(); Form1.Designer.cs代码文件 Form1.Designer.cs 包含了窗体部分类 Form1 的另一部分定义,用于存放系统自动生成的窗体设计代码。下面是该文件的初始代码:namespace FormDrawpartial class Form1/ / 必需的设计器变量。/ private System.ComponentModel.IContainer components = null;6/ / 清理所有正在使用的资

13、源。/ / 如果应释放托管资源,为 true;否则为 false。protected override void Dispose(bool disposing)if (disposing base.Dispose(disposing);#region Windows 窗体设计器生成的代码/ / 设计器支持所需的方法 - 不要/ 使用代码编辑器修改此方法的内容。/ private void InitializeComponent()ponents = new System.ComponentModel.Container();this.AutoScaleMode = System.Windows

14、.Forms.AutoScaleMode.Font;this.Text = “Form1“;#endregion3)Application 类密封类 Application 也位于 System.Windows.Forms.Form 命名空间中,直接派生于System.Object。下面是它的定义:public sealed class ApplicationApplication 类具有用于启动和停止应用程序和线程、启用可视界面、以及处理Windows 消息的方法,如下所示: Run 在当前线程上启动应用程序消息循环,并可以选择使某窗体可见。常用的重载版为:public static voi

15、d Run (Form mainForm) Exit 或 ExitThread 停止消息循环。常用的重载版为:public static void Exit () EnableVisualStyles 此方法为应用程序启用可视样式。如果控件和操作系统支7持视觉样式,则控件将以视觉样式进行绘制。若要使 EnableVisualStyles 生效,必须在应用程序中创建任何控件之前调用它;EnableVisualStyles 通常是 Main 函数的第一行。当调用 EnableVisualStyles 时,无需单独的清单即可启用可视化样式。语法为:public static void EnableV

16、isualStyles () SetCompatibleTextRenderingDefault 该方法用于设置兼容文本的缺省表示方式。语法为:public static void SetCompatibleTextRenderingDefault (bool defaultValue) DoEvents 在您的程序处于某个循环中时处理消息。 AddMessageFilter 向应用程序消息泵添加消息筛选器来监视 Windows 消息。 IMessageFilter 使您可以阻止引发某事件或在调用某事件处理程序前执行特殊操作。该类还具有用于获取或设置当前线程的区域性信息的 CurrentCul

17、tur 和 CurrentInputLanguage 属性。不能创建此类的实例(密封类) 。2修改窗体属性窗体的属性有很多(参见图 11-6) ,其中常用的有: 布局:大小 Size缺省为 300*300 像素,可以通过修改此属性,或直接拖动窗体的边框来改变窗体的尺寸。运行时用户也可以自己改变窗体大小。8图 11-6 窗体属性 窗口样式:图标 Icon缺省为 ,可以通过为点击该属性条目右端浏览钮,装入新的图标文件(32*32 像素,*.ico) 。也可以自己通过为项目添加新建图标项,来创建新图标资源,如 FormDraw.ico ,缺省位于项目目录中。参见图 11-7。 (注意:不知为什么,更

18、换图标在编辑状态可以,但是在运行状态不听话)?9(a) 添加新项对话框(b) 缺省的新图标 (c) 自己设计的图标图 11-7 添加新的图标项 设计:名称(Name)相当于 MFC 中的 ID,对应于窗体的类名。缺省为Form1(似 VB) ,可以改成自己喜欢的名称,如 DrawForm,回车确认后,系统会自动修改所有相关内容中的该标识符。 外观:背景色 BackColor缺省为系统的控件色 Control(一般为黄灰色,与对话框的背景色相同) ,可以点击该属性右端的下三角按钮,选择自己喜欢的颜色,如“自定义”页上的白色。参见图 11-8。图 11-8 设置窗体的背景色 外观:背景图片 Bac

19、kgroundImage缺省无,可以自己为窗体添加背景图。并10通过 BackgroundImageLayout 属性,来设置图片的填充方式(缺省为 Tile 平铺,还可以选择中心 Center、伸展 Stretch 和缩放 Zoom) 。 外观:光标 Cursor缺省为 Default(箭头 Arrow) 。可以选十字 Cross,参见图11-9。 外观:文本 Text对应于窗体的标题,缺省也为 Form1,可以改为自己喜欢的标题,如“窗体绘图” 。结果窗体如图 11-10 所示。图 11-9 可选光标 图 11-10 窗体外观3添加菜单缺省的窗体是一个空框架窗口,既没有菜单,也没有工具条和

20、状态条。但是我们可以利用工具箱,通过拖放,直观地为窗体添加这些控件(系统会自动为项目添加对应的用户派生类) ,然后再交互式地编辑和修改它们。1)添加菜单条选中“Form1.cs设计”页,打开“工具箱”窗口,展开 “菜单和工具栏”项,里面有菜单条(MenuStrip) 、工具条( ToolStrip)和状态条(StatusStrip)等控件,参见图 11-11。它们都是 C# 2.0 新增加的控件类,分别用来替换老版本中的 MainMenu、ToolBar 和StatusBar 等控件类,参见图 11-12。为了兼容性,2.0 版中仍然保留了这些老版本中的类,但是建议在编程中使用新的控件类。11

21、图 11-11 工具箱窗口ScrollableControlControlComponentMarshalByRefObjectObjectToolStripMenuStrip StatusStripStatusBarToolBarMainMenuMenu图 11-12 新老菜单条、工具条和状态条控件类及其基类选中“工具箱”窗口的“菜单和工具栏”中的“MenuStrip”项,拖放到窗体中,系统则会自动为窗体添加一个停靠在在标题条下的菜单条,参见图 11-13。并在Form1.Designer.cs 文件的部分窗体类定义的“Windows 窗体设计器生成的代码”区域后自动添加如下一行代码,来定义

22、该菜单条所对应的菜单条类的实例对象 menuStrip1:private System.Windows.Forms.MenuStrip menuStrip1;可以通过菜单条“属性”窗口中“设计”栏中的名称属性“(Name)”来修改该对象的变量名称,如 mainMenuStrip,回车确认后,系统会自动修改项目中的所有相关部分的代码。122)添加菜单项可以像在 MFC 中一样,为菜单条添加菜单项和访问键它们都是 ToolStripMenuItem 类(参见图 11-17)的实例对象,缺省的对象名为:菜单项名+访问键字母+ToolStripMenuItem你也可以修改此对象名,如改为 open。1

23、4ComponentMarshalByRefObjectObjectToolStripItemToolStripButtonToolStripDropDownItemToolStripMenuItemToolStripSeparator ToolStripLabelToolStripStatusLabel图 11-17 菜单项、按钮、状态标签和分隔符类及其基类3)添加菜单响应选中菜单项,选择“属性”窗口的事件 页,在“操作”栏的“Click”属性中,输入响应方法的名称,如 OnFileOpen。回车确认后,系统会自动在 Form1.cs 文件中的窗体部分类定义中,添加带空方法体的事件处理方法。

24、例如:private void OnFileOpen (object sender, EventArgs e)可以添加自己的处理代码,如打开文件公用对话框,获取用户选择的(带路径的)文件名。这需要先将工具箱窗口的“对话框”栏中的“OpenFileDialog”控件,拖放到窗体。系统会自动为窗体类添加对应的实例对象,缺省的名称为 openFileDialog1:private System.Windows.Forms.OpenFileDialog openFileDialog1;可以属性窗口顶部的下拉式列表中,选择 openFileDialog1 项,在属性页中修改“设计”栏的“(Name)”

25、属性的值,达到修改该对象名的目的,如改成 openFileDlg。则可以编写打开公用文件对话框的代码如下:private void OnFileOpen(object sender, EventArgs e)if (openFileDlg.ShowDialog() = DialogResult.OK) string fn = openFileDlg.FileName;类似地,你也可以为“新建”菜单项,添加 OnFileNew 事件处理方法,并在其中使用MessageBox 类的 Show 静态方法来显示一个弹出式消息对话框。例如:private void OnFileNew(object se

26、nder, EventArgs e)MessageBox.Show(“创建新文档!“);154)MessageBox 类MessageBox 类是 System.Object 类的直接派生类,位于 System.Windows.Forms 命名空间中。其 Show 静态方法的常用重载格式有:public static DialogResult Show (string text) / 无标题public static DialogResult Show (string text, string caption) / 含“确定”按钮public static DialogResult Show

27、(string text, string caption, MessageBoxButtons buttons)其中,MessageBoxButtons 枚举类型,也位于 System.Windows.Forms 命名空间中。包含如下枚举成员:成员名称 说明AbortRetryIgnore 消息框包含“中止” 、“ 重试”和“忽略”按钮。 OK 消息框包含“确定” 按钮。 OKCancel 消息框包含“确定” 和“ 取消”按钮。 RetryCancel 消息框包含“重试” 和“ 取消”按钮。 YesNo 消息框包含“是” 和“ 否”按钮。 YesNoCancel 消息框包含“是” 、“ 否”和

28、“取消”按钮。 例如:MessageBox.Show(“创建新文档!“);MessageBox.Show(“创建新文档!“, “ 提示信息“);MessageBox.Show(“创建新文档?“, “ 请选择“, MessageBoxButtons.YesNo );输出结果如图 11-18:图 11-18 MessageBox 的不同 Show 重载方法的输出5)添加退出菜单项缺省的窗体,是利用关闭窗口来退出应用程序。我们也可以为窗体的“文件”菜单,添加“退出”或“关闭”菜单项,利用应用程序类的 Exit 静态方法,来退出正在运行的应用程序。具体做法是: 在现有的文件菜单项后,添加一个分隔符。参

29、见图 11-19(a)。16(a)添加分隔符 (b)添加退出菜单项图 11-19 添加分隔符和退出菜单项 添加退出菜单项:(参见图 11-19(b)) 设置其菜单名或其“外观”栏的“Text”属性的值为“退出(方法的代码为:private void OnExit(object sender, EventArgs e)Application.Exit();4添加工具条与按钮为窗体添加工具条及其按钮的方法与添加菜单条和菜单项的类似。1)添加工具条选中“Form1.cs设计”页,打开“工具箱”窗口,展开 “菜单和工具栏”项,将“ToolStrip”项,拖放到窗体中,系统则会自动为窗体添加一个停靠在在

30、菜单条下的工具条,参见图 11-20(a)。并在 Form1.Designer.cs 文件中自动添加定义该工具条所对应的工具条类的实例对象 toolStrip1:private System.Windows.Forms.ToolStrip toolStrip1;它是 ToolStrip 类(参见图 11-12)的实例对象。也可以通过工具条的“属性”窗口中“设计”栏中的名称属性“(Name)”来修改该对象的变量名称,如 toolStrip。回车确认后,系统也会自动修改项目中的所有相关部分的代码。17(a)添加工具条 (b)添加按钮图 11-20 添加工具条与按钮2)添加按钮利用工具条的添加新项的

31、下拉式列表,可以为工具条添加多种成员(参见图 11-20(b)) ,常用的是按钮与分隔符(ToolStripSeparator 类的对象,参见图 11-17) 。新添加按钮时,系统也会在 Form1.Designer.cs 文件中自动添加一个对应的按钮对象:private System.Windows.Forms.ToolStripButton toolStripButton1;它们都是 ToolStripButton 类(参见图 11-17)的实例对象,缺省的对象名为:toolStripButton i。你也可以修改此对象名,如改为 openButton。缺省的按钮图片为 System.Dr

32、awing.Bitmap ,可以通过“属性”窗口“外观”栏中的“Image”属性或直接在按钮上按鼠标右键,在弹出的浮动菜单中选“设置图像(M).”菜单项,来修改(装入或创建)按钮图片,具体方法与为菜单项添加图片类似。最好采用与对应菜单项相同的图片。你还可以利用“属性”窗口“外观”栏中的“Text”属性或“行为”栏中的“ToolTipText”属性,为按钮添加鼠标滑过时的文本提示串(缺省为“toolStripButton i” ) ,如“打开文件” 。3)添加按钮响应为工具条上的按钮添加消息响应的方法与为菜单条添加菜单项响应的方法类似:选中按钮,选择“属性”窗口的事件 页,在“操作”栏的“Cli

33、ck”属性中,利用该属性项右端的下拉式列表,选择对应菜单项的响应方法名,如 OnFileOpen,一般不需要输入和创建新的消息响应方法。184)动态修改按钮颜色一个设置颜色的按钮,可以让它随着用户选择的颜色而改变。我们的做法是去掉按钮的图片,动态修改其背景色属性。具体步骤为: 在工具条中添加按钮,修改其“(Name)”属性(对象名)为“setColButton” 。 将其“Image”属性改为“(无) ”。 在窗体类 DrawForm 的构造函数中,设置其背景色属性为初始颜色。如:public DrawForm()InitializeComponent();setColButton.BackC

34、olor = col; / col 为类变量,初值为 Color.Green 在用户选择新的颜色,设置其背景色属性为当前颜色。如:private void OnSetCol(object sender, EventArgs e)setColDlg.Color = col;if (setColDlg.ShowDialog() = DialogResult.OK)col = setColDlg.Color;setColButton.BackColor = col;5添加状态条和状态标签可以为窗体添加状态条,然后再为状态条添加状态标签等成员,用于显示提示信息和各种状态数据,如当前鼠标位置等。1)添加

35、状态条选中“Form1.cs设计”页,打开“工具箱”窗口,展开 “菜单和工具栏”项,将“StatusStrip”项,拖放到窗体中,系统则会自动为窗体添加一个停靠在在窗口底部的状态条,参见图 11-21。并在 Form1.Designer.cs 文件中自动添加定义该状态条所对应的状态条类的实例对象 statusStrip1:private System.Windows.Forms.StatusStrip statusStrip1;它是 StatusStrip 类(参见图 11-12)的实例对象。也可以通过工具条的“属性”窗口中“设计”栏中的名称属性“(Name)”来修改该对象的变量名称,如 st

36、atusStrip。19图 11-21 添加状态条 图 11-22 状态条成员与拆分按钮成员2)添加状态标签可以添加到状态条中的成员(参见图 11-22(a))有状态标签(StatusLabel) 、进度条(ProgressBar) 、下拉式按钮( DropDownButton)和拆分按钮(SplitButton) ,其中的拆分按钮又含有若干成员,参见图 11-22(b)。常用的是状态标签,它可以用于显示提示信息和各种状态数据,如当前鼠标位置等。为状态条添加状态标签时,系统会在 Form1.Designer.cs 文件中自动添加一个对应的状态标签对象:private System.Window

37、s.Forms.ToolStripStatusLabel toolStripStatusLabel1;它是 ToolStripStatusLabel 类(参见图 11-17)的实例对象。可以为状态标签设置各种相关的属性,还可以在程序的运行过程中,动态修改这些属性的属性值。3)显示提示信息为了显示菜单项和工具条按钮等的提示信息,可以在状态条上添加一个状态标签。在对应的“属性”窗口中,进行如下修改: 修改其“设计”栏“(Name)”属性(对象名)为 promptLabel(缺省为toolStripStatusLabel1) 。 修改其“外观”栏的“BackColor”属性值为“系统”列表中的“Co

38、ntrol” (缺省与窗体背景色相同,如为“Web”中的“White” ) 。 修改其“外观”栏的“Text”属性值为“就绪” (缺省为“toolStripStatusLabel1” ) 。 修改其“外观”栏的“TextAlign”属性值(参见图 11-23)为“MiddleLeft” (缺省为“MiddleCenter” ) 。 修改其“外观”栏的“Spring” (弹性)属性值为“true” (缺省为 false) 。最后一20个属性为 true 时,该标签会自动伸缩,始终充满状态条的剩余空间。修改前的样子和修改后的结果参见图 11-24。图 11-23 设置文本对齐属性值 图 11-24

39、 添加显示提示信息用的状态标签与 MFC 不同,C# 窗体中的状态条并不能自动显示菜单项和工具条按钮的提示信息,而必须自己写代码来完成该任务。例如,可以为打开菜单和按钮添加同一个“MouseHover(鼠标盘旋) ” 事件(即鼠标在对应菜单项或按钮上停留一段时间后所触发的事件)的事件处理方法OnFileOpenMouseHover,并为该方法添加设置提示标签文本属性值的语句:private void OnFileOpenMouseHover(object sender, EventArgs e)promptLabel.Text = “打开文档文件“;当然,你也可以通过为菜单项或按钮添加鼠标进入

40、(MouseEnter )或鼠标单击(Click)等事件的处理方法,来显示提示信息。为了在鼠标离开菜单项或按钮后,还原“就绪”信息,可以添加对鼠标离开(MouseLeave )事件的处理方法。例如:private void OnFileOpenMouseLeave(object sender, EventArgs e)promptLabel.Text = “就绪“;4)显示鼠标位置信息为状态条分别依次添加名为 xLable、xValueLable、yLable 和 yValueLable 的标签(需修改“设计”栏的“(Name) ”属性值) ,修改其“外观”栏的“BackColor”属性值为“

41、系统”列表中的“Control” (缺省与窗体背景色相同,如为 “Web”中的“White” ) ,将它们“外观”栏“Text”属性的值分别改为“x: ”、 “0000”、 “y:”和“0000” ,再将其中的xValueLable 和 yValueLable 标签的“行为”栏的“AutoSize ”属性值改为“false ”,使其大小固定。为了美观,还可以在 yLabel 标签之前,插入一个“Text ”属性值为单个空格符的标签,将其背景色,也改为“Control” 。参见图 11-25。图 11-25 添加显示鼠标位置信息的诸状态标签为窗体的“MouseMove ”事件添加名为 “OnMo

42、useMove”的事件处理方法如下:private void OnMouseMove(object sender, MouseEventArgs e)21xValueLabel.Text = e.X.ToString();yValueLabel.Text = e.Y.ToString();运行结果如图 11-26 所示。图 11-26 显示鼠标位置信息如果你仔细观察,就会发现一个奇怪的现象,客户区最顶端的 y 坐标,并不是 0 而是49。这是因为,窗体客户区中还包含了位于其顶端的菜单条和工具条,它们各自高 24 个像素,加起来刚好 48 像素。我们将在下一节来解决这个问题。11.2 绘图窗体采

43、用 GDI+绘图,.NET 将 GDI+的绘图功能主要封装在 System.Drawing 和System.Drawing.Drawing2D 两个命名空间中。前者封装了 GDI+的常用功能,后者则封装了GDI+的高级功能。参见图 11-27。MarshalByRefObjectObjectGraphicsImage BrushPenSolidBrush TextureBrushValueTypeColor PointFFontRectangleFSizeF HatchBrushBitmapStructPathGradientBrush LinearGradientBrushGraphicsP

44、athRegionFontFamilyMetafileEventArgs MouseEventArgs图 11-27 GDI+中的常用类型及其基类(颜色标明类型所在的命名空间)黑色:System、绿色:System.Drawing、蓝色:System.Drawing.Drawing2D、褐色:System.Drawing.Imaging221画板与图形对象在窗体中,一般是利用 GDI+的图形对象,在镶嵌于窗体空白客户区中的画板上绘图。1)画板为了使绘图区域是去掉菜单条、工具条、状态条和滚动条等内容后的窗体空白客户区,我们可以为窗体绘图添加一个 Panel(画板/ 面板/镶嵌板)控件,并使该控件

45、充满空白客户区。具体做法是: 选中“Form1.cs设计”页,打开“工具箱”窗口,展开 “容器”项(参见图 11-28) ,将 Panel 容器拖入窗体(参见图 11-30) 。系统会自动创建一个画板对象panel1,可以更名为 drawPanel:private System.Windows.Forms.Panel drawPanel; 设置其“布局”栏的“Dock” (停泊)属性为 Fill(充满) (缺省为 None) ,参见图 11-29。 设置其“外观”栏的“BackColor”属性为“White” (缺省同窗体客户区) ,参见图 11-31。因为此时,窗体的客户区被画板覆盖,所以原

46、来我们为窗体编写的鼠标移动事件处理方法,现在已经不起作用。解决办法是,将选择窗体的 OnMouseMove 方法,也选为画板的“MouseMove ”事件的处理方法。图 11-28 工具箱中的容器种类 图 11-29 设置画板的停泊属性为 Fill23图 11-30 将画板容器拖入窗体 图 11-31 设置停泊和背景色属性后的画板 2)图形类.NET 的图形类及其他各种相关类、结构、枚举等类型,都与 GDI+中的同名。里面的常量、方法、枚举值也几乎完全相同。所以,有了前面的第 5 章的 GDI+基础,现在在.NET 的窗体中绘图,那就是小菜一碟了。.NET 的图形类 Graphics,位于 S

47、ystem.Drawing 命名空间中。参见图 11-27。为了在窗体或画板中绘图,必须先创建对应的图形对象。这可以使用它们从 Control 类继承下来的CreateGraphics 方法:public Graphics CreateGraphics ()例如:Graphics graph = drawPanel.CreateGraphics();有了图形对象,我们就可以使用图形类中各种绘图方法了。例如:graph.DrawLine(pen, x0, y0, e.X, e.Y);graph.DrawRectangle(pen, l, t, w, h);graph.FillRectangle(

48、brush, l, t, w, h);graph.DrawEllipse(pen, l, t, w, h);graph.FillEllipse(brush, l, t, w, h);3)辅助类与结构与 GDI+一样,.NET 中也有 Pen(笔类) ,Brush(虚拟 刷类) 、SoildBrush(实心刷类)、HatchBrush( 条纹刷类) 、TextureBrush(纹理刷类) 、LinearGradientBrush(线性渐变刷类) 、PathGradientBrush(路径渐变刷类) ,Color(颜色结构) 、PointF(浮点点结构) 、SizeF( 浮点 大小结构)和 Rec

49、tangleF(浮点 矩形结构 )等绘图辅助类型。例如:Color col = Color.Green;/ Color color(255, 100, 255); / Error!Pen grayPen = new Pen(Color.Gray, 1), greenPen = new Pen(Color.Green, 3);SolidBrush greenBrush = new SolidBrush(Color.Green);24与 GDI+的 C+封装不同的是,这里的颜色不再是类,而是结构,而且 Color 结构没有构造函数。为了从 RGB 值来创建 Color 对象,必须使用 Color 的公共静态方法FromArgb:public static Color FromArgb (int argb) / argb 为 32 位的颜

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报