ImageVerifierCode 换一换
格式:DOCX , 页数:69 ,大小:1.03MB ,
资源ID:17180476      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17180476.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(18窗体编程.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

18窗体编程.docx

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

2、助于编写代码的集成开发环境,以及一个针对.NET框架编程的丰富的控件集。通过使用代码来补充这些控件的功能,可以方便快捷地开发所需要的解决方案。由于时间有限,本章只介绍C# 窗体编程一些基本内容。相关帮助文档的位置: 窗体编程:“库主页Visual Studio 2010Visual Studio 创建基于Windows的应用程序Windows 窗体”。 .NET类库:“库主页Visual Studio 2010.NET Framework类库”中的System、System.Windows.Forms和System.Drawing等命名空间。图18-1是在窗体编程需要用到的一些.NET类型的继

3、承关系图,涉及的命名空间主要有System.Windows.Forms、System.Drawing和System.Drawing.Drawing2D。18.1 创建窗体下面我们以一个简单的窗体交互绘图程序FormDraw为例(参见图18-2),介绍用C# 编写简单窗体程序的全过程。18.1.1 创建窗体项目打开“新建项目”对话框(参见图18-3),选左边“已安装的模板”栏的“其他语言Visual C#”项,再选中间栏的“Windows窗体应用程序”模板。选择父目录位置后,输入项目名称“FormDraw”,去选“为解决方案创建目录”复选框,按“确定”钮关闭对话框。图18-1 窗体编程中常用.N

4、ET类型的层次结构字体和颜色标明类型所在的命名空间,正常:System、粗体:System.Windows.Forms、斜体:System.Drawing、粗斜体:System.Drawing.Drawing2D、灰色:System.ComponentModel图18-2 交互式窗体绘图程序图18-3 新建项目对话框1项目目录和文件Visual Studio会自动创建名为FormDraw的项目目录,在项目目录中,自动创建的文件有:项目文件FormDraw.sln(解决方案)和FormDraw.csproj(C# 项目),代码文件Program.cs(程序入口)、Form1.cs(窗体编程)和F

5、orm1.Designer.cs(窗体设计)。项目目录还自动包含存放项目的目标代码的obj目录和可执行程序的bin目录,这两个目录中都可包含Debug和/或Realse目录,分别存放具体的调试版和/或发行版的二进制程序代码。项目目录还自动包含了一个存放项目属性的Proporties目录,包含如下文件:Settings.settings(项目设置,XML文件)、Resources.resx(资源)、AssemblyInfo.cs(程序集代码)和Resources.Designer.cs(资源设计代码)。2用户界面与工具箱IDE会自动打开一个默认的名为“Form1”的空白窗体(Form1.cs设计

6、),并打开对应的“工具箱”窗口,供程序员进行窗体设计,参见图18-4。图18-4 C# 窗体编程界面窗体设计所用的工具箱内容丰富,除了VB动力包(Visual Basic PowerPacks)栏(5种)、“报表”栏(1种)和“WPF互操作性”栏(1种)的工具外,其余所有可用的工具位于“所有Windows窗体”栏中(只是缺少了“数据”栏中VS2010新增加的“图表”工具),共有66种。其下各栏将这些工具分门别类地列出,包括:“公共控件”(21种)、“容器”(6种)、“菜单和工具栏”(5种)、“数据”(5种)、“组件”(14种)、“打印”(5种)和“对话框”(5种),共计62种,参见图18-5。

7、只有DomainUpDown(域上下)、PropertyGrid(属性网格)、Splitter(拆分条)、HScrollBar(水平滚动条)、VScrollBar(垂直滚动条)和TrackBar(跟踪条)这5种工具没有包含在这些分类栏中。另外,在窗体编程中,工具栏的“对话框编辑器”栏和“常规”栏为空。3代码文件内容图18-6 Form1及其各级基类自动生成的程序代码,定义了一个与项目同名的命名空间,还定义了用户的应用程序类Program(基类为默认的System.Object)和派生的窗体类Form1(基类为System.Windows. Forms.Form,参见图18-6),后者被定义在两

8、个同名的部分类(分别位于Form1.cs和Form1.Designer.cs者两个代码文件)中。 a) 公共控件、容器 b) 菜单和工具栏、数据、组件 c) 打印、对话框、WPF互操作性、报表、VB动力包 图18-5 窗体工具箱1)Program.cs自动生成的Program.cs代码为:using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;namespace FormDraw static class Program / / 应用程序的主入口点。 / STAThre

9、ad static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1(); 该文件中的代码主要是定义了Program类,它包含Main入口主程序。Main方法中最重要的语句为:Application.Run(new Form1();它创建窗体Form1对象,并以其为程序界面(主框架窗口)来运行窗体应用程序。2)Form1.cs代码文件Form1.cs包含了窗体部分类Form1的一部分定义,用于程

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

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

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

