18窗体编程.docx

上传人:b****2 文档编号:17180476 上传时间:2023-04-24 格式:DOCX 页数:69 大小:1.03MB
下载 相关 举报
18窗体编程.docx_第1页
第1页 / 共69页
18窗体编程.docx_第2页
第2页 / 共69页
18窗体编程.docx_第3页
第3页 / 共69页
18窗体编程.docx_第4页
第4页 / 共69页
18窗体编程.docx_第5页
第5页 / 共69页
点击查看更多>>
下载资源
资源描述

18窗体编程.docx

《18窗体编程.docx》由会员分享,可在线阅读,更多相关《18窗体编程.docx(69页珍藏版)》请在冰豆网上搜索。

18窗体编程.docx

18窗体编程

第18章窗体编程

Windows窗体(Form,形状/表单)原来是VisualBasic程序的用户界面,后来成为.NET程序的GUI,被VisualStudio中的C#、VisualBasic、F#、MC++和C++/CLI等开发语言工具所使用,后来又从VisualC++2005起被引入到MFC编程中。

作为应用程序的基本单元,窗体实质上只是一个(类似于对话框的)简单框架窗口,内含一块空白板(客户区)。

开发人员可通过添加控件(包括菜单条、工具条、状态条、计时器和公用对话框等)来创建用户界面,并通过编写代码来操作数据,从而填充这个空白板。

为此,VisualStudio提供了一个有助于编写代码的集成开发环境,以及一个针对.NET框架编程的丰富的控件集。

通过使用代码来补充这些控件的功能,可以方便快捷地开发所需要的解决方案。

由于时间有限,本章只介绍C#窗体编程一些基本内容。

相关帮助文档的位置:

●窗体编程:

“库主页\VisualStudio2010\VisualStudio\创建基于Windows的应用程序\Windows窗体”。

●.NET类库:

“库主页\VisualStudio2010\.NETFramework类库”中的System、System.Windows.Forms和System.Drawing等命名空间。

图18-1是在窗体编程需要用到的一些.NET类型的继承关系图,涉及的命名空间主要有System.Windows.Forms、System.Drawing和System.Drawing.Drawing2D。

18.1创建窗体

下面我们以一个简单的窗体交互绘图程序FormDraw为例(参见图18-2),介绍用C#编写简单窗体程序的全过程。

18.1.1创建窗体项目

打开“新建项目”对话框(参见图18-3),选左边“已安装的模板”栏的“其他语言\VisualC#”项,再选中间栏的“Windows窗体应用程序”模板。

选择父目录位置后,输入项目名称“FormDraw”,去选“为解决方案创建目录”复选框,按“确定”钮关闭对话框。

图18-1窗体编程中常用.NET类型的层次结构

字体和颜色标明类型所在的命名空间,正常:

System、粗体:

System.Windows.Forms、

斜体:

System.Drawing、粗斜体:

System.Drawing.Drawing2D、灰色:

System.ComponentModel

图18-2交互式窗体绘图程序

图18-3新建项目对话框

1.项目目录和文件

VisualStudio会自动创建名为FormDraw的项目目录,在项目目录中,自动创建的文件有:

