logo资料库

C#窗体编程.pdf

第1页 / 共51页
第2页 / 共51页
第3页 / 共51页
第4页 / 共51页
第5页 / 共51页
第6页 / 共51页
第7页 / 共51页
第8页 / 共51页
资料共51页,剩余部分请下载后查看
第 11 章 C# 窗体编程 Windows 窗体(Form,形状/表单)原来是 Visual Basic 程序的用户界面,后来成为.NET 程序的 GUI,被 Visual Studio 中的 C#、Visual Basic、J#、MC++和 C++/CLI 等开发语言工 具所使用,后来又被 Visual C++ 2005 引入到 MFC 编程中。 作为应用程序的基本单元,窗体实质上只是一个(类似于对话框的)简单框架窗口,内 含一块空白板。开发人员可通过添加控件(包括菜单条、工具条、状态条、计时器和公用对 话框等)来创建用户界面,并通过编写代码来操作数据,从而填充这个空白板。为此,Visual Studio 提供了一个有助于编写代码的集成开发环境,以及一个针对.NET 框架编程的丰富的 控件集。通过使用代码来补充这些控件的功能,可以方便快捷地开发所需要的解决方案。 由于时间有限,本章只介绍 C# 的窗体编程。 相关帮助的位置:(先选“未筛选”作为“筛选依据”的选项,然后再定位)  窗体编程:“目录\开发工具和语言\Visual Studio 文档\基于 Windows 的应用程序、 组件和服务\创建基于 Windows 的应用程序\Windows 窗体(Windows Forms)”  用 C# 创建.NET 窗体程序:“目录\开发工具和语言\Visual Studio 文档\Visual C# \ 用  Visual C# 编写应用程序\创建 Windows 窗体应用程序” .NET 类库:“目录\.NET 开发\.NET Framework 编程\类库参考\”中的 System、 System.Windows.Forms 和 System.Drawing 等命名空间 下面是在窗体编程需要用到的一些.NET 类型的继承关系图: Color Point[F] Size[F] Rectangle[F] Struct ValueType Application FolderBrowserDialog MessageBox PageSetupDialog Object Console String Delegate Event Math Bitmap Image MarshalByRefObject Graphics Font Brush Pen Component CommonDialog HatchBrush TextureBrush SolidBrush Control Timer ToolStripItem ColorDialog FontDialog PrintDialog FileDialog OpenFileDialog SaveFileDialog PathGradientBrush LinearGradientBrush RadioButton CheckBox Button ButtonBase ToolStripButton ToolStripDropDownItem ScrollableControl ToolStripMenuItem ToolStrip Panel ContainerControl TextBoxBase ListControl Label GroupBox MenuStrip StatusStrip Form TextBox ListBox PictureBox 用户窗体类 ComboBox 图 11-1 常用.NET 类型的层次结构(颜色标明类型所在的命名空间) 黑色:System、红色:System.Windows.Forms、绿色:System.Drawing、 蓝色:System.Drawing.Drawing2D、褐色:System.ComponentModel 1
11.1 创建窗体 下面我们以一个简单的窗体交互绘图程序 FormDraw 为例(参见图 11-2),介绍用 C# 编 写简单窗体程序的全过程。 图 11-2 交互式窗体绘图程序 1.创建窗体项目 打开“新建项目”对话框(参见图 11-3),选左边“项目类型”栏的“其他语言\Visual C#” 项,再选右边“模板”栏的“Windows 应用程序”模板。选择磁盘卷和父目录位置后,输入 项目名称“FormDraw”,去选“创建解决方案的目录”复选框,按“确定”钮关闭对话框。 图 11-3 新建项目对话框 2
1)项目目录和文件 Visual Studio 会自动创建名为 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-4 C# 窗体编程界面 2)代码文件内容 自动生成的程序代码,定义了一个与项目同名的命名空间,还定义了用户的应用程序类 Program ( 基 类 为 缺 省 的 System.Object ) 和 派 生 的 窗 体 类 Form1 ( 基 类 为 System.Windows.Forms.Form,参见图 11-5),后者被定义在两个同名的部分类(分别位于 Form1.cs 和 Form1.Designer.cs 者两个代码文件)中。  Program.cs 自动生成的 Program.cs 代码为: 3
using System; using System.Collections.Generic; using System.Windows.Forms; namespace FormDraw { static class Program { /// /// 应用程序的主入口点。 /// [STAThread] static void Main() { Application.EnableVisualStyles(); Object MarshalByRefObject Component Control ScrollableControl ContainerControl Form Form1 图 11-5 Form1 及其各级基类 Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } 该文件中的代码主要是定义了 Program 类,它包含 Main 入口主程序。Main 方法中最重 要的语句为: Application.Run(new Form1()); 它创建窗体 Form1 对象,并以其为程序界面(主框架窗口)来运行本窗体应用程序。  Form1.cs 代码文件 Form1.cs 包含了窗体部分类 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; namespace FormDraw { public partial class Form1 : Form { public Form1() { InitializeComponent(); 4
} } }  Form1.Designer.cs 代码文件 Form1.Designer.cs 包含了窗体部分类 Form1 的另一部分定义,用于存放系统 自动生成的窗体设计代码。下面是该文件的初始代码: namespace FormDraw { partial class Form1 { /// /// 必需的设计器变量。 /// private System.ComponentModel.IContainer components = null; /// /// 清理所有正在使用的资源。 /// /// 如果应释放托管资源,为 true;否则为 false。 protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows 窗体设计器生成的代码 /// /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Text = "Form1"; } #endregion } } 5
3)Application 类 密封类 Application 也位于 System.Windows.Forms.Form 命名空间中,直接派生于 System.Object。下面是它的定义: Application 类具有用于启动和停止应用程序和线程、启用可视界面、以及处理 Windows public sealed class Application 消息的方法,如下所示:  Run —— 在当前线程上启动应用程序消息循环,并可以选择使某窗体可见。常用 的重载版为:public static void Run (Form mainForm)  Exit 或 ExitThread ——停止消息循环。常用的重载版为:public static void Exit ()  EnableVisualStyles ——此方法为应用程序启用可视样式。如果控件和操作系统支 持视觉样式,则控件将以视觉样式进行绘制。若要使 EnableVisualStyles 生效,必 须在应用程序中创建任何控件之前调用它;EnableVisualStyles 通常是 Main 函数 的第一行。当调用 EnableVisualStyles 时,无需单独的清单即可启用可视化样式。 语法为:public static void EnableVisualStyles ()  SetCompatibleTextRenderingDefault ——该方法用于设置兼容文本的缺省表示方 式。语法为:public static void SetCompatibleTextRenderingDefault (bool defaultValue)  DoEvents ——在您的程序处于某个循环中时处理消息。  AddMessageFilter ——向应用程序消息泵添加消息筛选器来监视 Windows 消息。  IMessageFilter ——使您可以阻止引发某事件或在调用某事件处理程序前执行特殊 操作。 该类还具有用于获取或设置当前线程的区域性信息的 CurrentCultur 和 CurrentInputLanguage 属性。不能创建此类的实例(密封类)。 2.修改窗体属性 窗体的属性有很多(参见图 11-6),其中常用的有:  布局:大小 Size——缺省为 300*300 像素,可以通过修改此属性,或直接拖动窗体 的边框来改变窗体的尺寸。运行时用户也可以自己改变窗体大小。 6
图 11-6 窗体属性  窗口样式:图标 Icon——缺省为 ,可以通过为点击该属性条目右端浏览钮,装 入新的图标文件(32*32 像素,*.ico)。也可以自己通过为项目添加新建图标项, 来创建新图标资源,如 FormDraw.ico ,缺省位于项目目录中。参见图 11-7。(注 意:不知为什么,更换图标在编辑状态可以,但是在运行状态不听话)? 7
(a) 添加新项对话框 (b) 缺省的新图标 (c) 自己设计的图标 图 11-7 添加新的图标项  设计:名称(Name)——相当于 MFC 中的 ID,对应于窗体的类名。缺省为 Form1 (似 VB),可以改成自己喜欢的名称,如 DrawForm,回车确认后,系统会自动修 改所有相关内容中的该标识符。  外观:背景色 BackColor——缺省为系统的控件色 Control(一般为黄灰色,与对话 框的背景色相同),可以点击该属性右端的下三角按钮,选择自己喜欢的颜色,如 “自定义”页上的白色。参见图 11-8。 图 11-8 设置窗体的背景色  外观:背景图片 BackgroundImage——缺省无,可以自己为窗体添加背景图。并通 8
分享到:
收藏