13、del.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Text = Form1; #endregion 4Application类密封类Application也位于System.Windows.Forms.Form命名空间中,直接派生于System.Object。下面是它的定义:public sealed class ApplicationApplication类具有用于启动和停止应用程序和线程、启用可视界面、以及处理Windows消息的方法,如下所示: Run 在当前线程上启动应

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

15、即可启用可视化样式。语法为:public static void EnableVisualStyles ()。 SetCompatibleTextRenderingDefault 该方法用于设置兼容文本的默认表示方式。语法为:public static void SetCompatibleTextRenderingDefault (bool defaultValue) DoEvents 在您的程序处于某个循环中时处理消息。 AddMessageFilter 向应用程序消息泵添加消息筛选器来监视 Windows 消息。 IMessageFilter 使您可以阻止引发某事件或在调用某事件处理程序前

16、执行特殊操作。该类还具有用于获取或设置当前线程的区域性信息的CurrentCultur和CurrentInputLanguage 属性。不能从此类派生新类(密封类)。18.1.2 修改窗体属性窗体的属性有很多(参见图18-7),其中常用的有: 布局:大小Size默认为300*300像素,可以通过修改此属性,或直接拖动窗体的边框来改变窗体的尺寸。运行时用户也可以自己改变窗体大小。 窗口样式:图标Icon默认为,可以通过为点击该属性条目右端浏览钮,装入新的图标文件(16*16和32*32像素,*.ico)。也可以自己通过为项目添加新建图标项,来创建新图标资源,如FormDraw.ico (默认位于

17、项目所在目录)。可以通过“项目添加新项”菜单项(或按对应的快捷键Ctrl+Shift+A)来完成,参见图18-8和9。然后,在窗体设计界面所对应的属性窗口中,将“窗口样式”栏的图标项“Icon”右边的图案,通过其右端的浏览钮来更换。图18-7 窗体属性 设计:名称(Name)相当于MFC中的ID,对应于窗体的类名。默认为Form1(似VB),可以改成自己喜欢的名称,如DrawForm,回车确认后,系统会自动修改所有相关内容中的该标识符。 图18-10 设置窗体的背景色外观:背景色BackColor默认为系统的控件色Control(一般为黄灰色,与对话框的背景色相同),可以点击该属性右端的下三角

18、按钮,选择自己喜欢的颜色,如“自定义”页上的白色。参见图18-10。 外观:背景图片BackgroundImage默认无,可以自己为窗体添加背景图。并通过BackgroundImageLayout属性,来设置图片的填充方式(默认为Tile平铺,还可以选择中心Center、伸展Stretch和缩放Zoom)。图18-8 添加新项对话框 a) 默认的新图标 b) 自己设计的图标图18-9 添加新的图标项 外观:光标Cursor默认为Default(箭头Arrow)。可以选十字Cross,参见图18-11。 外观:文本Text对应于窗体的标题,默认也为Form1,可以改为自己喜欢的标题,如“窗体绘图

19、”。结果窗体如图18-12所示。1添加菜单条与MFC会自动为应用程序编程生成和添加菜单条、工具条和状态条不同,Visual C# 为窗体程序自动生成的只是一个简单的空白框架窗口,菜单条、工具条和状态条等都需要我们自己手工来添加。选中“Form1.cs设计”页,打开“工具箱”窗口,展开“菜单和工具栏”项,里面有菜单条(MenuStrip)、工具条(ToolStrip)和状态条(StatusStrip)等控件,参见图18-5 b)。它们都是C# 2.0新增加的控件类,分别用来替换老版本中的MainMenu、ToolBar和StatusBar等控件类,参见图18-13。为了兼容性,2.0版中仍然保留

20、了这些老版本中的类,但是建议在编程中使用新的控件类。 图18-11 可选光标 图18-12 窗体外观 图18-13 新老菜单条、工具条和状态条控件类及其基类选中“工具箱”窗口的“菜单和工具栏”中的“MenuStrip”项,拖放到窗体中,系统则会自动为窗体添加一个停靠在标题条下的菜单条,参见图18-14。并在Form1.Designer.cs 文件的部分窗体类定义的“Windows 窗体设计器生成的代码”区域后自动添加如下一行代码,来定义该菜单条所对应的菜单条类的实例对象menuStrip1:private System.Windows.Forms.MenuStrip menuStrip1;可以