项目文件——FormDraw.sln(解决方案)和FormDraw.csproj(C#项目),代码文件——Program.cs(程序入口)、Form1.cs(窗体编程)和Form1.Designer.cs(窗体设计)。

项目目录还自动包含存放项目的目标代码的obj目录和可执行程序的bin目录,这两个目录中都可包含Debug和/或Realse目录,分别存放具体的调试版和/或发行版的二进制程序代码。

项目目录还自动包含了一个存放项目属性的Proporties目录,包含如下文件:

Settings.settings(项目设置,XML文件)、Resources.resx(资源)、AssemblyInfo.cs(程序集代码)和Resources.Designer.cs(资源设计代码)。

2.用户界面与工具箱

IDE会自动打开一个默认的名为“Form1”的空白窗体(Form1.cs[设计]),并打开对应的“工具箱”窗口,供程序员进行窗体设计,参见图18-4。

图18-4C#窗体编程界面

窗体设计所用的工具箱内容丰富,除了VB动力包(VisualBasicPowerPacks)栏(5种)、“报表”栏(1种)和“WPF互操作性”栏(1种)的工具外,其余所有可用的工具位于“所有Windows窗体”栏中(只是缺少了“数据”栏中VS2010新增加的“图表”工具),共有66种。

其下各栏将这些工具分门别类地列出,包括:

“公共控件”(21种)、“容器”(6种)、“菜单和工具栏”(5种)、“数据”(5种)、“组件”(14种)、“打印”(5种)和“对话框”(5种),共计62种,参见图18-5。

只有DomainUpDown(域上下)、PropertyGrid(属性网格)、Splitter(拆分条)、HScrollBar(水平滚动条)、VScrollBar(垂直滚动条)和TrackBar(跟踪条)这5种工具没有包含在这些分类栏中。

另外,在窗体编程中,工具栏的“对话框编辑器”栏和“常规”栏为空。

3.代码文件内容

图18-6Form1及其各级基类

自动生成的程序代码,定义了一个与项目同名的命名空间,还定义了用户的应用程序类Program(基类为默认的System.Object)和派生的窗体类Form1(基类为System.Windows.Forms.Form,参见图18-6),后者被定义在两个同名的部分类(分别位于Form1.cs和Form1.Designer.cs者两个代码文件)中。

a)公共控件、容器b)菜单和工具栏、数据、组件c)打印、对话框、WPF互操作性、

报表、VB动力包

图18-5窗体工具箱

1)Program.cs

自动生成的Program.cs代码为:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Windows.Forms;

namespaceFormDraw

{

staticclassProgram

{

///

///应用程序的主入口点。

///

[STAThread]

staticvoidMain()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(newForm1());

}

}

}

该文件中的代码主要是定义了Program类,它包含Main入口主程序。

Main方法中最重要的语句为:

Application.Run(newForm1());

它创建窗体Form1对象,并以其为程序界面(主框架窗口)来运行窗体应用程序。

2)Form1.cs

代码文件Form1.cs包含了窗体部分类Form1的一部分定义,用于程序员编写事件处理代码,也是我们今后工作的主要对象。

可以在“解决方案资源管理器”页中,选中“Form1.cs”项后,按鼠标右键,在弹出的浮动菜单中选“查看代码(C)”菜单项,来以源代码方式打开该文件。

下面是该文件的初始代码:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

namespaceFormDraw

{

publicpartialclassForm1:

Form

{

publicForm1()

{

InitializeComponent();

}

}

}

3)Form1.Designer.cs

代码文件Form1.Designer.cs包含了窗体部分类Form1的另一部分定义,用于存放系统自动生成的窗体设计代码。

下面是该文件的初始代码:

namespaceFormDraw

{

partialclassForm1

{

///

///必需的设计器变量。

///

privateSystem.ComponentModel.IContainercomponents=null;

///

///清理所有正在使用的资源。

///

///如果应释放托管资源,为true;否则为false。

protectedoverridevoidDispose(booldisposing)

{

if(disposing&&(components!

=null))

{

components.Dispose();

}

base.Dispose(disposing);

}

#regionWindows窗体设计器生成的代码

///

///设计器支持所需的方法-不要

///使用代码编辑器修改此方法的内容。

///

privatevoidInitializeComponent()

{

ponents=

newSystem.ComponentModel.Container();

this.AutoScaleMode=

System.Windows.Forms.AutoScaleMode.Font;

this.Text="Form1";

}

#endregion

}

}

4.Application类

密封类Application也位于System.Windows.Forms.Form命名空间中,直接派生于System.Object。

下面是它的定义:

publicsealedclassApplication

