11C#窗体编程.docx
- 文档编号:9544138
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:78
- 大小:975.97KB
11C#窗体编程.docx
《11C#窗体编程.docx》由会员分享,可在线阅读,更多相关《11C#窗体编程.docx(78页珍藏版)》请在冰豆网上搜索。
11C#窗体编程
第11章C#窗体编程
Windows窗体(Form,形状/表单)原来是VisualBasic程序的用户界面,后来成为.NET程序的GUI,被VisualStudio中的C#、VisualBasic、J#、MC++和C++/CLI等开发语言工具所使用,后来又被VisualC++2005引入到MFC编程中。
作为应用程序的基本单元,窗体实质上只是一个(类似于对话框的)简单框架窗口,内含一块空白板。
开发人员可通过添加控件(包括菜单条、工具条、状态条、计时器和公用对话框等)来创建用户界面,并通过编写代码来操作数据,从而填充这个空白板。
为此,VisualStudio提供了一个有助于编写代码的集成开发环境,以及一个针对.NET框架编程的丰富的控件集。
通过使用代码来补充这些控件的功能,可以方便快捷地开发所需要的解决方案。
由于时间有限,本章只介绍C#的窗体编程。
相关帮助的位置:
(先选“未筛选”作为“筛选依据”的选项,然后再定位)
●窗体编程:
“目录\开发工具和语言\VisualStudio文档\基于Windows的应用程序、组件和服务\创建基于Windows的应用程序\Windows窗体(WindowsForms)”
●用C#创建.NET窗体程序:
“目录\开发工具和语言\VisualStudio文档\VisualC#\用VisualC#编写应用程序\创建Windows窗体应用程序”
●.NET类库:
“目录\.NET开发\.NETFramework编程\类库参考\”中的System、System.Windows.Forms和System.Drawing等命名空间
下面是在窗体编程需要用到的一些.NET类型的继承关系图:
图11-1常用.NET类型的层次结构(颜色标明类型所在的命名空间)
黑色:
System、红色:
System.Windows.Forms、绿色:
System.Drawing、
蓝色:
System.Drawing.Drawing2D、褐色:
System.ComponentModel
11.1创建窗体
下面我们以一个简单的窗体交互绘图程序FormDraw为例(参见图11-2),介绍用C#编写简单窗体程序的全过程。
图11-2交互式窗体绘图程序
1.创建窗体项目
打开“新建项目”对话框(参见图11-3),选左边“项目类型”栏的“其他语言\VisualC#”项,再选右边“模板”栏的“Windows应用程序”模板。
选择磁盘卷和父目录位置后,输入项目名称“FormDraw”,去选“创建解决方案的目录”复选框,按“确定”钮关闭对话框。
图11-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(资源设计代码)。
IDE会自动打开一个缺省的名为“Form1”的空白窗体(Form1.cs[设计]),并打开对应的“工具箱”窗口,供程序员进行窗体设计。
参见图11-4。
图11-4C#窗体编程界面
2)代码文件内容
自动生成的程序代码,定义了一个与项目同名的命名空间,还定义了用户的应用程序类Program(基类为缺省的System.Object)和派生的窗体类Form1(基类为System.Windows.Forms.Form,参见图11-5),后者被定义在两个同名的部分类(分别位于Form1.cs和Form1.Designer.cs者两个代码文件)中。
●Program.cs
自动生成的Program.cs代码为:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Windows.Forms;
namespaceFormDraw
{
staticclassProgram
{
///
///应用程序的主入口点。
///
[STAThread]
staticvoidMain()
图11-5Form1及其各级基类
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(newForm1());
}
}
}
该文件中的代码主要是定义了Program类,它包含Main入口主程序。
Main方法中最重要的语句为:
Application.Run(newForm1());
它创建窗体Form1对象,并以其为程序界面(主框架窗口)来运行本窗体应用程序。
●Form1.cs
代码文件Form1.cs包含了窗体部分类Form1的一部分定义,用于程序员编写事件处理代码,也是我们今后工作的主要对象。
可以在“解决方案资源管理器”页中,选中“Form1.cs”项后,按鼠标右键,在弹出的浮动菜单中选“查看代码(C)”菜单项,来以远代码方式打开该文件。
下面是该文件的初始代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceFormDraw
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
}
}
}
●Form1.Designer.cs
代码文件Form1.Designer.cs包含了窗体部分类Form1的另一部分定义,用于存放系统自动生成的窗体设计代码。
下面是该文件的初始代码:
namespaceFormDraw
{
partialclassForm1
{
///
///必需的设计器变量。
///
privateSystem.ComponentModel.IContainercomponents=null;
///
///清理所有正在使用的资源。
///
///
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
}
}
3)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属性。
不能创建此类的实例(密封类)。
2.修改窗体属性
窗体的属性有很多(参见图11-6),其中常用的有:
●布局:
大小Size——缺省为300*300像素,可以通过修改此属性,或直接拖动窗体的边框来改变窗体的尺寸。
运行时用户也可以自己改变窗体大小。
图11-6窗体属性
●窗口样式:
图标Icon——缺省为
,可以通过为点击该属性条目右端浏览钮,装入新的图标文件(32*32像素,*.ico)。
也可以自己通过为项目添加新建图标项,来创建新图标资源,如FormDraw.ico
,缺省位于项目目录中。
参见图11-7。
(注意:
不知为什么,更换图标在编辑状态可以,但是在运行状态不听话)?
(a)添加新项对话框
(b)缺省的新图标(c)自己设计的图标
图11-7添加新的图标项
●设计:
名称(Name)——相当于MFC中的ID,对应于窗体的类名。
缺省为Form1(似VB),可以改成自己喜欢的名称,如DrawForm,回车确认后,系统会自动修改所有相关内容中的该标识符。
●外观:
背景色BackColor——缺省为系统的控件色Control(一般为黄灰色,与对话框的背景色相同),可以点击该属性右端的下三角按钮,选择自己喜欢的颜色,如“自定义”页上的白色。
参见图11-8。
图11-8设置窗体的背景色
●外观:
背景图片BackgroundImage——缺省无,可以自己为窗体添加背景图。
并通过BackgroundImageLayout属性,来设置图片的填充方式(缺省为Tile平铺,还可以选择中心Center、伸展Stretch和缩放Zoom)。
●外观:
光标Cursor——缺省为Default(箭头Arrow)。
可以选十字Cross,参见图11-9。
●外观:
文本Text——对应于窗体的标题,缺省也为Form1,可以改为自己喜欢的标题,如“窗体绘图”。
结果窗体如图11-10所示。
图11-9可选光标图11-10窗体外观
3.添加菜单
缺省的窗体是一个空框架窗口,既没有菜单,也没有工具条和状态条。
但是我们可以利用工具箱,通过拖放,直观地为窗体添加这些控件(系统会自动为项目添加对应的用户派生类),然后再交互式地编辑和修改它们。
1)添加菜单条
选中“Form1.cs[设计]”页,打开“工具箱”窗口,展开“菜单和工具栏”项,里面有菜单条(MenuStrip)、工具条(ToolStrip)和状态条(StatusStrip)等控件,参见图11-11。
它们都是C#2.0新增加的控件类,分别用来替换老版本中的MainMenu、ToolBar和StatusBar等控件类,参见图11-12。
为了兼容性,2.0版中仍然保留了这些老版本中的类,但是建议在编程中使用新的控件类。
图11-11工具箱窗口
图11-12新老菜单条、工具条和状态条控件类及其基类
选中“工具箱”窗口的“菜单和工具栏”中的“MenuStrip”项,拖放到窗体中,系统则会自动为窗体添加一个停靠在在标题条下的菜单条,参见图11-13。
并在Form1.Designer.cs文件的部分窗体类定义的“Windows窗体设计器生成的代码”区域后自动添加如下一行代码,来定义该菜单条所对应的菜单条类的实例对象menuStrip1:
privateSystem.Windows.Forms.MenuStripmenuStrip1;
可以通过菜单条“属性”窗口中“设计”栏中的名称属性“(Name)”来修改该对象的变量名称,如mainMenuStrip,回车确认后,系统会自动修改项目中的所有相关部分的代码。
2)添加菜单项
可以像在MFC中一样,为菜单条添加菜单项和访问键&X,参见图11-13(a)。
但是添加快捷键(shortcutkey)、设置选中(checked)状态、添加图片、添加等,C#都比MFC方便,可以直接利用属性窗口,直观交互式地完成。
在菜单条中,除了添加菜单项外,你还可以利用下拉式列表来为菜单条添加分隔符(ToolStripSeparator类的对象,参见图11-17)、文本框和组合框,参见图11-13(b)。
(a)添加菜单项和访问键(b)添加分隔条、文本框和组合框
图11-13添加菜单条成员
可以通过在属性窗口底部的“杂项”栏中的“ShortcutKeys”项来设置快捷键,参见图11-14。
注意,设置快捷键后,系统会自动地将它作为缺省串显示在菜单项的右端,不需要(也不支持)自己在菜单项自己编写诸如“\tCtrl+N”的显式串。
但是可以在属性窗口的“外观”栏的“ShortcutKeyDisplayString”属性中,输入自己的显示串,来代替缺省的串。
只有在该属性值为空时,系统才会显示缺省的快捷键串。
图11-14设置快捷键
在C#的窗体编程中,为菜单项添加小图片是非常容易的。
只需在属性窗口的“外观”栏的“Image”属性中,单击右端的浏览钮,在弹出的对话框中,按“导入”钮,在弹出的“打开”对话框中,选择要装入图片资源即可,参见图11-15。
与图标一样,你也可以自己创建位图资源(12*11像素,*.bmp)后再选入。
参见图11-16。
一般还需要为图片设置透明色,这可以通过属性窗口的“外观”栏中的“ImageTransparentColor”属性来进行,方法与前面设置窗体背景色类似。
图11-15选择菜单项图片
图11-16添加位图资源新项对话框
你也可以选中菜单项后,直接按鼠标右键,在弹出的浮动菜单中,选“设置图像(M)...”菜单项,来设置该菜单项的图片。
你还可以利用“属性”窗口的“行为”栏中的“ToolTipText”属性,为菜单项添加鼠标滑过时的文本提示串。
每当你为窗体添加一个菜单项,系统就会自动添加一个对应的菜单项对象(似添加菜单条),如打开菜单项的对象定义为:
privateSystem.Windows.Forms.ToolStripMenuItem打开OToolStripMenuItem;
它们都是ToolStripMenuItem类(参见图11-17)的实例对象,缺省的对象名为:
菜单项名+访问键字母+ToolStripMenuItem
你也可以修改此对象名,如改为open。
图11-17菜单项、按钮、状态标签和分隔符类及其基类
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命名空间中。
包含如下枚举成员:
成员名称
说明
AbortRetryIgnore
消息框包含“中止”、“重试”和“忽略”按钮。
OK
消息框包含“确定”按钮。
OKCancel
消息框包含“确定”和“取消”按钮。
RetryCancel
消息框包含“重试”和“取消”按钮。
YesNo
消息框包含“是”和“否”按钮。
YesNoCancel
消息框包含“是”、“否”和“取消”按钮。
例如:
MessageBox.Show("创建新文档!
");
MessageBox.Show("创建新文档!
","提示信息");
MessageBox.Show("创建新文档?
","请选择",MessageBoxButtons.YesNo);
输出结果如图11-18:
图11-18MessageBox的不同Show重载方法的输出
5)添加退出菜单项
缺省的窗体,是利用关闭窗口来退出应用程序。
我们也可以为窗体的“文件”菜单,添加“退出”或“关闭”菜单项,利用应用程序类的Exit静态方法,来退出正在运行的应用程序。
具体做法是:
●在现有的文件菜单项后,添加一个分隔符。
参见图11-19(a)。
(a)添加分隔符(b)添加退出菜单项
图11-19添加分隔符和退出菜单项
●添加退出菜单项:
(参见图11-19(b))
⏹设置其菜单名或其“外观”栏的“Text”属性的值为“退出(&X)”。
⏹设置其“杂项”栏“ShortcutKeys”属性的值为Alt+F4。
⏹[设置其“设计”栏“(Name)”属性的值为exit。
]
●添加鼠标单击事件处理方法:
⏹在“属性”的“事件”页“操作”栏的“Click”项中,输入事件处理的方法名OnExit。
⏹在自动生成的空方法体中,添加语句:
Application.Exit();
方法的代码为:
privatevoidOnExit(objectsender,EventArgse)
{
Application.Exit();
}
4.添加工具条与按钮
为窗体添加工具条及其按钮的方法与添加菜单条和菜单项的类似。
1)添加工具条
选中“Form1.cs[设计]”页,打开“工具箱”窗口,展开“菜单和工具栏”项,将“ToolStrip”项,拖放到窗体中,系统则会自动为窗体添加一个停靠在在菜单条下的工具条,参见图11-20(a)。
并在Form1.Designer.cs文件中自动添加定义该工具条所对应的工具条类的实例对象toolStrip1:
privateSystem.Windows.Forms.ToolStriptoolStrip1;
它是ToolStrip类(参见图11-12)的实例对象。
也可以通过工具条的“属性”窗口中“设计”栏中的名称属性“(Name)”来修改该对象的变量名称,如toolStrip。
回车确认后,系统也会自动修改项目中的所有相关部分的代码。
(a)添加工具条(b)添加按钮
图11-20添加工具条与按钮
2)添加按钮
利用工具条的添加新项的下拉式列表,可以为工具条添加多种成员(参见图11-20(b)),常用的是按钮与分隔符(ToolStripSeparator类的对象,参见图11-17)。
新添加按钮时,系统也会在Form1.Designer.cs文件中自动添加一个对应的按钮对象:
privateSystem.Windows.Forms.ToolStripButtontool
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 C# 窗体 编程