21、通过菜单条“属性”窗口中“设计”栏中的名称属性“(Name)”来修改该对象的变量名称,如mainMenuStrip,回车确认后,系统会自动修改项目中的所有相关部分的代码。2添加菜单项可以像在MFC中一样,为菜单条添加菜单项和访问键&X,参见图18-14 a)。但是添加快捷键(shortcut key)、设置选中(checked)状态、添加图片、添加提示串等,C# 都比MFC方便,可以直接利用属性窗口,直观交互式地完成。在菜单条中 ,除了添加菜单项外,你还可以利用下拉式列表来为菜单条添加分隔符(ToolStripSeparator类的对象,参见图18-18)、文本框和组合框,参见图18-14 b

22、)。 a) 添加菜单项和访问键 b) 添加分隔条、文本框和组合框图18-14 添加菜单条成员 图18-15 设置快捷键可以通过在属性窗口底部的“杂项”栏中的“ShortcutKeys”项来设置快捷键(参见图18-15),按回车键完成。注意,设置快捷键后,系统会自动地将它作为默认串显示在菜单项的右端,不需要(也不支持)自己在菜单项自己编写诸如“tCtrl+N”的显式串。但是可以在属性窗口的“外观”栏的“ShortcutKeyDisplayString”属性中,输入自己的显示串,来代替默认的串。只有在该属性值为空时,系统才会显示默认的快捷键串。在C# 的窗体编程中,为菜单项添加小图片是非常容易的。

23、只需在属性窗口的“外观”栏的“Image”属性中,单击右端的浏览钮,在弹出的对话框中,按“导入”钮,在弹出的“打开”对话框中,选择要装入图片资源即可,参见图18-16。与图标一样,你也可以自己创建位图资源(12*11像素,*.bmp)后再选入,参见图18-17。一般还需要为图片设置透明色,这可以通过属性窗口的“外观”栏中的“ImageTransparentColor”属性来进行,方法与前面设置窗体背景色类似。你也可以选中菜单项后,直接按鼠标右键,在弹出的浮动菜单中,选“设置图像(M).”菜单项,来设置该菜单项的图片。注意,MFC会为应用程序自动生成包含“新建”、“打开”等常用按钮的工具条位图文

24、件Toolbar.bmp。但是在Visual C# 的窗体编程中,得我们自己来创建和添加这些位图。不过,你也可以从VS安装目录的“Samples1033”子目录的压缩文件“VC2010Samples.zip”的“C+/Language/General/scribble/Images/”子目录中获得。图18-16 选择菜单项图片图18-17 添加位图资源新项对话框图18-18 菜单项、按钮、状态标签和分隔符类及其基类你还可以利用“属性”窗口的“行为”栏中的“ToolTipText”属性,为菜单项添加鼠标滑过时的文本提示串。每当你为窗体添加一个菜单项,系统就会自动添加一个对应的菜单项对象(似添加菜

25、单条),如打开菜单项的对象定义为:private System.Windows.Forms.ToolStripMenuItem 打开OToolStripMenuItem;它们都是ToolStripMenuItem类(参见图18-18)的实例对象,默认的对象名为:菜单项名+访问键字母+ToolStripMenuItem,如上面的“打开OToolStripMenuItem”。你也可以修改此对象名,如改为open。3添加菜单响应选中菜单项,选择“属性”窗口的事件页,在“操作”栏的“Click”属性中,键入响应方法的名称,如OnFileOpen。回车确认后,系统会自动在Form1.cs文件中的窗体部分

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

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

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

29、lt Show (string text, string caption, MessageBoxButtons buttons)其中,MessageBoxButtons枚举类型,也位于System.Windows.Forms命名空间中,包含表18-1列出的诸枚举成员。表18-1 枚举类型MessageBoxButtons的成员成员名称说明AbortRetryIgnore消息框包含“中止”、“重试”和“忽略”按钮。OK消息框包含“确定”按钮。OKCancel消息框包含“确定”和“取消”按钮。RetryCancel消息框包含“重试”和“取消”按钮。YesNo消息框包含“是”和“否”按钮。YesNo

30、Cancel消息框包含“是”、“否”和“取消”按钮。例如(参见图18-19):MessageBox.Show(创建新文档!);MessageBox.Show(创建新文档!, 提示信息);MessageBox.Show(创建新文档?, 请选择, MessageBoxButtons.YesNo); 图18-19 MessageBox的不同Show重载方法的输出5添加退出菜单项默认的窗体,是利用关闭窗口来退出应用程序。我们也可以为窗体的“文件”菜单,添加“退出”或“关闭”菜单项,利用应用程序类的Exit静态方法,来退出正在运行的应用程序。具体做法是: 在现有的文件菜单项后,添加一个分隔符,参见图18-20 a)。 a) 添加分隔符 b) 添加退出菜单项图18-20 添加分隔符和退出菜单项 添加退出菜单项(参见图18-20 b)): 设置其菜单名或其“外观”栏的“Text”属性的值为“退出(&X)”。 设置其“杂项”栏“ShortcutKeys”属性的值为Alt+F4。 设置其“设计”栏“

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1