Application类具有用于启动和停止应用程序和线程、启用可视界面、以及处理Windows消息的方法,如下所示:

●Run——在当前线程上启动应用程序消息循环,并可以选择使某窗体可见。

常用的重载版为:

publicstaticvoidRun(FormmainForm)。

●Exit或ExitThread——停止消息循环。

常用的重载版为:

publicstaticvoidExit()。

●EnableVisualStyles——此方法为应用程序启用可视样式。

如果控件和操作系统支持视觉样式,则控件将以视觉样式进行绘制。

若要使EnableVisualStyles生效,必须在应用程序中创建任何控件之前调用它;EnableVisualStyles通常是Main函数的第一行。

当调用EnableVisualStyles时,无需单独的清单即可启用可视化样式。

语法为:

publicstaticvoidEnableVisualStyles()。

●SetCompatibleTextRenderingDefault——该方法用于设置兼容文本的默认表示方式。

语法为:

publicstaticvoidSetCompatibleTextRenderingDefault(booldefaultValue)

●DoEvents——在您的程序处于某个循环中时处理消息。

●AddMessageFilter——向应用程序消息泵添加消息筛选器来监视Windows消息。

●IMessageFilter——使您可以阻止引发某事件或在调用某事件处理程序前执行特殊操作。

该类还具有用于获取或设置当前线程的区域性信息的CurrentCultur和CurrentInputLanguage属性。

不能从此类派生新类(密封类)。

18.1.2修改窗体属性

窗体的属性有很多(参见图18-7),其中常用的有:

●布局:

大小Size——默认为300*300像素,可以通过修改此属性,或直接拖动窗体的边框来改变窗体的尺寸。

运行时用户也可以自己改变窗体大小。

●窗口样式:

图标Icon——默认为

,可以通过为点击该属性条目右端浏览钮,装入新的图标文件(16*16和32*32像素,*.ico)。

也可以自己通过为项目添加新建图标项,来创建新图标资源,如FormDraw.ico

(默认位于项目所在目录)。

可以通过“项目\添加新项”菜单项(或按对应的快捷键Ctrl+Shift+A)来完成,参见图18-8和9。

然后,在窗体设计界面所对应的属性窗口中,将“窗口样式”栏的图标项“Icon”右边的图案,通过其右端的浏览钮

来更换。

图18-7窗体属性

设计:

名称(Name)——相当于MFC中的ID,对应于窗体的类名。

默认为Form1(似VB),可以改成自己喜欢的名称,如DrawForm,回车确认后,系统会自动修改所有相关内容中的该标识符。

图18-10设置窗体的背景色

外观:

背景色BackColor——默认为系统的控件色Control(一般为黄灰色,与对话框的背景色相同),可以点击该属性右端的下三角按钮,选择自己喜欢的颜色,如“自定义”页上的白色。

参见图18-10。

●外观:

背景图片BackgroundImage——默认无,可以自己为窗体添加背景图。

并通过BackgroundImageLayout属性,来设置图片的填充方式(默认为Tile平铺,还可以选择中心Center、伸展Stretch和缩放Zoom)。

图18-8添加新项对话框

a)默认的新图标b)自己设计的图标

图18-9添加新的图标项

●外观:

光标Cursor——默认为Default(箭头Arrow)。

可以选十字Cross,参见图18-11。

●外观:

文本Text——对应于窗体的标题,默认也为Form1,可以改为自己喜欢的标题,如“窗体绘图”。

结果窗体如图18-12所示。

1.添加菜单条

与MFC会自动为应用程序编程生成和添加菜单条、工具条和状态条不同,VisualC#为窗体程序自动生成的只是一个简单的空白框架窗口,菜单条、工具条和状态条等都需要我们自己手工来添加。

选中“Form1.cs[设计]”页,打开“工具箱”窗口,展开“菜单和工具栏”项,里面有菜单条(MenuStrip)、工具条(ToolStrip)和状态条(StatusStrip)等控件,参见图18-5b)。

它们都是C#2.0新增加的控件类,分别用来替换老版本中的MainMenu、ToolBar和StatusBar等控件类,参见图18-13。

为了兼容性,2.0版中仍然保留了这些老版本中的类,但是建议在编程中使用新的控件类。

图18-11可选光标图18-12窗体外观

图18-13新老菜单条、工具条和状态条控件类及其基类

选中“工具箱”窗口的“菜单和工具栏”中的“MenuStrip”项,拖放到窗体中,系统则会自动为窗体添加一个停靠在标题条下的菜单条,参见图18-14。

并在Form1.Designer.cs文件的部分窗体类定义的“Windows窗体设计器生成的代码”区域后自动添加如下一行代码,来定义该菜单条所对应的菜单条类的实例对象menuStrip1:

privateSystem.Windows.Forms.MenuStripmenuStrip1;

可以通过菜单条“属性”窗口中“设计”栏中的名称属性“(Name)”来修改该对象的变量名称,如mainMenuStrip,回车确认后,系统会自动修改项目中的所有相关部分的代码。

2.添加菜单项

可以像在MFC中一样,为菜单条添加菜单项和访问键&X,参见图18-14a)。

但是添加快捷键(shortcutkey)、设置选中(checked)状态、添加图片、添加提示串等,C#都比MFC方便,可以直接利用属性窗口,直观交互式地完成。

在菜单条中,除了添加菜单项外,你还可以利用下拉式列表来为菜单条添加分隔符(ToolStripSeparator类的对象,参见图18-18)、文本框和组合框,参见图18-14b)。

a)添加菜单项和访问键b)添加分隔条、文本框和组合框

图18-14添加菜单条成员图18-15设置快捷键

可以通过在属性窗口底部的“杂项”栏中的“ShortcutKeys”项来设置快捷键(参见图18-15),按回车键完成。

注意,设置快捷键后,系统会自动地将它作为默认串显示在菜单项的右端,不需要(也不支持)自己在菜单项自己编写诸如“\tCtrl+N”的显式串。

但是可以在属性窗口的“外观”栏的“ShortcutKeyDisplayString”属性中,输入自己的显示串,来代替默认的串。

只有在该属性值为空时,系统才会显示默认的快捷键串。

在C#的窗体编程中,为菜单项添加小图片是非常容易的。

只需在属性窗口的“外观”栏的“Image”属性中,单击右端的浏览钮,在弹出的对话框中,按“导入”钮,在弹出的“打开”对话框中,选择要装入图片资源即可,参见图18-16。

与图标一样,你也可以自己创建位图资源(12*11像素,*.bmp)后再选入,参见图18-17。

一般还需要为图片设置透明色,这可以通过属性窗口的“外观”栏中的“ImageTransparentColor”属性来进行,方法与前面设置窗体背景色类似。

你也可以选中菜单项后,直接按鼠标右键,在弹出的浮动菜单中,选“设置图像(M)...”菜单项,来设置该菜单项的图片。

注意,MFC会为应用程序自动生成包含“新建”、“打开”等常用按钮的工具条位图文件Toolbar.bmp。

但是在VisualC#的窗体编程中,得我们自己来创建和添加这些位图。

不过,你也可以从VS安装目录的“Samples\1033\”子目录的压缩文件“VC2010Samples.zip”的“C++/Language/General/scribble/Images/”子目录中获得。

图18-16选择菜单项图片

图18-17添加位图资源新项对话框

图18-18菜单项、按钮、状态标签和分隔符类及其基类

你还可以利用“属性”窗口的“行为”栏中的“ToolTipText”属性,为菜单项添加鼠标滑过时的文本提示串。

每当你为窗体添加一个菜单项,系统就会自动添加一个对应的菜单项对象(似添加菜单条),如打开菜单项的对象定义为:

privateSystem.Windows.Forms.ToolStripMenuItem打开OToolStripMenuItem;

它们都是ToolStripMenuItem类(参见图18-18)的实例对象,默认的对象名为:

菜单项名+访问键字母+ToolStripMenuItem,如上面的“打开OToolStripMenuItem”。

你也可以修改此对象名,如改为open。

3.添加菜单响应

选中菜单项,选择“属性”窗口的事件

页,在“操作”栏的“Click”属性中,键入响应方法的名称,如OnFileOpen。

回车确认后,系统会自动在Form1.cs文件中的窗体部分类定义中,添加带空方法体的事件处理方法。

例如:

privatevoidOnFileOpen(objectsender,EventArgse)

{

}

可以添加自己的处理代码,如打开文件公用对话框,获取用户选择的(带路径的)文件名。

这需要先将工具箱窗口的“对话框”栏中的“OpenFileDialog”控件,拖放到窗体。

系统会自动为窗体类添加对应的实例对象,默认的名称为openFileDialog1:

privateSystem.Windows.Forms.OpenFileDialogopenFileDialog1;

可以属性窗口顶部的下拉式列表中,选择openFileDialog1项,在属性页中修改“设计”栏的“(Name)”属性的值,达到修改该对象名的目的,如改成openFileDlg。

则可以编写打开公用文件对话框的代码如下:

privatevoidOnFileOpen(objectsender,EventArgse)

{

if(openFileDlg.ShowDialog()==DialogResult.OK){

stringfn=openFileDlg.FileName;

}

}

类似地,你也可以为“新建”菜单项,添加OnFileNew事件处理方法,并在其中使用MessageBox类的Show静态方法来显示一个弹出式消息对话框。

例如:

privatevoidOnFileNew(objectsender,EventArgse)

{

MessageBox.Show("创建新文档!

");

}

4.MessageBox类

消息框类MessageBox是System.Object类的直接派生类,位于System.Windows.Forms命名空间中。

其Show静态方法的常用重载格式有:

publicstaticDialogResultShow(stringtext)//无标题

publicstaticDialogResultShow(stringtext,stringcaption)//含“确定”按钮

publicstaticDialogResultShow(stringtext,stringcaption,MessageBoxButtonsbuttons)

其中,MessageBoxButtons枚举类型,也位于System.Windows.Forms命名空间中,包含表18-1列出的诸枚举成员。

表18-1枚举类型MessageBoxButtons的成员

成员名称

说明

AbortRetryIgnore

消息框包含“中止”、“重试”和“忽略”按钮。

 

OK

消息框包含“确定”按钮。

 

OKCancel

消息框包含“确定”和“取消”按钮。

 

RetryCancel

消息框包含“重试”和“取消”按钮。

 

YesNo

消息框包含“是”和“否”按钮。

 

YesNoCancel

消息框包含“是”、“否”和“取消”按钮。

 

例如(参见图18-19):

MessageBox.Show("创建新文档!

");

MessageBox.Show("创建新文档!

","提示信息");

MessageBox.Show("创建新文档?

","请选择",MessageBoxButtons.YesNo);

图18-19MessageBox的不同Show重载方法的输出

5.添加退出菜单项

默认的窗体,是利用关闭窗口来退出应用程序。

我们也可以为窗体的“文件”菜单,添加“退出”或“关闭”菜单项,利用应用程序类的Exit静态方法,来退出正在运行的应用程序。

具体做法是:

●在现有的文件菜单项后,添加一个分隔符,参见图18-20a)。

a)添加分隔符b)添加退出菜单项

图18-20添加分隔符和退出菜单项

●添加退出菜单项(参见图18-20b)):

⏹设置其菜单名或其“外观”栏的“Text”属性的值为“退出(&X)”。

⏹设置其“杂项”栏“ShortcutKeys”属性的值为Alt+F4。

⏹[设置其“设计”栏“

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

当前位置:首页 > 表格模板 > 表格类模板

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

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