第12章Windows窗体应用程序设计_第1页
第12章Windows窗体应用程序设计_第2页
第12章Windows窗体应用程序设计_第3页
第12章Windows窗体应用程序设计_第4页
第12章Windows窗体应用程序设计_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、12.1 Windows窗体介绍窗体介绍12.2 基本基本Windows控件控件12.3 菜单、工具栏与状态栏菜单、工具栏与状态栏12.4 高级控件与组件高级控件与组件12.5 通用对话框通用对话框12.6 综合实例综合实例系统登录实现系统登录实现 窗体是窗体是Windows窗体应用程序的基本显示单元,窗窗体应用程序的基本显示单元,窗体实质上是一块白板(或者容器),开发人员可以向窗体实质上是一块白板(或者容器),开发人员可以向窗体上放置各类控件,以丰富窗体上面的交互元素。窗体体上放置各类控件,以丰富窗体上面的交互元素。窗体实际上是实际上是System.Windows.Forms.Form类或者

2、其派生类类或者其派生类的实例。我们每设计一个窗体,其实都是在设计一个的实例。我们每设计一个窗体,其实都是在设计一个Form派生类。派生类。使用使用“ Windows窗体应用程序窗体应用程序”模板创建模板创建Windows窗体应用程序。窗体应用程序。图12-1 选择正确的模板创建Windows窗体应用程序创建后的创建后的Windows窗体应用程序,默认已创建一个窗体应用程序,默认已创建一个Form1窗体。可窗体。可通过在通过在Visual Studio的解决方案资源管理器中的项目节点上点击鼠标右的解决方案资源管理器中的项目节点上点击鼠标右键,选择键,选择“添加添加”“Windows窗体窗体”,来

3、添加新窗体。双击窗体节,来添加新窗体。双击窗体节点点“Form1.cs”,可以进入窗体的设计状态。,可以进入窗体的设计状态。图12-2 新建窗体在解决方案资源管理器中,点击窗体节点左侧的三角展开符号,可在解决方案资源管理器中,点击窗体节点左侧的三角展开符号,可看到构成该窗体的三个物理文件:看到构成该窗体的三个物理文件:Form1.cs、Form1.Designer.cs、Form1.resx。开发人员手动编写的代码存于。开发人员手动编写的代码存于Form1.cs文件中。文件中。图12-3 窗体对应的三个物理文件窗体创建后,可通过调整窗体的属性来改变窗体的样式、外观、窗体创建后,可通过调整窗体的

4、属性来改变窗体的样式、外观、布局以及行为方式等。布局以及行为方式等。表12-1 窗体的常用属性属性名属性名属性作用属性作用常用可选值常用可选值值作用值作用说明说明Name窗体名称,唯一标识,同一项目下的窗体Name属性值必须唯一 该属性为通用属性,所有的Windows控件及组件都具备该属性ControlBox控制窗体右上角最大化、最小化、关闭按钮的可见性True显示 False不显示MaximizeBox仅控制最大化按钮的可用性True可用 False不可用MinimizeBox仅控制最小化按钮的可用性True可用 False不可用Enabled控制窗体及其内部控件、组件是否可用True可用该

5、属性为通用属性,如果容器组件的Enabled属性设为False,则容器内的所有控件、组件都不可用False不可用表12-1 窗体的常用属性属性名属性名属性作用属性作用常用可选值常用可选值值作用值作用说明说明IsMdiContainer是否是MDI父窗体True是如果一个窗体被设为MDI父窗体,再打开其它窗体时,可以以此窗体为父窗体,呈现出子窗体内嵌在父窗体内的效果False否FormBorderStyle控制窗体的边框样式None无边框 FixedSingle固定的单行边框Sizable可调大小的边框 Location控制窗体左上角的坐标点 所有可视控件都具备该属性,用代码实现时,还可以通过L

6、eft属性和Top属性来设置该坐标。Left为横坐标,Top为纵坐标Width控制窗体的宽度 所有可视控件都具备该属性,在属性窗口中,需展开Size属性才能看到该属性Height控制窗体的高度 Text设置窗体的标题 TopMost控制窗体是否始终在前True始终在前 False不始终在前表12-1 窗体的常用属性属性名属性名属性作用属性作用常用可选值常用可选值值作用值作用说明说明StartPosition 控制窗体非最大化状态下,初始显示的位置 Manual 窗体的位置由 Location 属性确定 CenterScreen窗体在当前显示窗口中居中CenterParent窗体在其父窗体中居中

7、WindowsDefaultLocation窗体定位在 Windows 默认位置WindowState 窗体初始运行时的显示状态 Normal正常尺寸显示 Minimized最小化显示Maximized最大化显示可以通过两种方式设置窗体的属性:通过属性窗口进行可视化设置可以通过两种方式设置窗体的属性:通过属性窗口进行可视化设置或通过编写或通过编写C#代码来设置。代码来设置。图12-4 通过窗体的属性窗口修改Text属性图12-5 通过代码设置窗体属性窗体所有的属性也都可通过直接编写代码方式达到同样的效果。窗体所有的属性也都可通过直接编写代码方式达到同样的效果。【实例实例12-1】创建一个符合外

8、观要求的窗体。创建一个符合外观要求的窗体。实例描述:设置窗体标题为实例描述:设置窗体标题为“我的第一个窗体程序我的第一个窗体程序”,设置窗体,设置窗体宽度、高度分别为宽度、高度分别为400px,并令窗体不可使用鼠标拖拽的方式调整,并令窗体不可使用鼠标拖拽的方式调整大小,同时禁用窗体的最大化按钮。大小,同时禁用窗体的最大化按钮。图12-6 实例12-1运行效果实例分析:可通过实例分析:可通过Text属性来控制窗体属性来控制窗体标题,通过标题,通过Width、Height属性控制窗体的属性控制窗体的宽度和高度,通过宽度和高度,通过FormBorderStyle属性开属性开控制窗体边框的可调性,通过

9、控制窗体边框的可调性,通过MaximizeBox属性控制最大化按钮的可用性。属性控制最大化按钮的可用性。【实例实例12-1】创建一个符合外观要求的窗体。创建一个符合外观要求的窗体。实例实现:创建项目名称为实例实现:创建项目名称为Example12_1的窗体应用程序,双击的窗体应用程序,双击自动创建的自动创建的Form1窗体,在出现的窗体,在出现的Form1_Load方法中输入下列代码:方法中输入下列代码:private void Form1_Load(object sender, EventArgs e) this.Text = 我的第一个窗体程序我的第一个窗体程序; this.Width =

10、 400; this.Height = 400; this.MaximizeBox = false; this.FormBorderStyle = FormBorderStyle.FixedSingle; 应用窗体的方法可以动态改变窗体的行为,如显示、隐藏、关闭应用窗体的方法可以动态改变窗体的行为,如显示、隐藏、关闭窗体等。窗体等。表12-2 窗体的常用方法方法名方法名方法作用方法作用Show()无模式显示窗体。窗体实例化后,可以通过调用本方法令窗体显现。本方法与设置窗体的Visible属性为True效果相同。注意:窗体的Visible属性只能通过代码调用,属性窗口中看不到该属性。本方法为通用

11、方法,可视控件都具有该方法ShowDialog()将窗体以模式对话框的形式显示Hide()隐藏窗体。本方法与设置窗体的Visible属性为False效果相同。该方法是通用方法,可视控件都具有该方法Close()关闭窗体【实例实例12-2】创建一个创建一个Windows窗体应用程序,验证上述窗体应用程序,验证上述4个方法。个方法。实例描述:在初始运行的窗体中放置四个按钮,分别是【无模式实例描述:在初始运行的窗体中放置四个按钮,分别是【无模式打开第二窗体】、【模式打开第二窗体】、【隐藏第二窗体】、打开第二窗体】、【模式打开第二窗体】、【隐藏第二窗体】、【关闭初始窗体】。【关闭初始窗体】。图12-7

12、 实例12-2界面效果实例分析:以无模式方式实例分析:以无模式方式打开第二窗体,需要调用第打开第二窗体,需要调用第二窗体的二窗体的Show()方法;以模方法;以模式方式打开第二窗体,需要式方式打开第二窗体,需要调用第二窗体的调用第二窗体的ShowDialog()方法,隐藏第二窗体;需要方法,隐藏第二窗体;需要调用第二窗体的调用第二窗体的Hide()方法,方法,关闭初始窗体,需要调用初关闭初始窗体,需要调用初始窗体的始窗体的Close()方法。方法。实例实现:实例实现:(1)打开)打开Visual Studio,创建项目名称为,创建项目名称为Example12_2的窗体应的窗体应用程序。用程序。

13、(2)右键点击资源管理器中的项目节点,新建)右键点击资源管理器中的项目节点,新建Windows窗体窗体Form2。(3)双击)双击Form1.cs节点,打开初始窗体节点,打开初始窗体Form1的设计模式。的设计模式。(4) 向向Form1中添加按钮控件:在中添加按钮控件:在Visual Studio左侧的工具箱左侧的工具箱中,展开中,展开“所有所有Windows窗体窗体”组,找到按钮控件组,找到按钮控件“Button”,按,按住鼠标左键,将其拖入住鼠标左键,将其拖入Form1的设计区中。工具箱如图的设计区中。工具箱如图12-8所示。所示。【实例实例12-2】创建一个创建一个Windows窗体应

14、用程序,验证上述窗体应用程序,验证上述4个方法。个方法。【实例实例12-2】创建一个创建一个Windows窗体应用程序,验证上述窗体应用程序,验证上述4个方法。个方法。图12-8 工具箱实例实现:实例实现:(5)右键点击放入设计区中的按钮,选择)右键点击放入设计区中的按钮,选择“属性属性”,弹出属性,弹出属性窗口,修改按钮的窗口,修改按钮的Text属性值为属性值为“无模式打开第二窗体无模式打开第二窗体”。(6)重复步骤)重复步骤4和和5。再向窗体。再向窗体Form1中添加三个按钮,中添加三个按钮,Text属属性分别为:性分别为:“模式打开第二窗体模式打开第二窗体”、“隐藏第二窗体隐藏第二窗体”

15、、“关闭初关闭初始窗体始窗体”。(7)分别双击四个按钮,系统会自动添加四个按钮的)分别双击四个按钮,系统会自动添加四个按钮的Click事件事件处理函数。在各个按钮的事件处理函数及处理函数。在各个按钮的事件处理函数及Form1类中添加代码,完类中添加代码,完整的整的Form1类代码如下:类代码如下:【实例实例12-2】创建一个创建一个Windows窗体应用程序,验证上述窗体应用程序,验证上述4个方法。个方法。实例实现:实例实现: public partial class Form1 : Form public Form1() InitializeComponent(); Form2 frm;/定

16、义第二窗体引用,仅用于无模式显示定义第二窗体引用,仅用于无模式显示 /“无模式打开第二窗体无模式打开第二窗体”按钮的事件处理函数按钮的事件处理函数 private void button1_Click(object sender, EventArgs e) frm = new Form2();/实例化第二窗体对象实例化第二窗体对象 frm.Show(); /“模式打开第二窗体模式打开第二窗体”按钮的事件处理函数按钮的事件处理函数 private void button2_Click(object sender, EventArgs e) Form2 frm2 = new Form2();/实例

17、化第二窗体对象实例化第二窗体对象 frm2.ShowDialog(); /“隐藏第二窗体隐藏第二窗体”按钮的事件处理函数按钮的事件处理函数 private void button3_Click(object sender, EventArgs e) frm.Hide(); /“关闭初始窗体关闭初始窗体”按钮的事件处理函数按钮的事件处理函数 private void button4_Click(object sender, EventArgs e) this.Close(); 【实例实例12-2】创建一个创建一个Windows窗体应用程序,验证上述窗体应用程序,验证上述4个方法。个方法。每个窗体

18、或控件都有多个事件,当用户针对窗体或控件进行不同每个窗体或控件都有多个事件,当用户针对窗体或控件进行不同的操作时,会触发不同的事件,程序员要做的事情就是为相应的事的操作时,会触发不同的事件,程序员要做的事情就是为相应的事件创建事件处理函数,并在事件处理函数中编写正确逻辑的代码。件创建事件处理函数,并在事件处理函数中编写正确逻辑的代码。表12-3 窗体的常用事件事件名事件名事件作用事件作用Load加载事件,窗体在向内存加载过程中触发该事件Click单击事件,当用鼠标在窗体上单击时触发该事件。该事件为通用事件,多数控件和组件都具备该事件FormClosing正在关闭事件。当窗体正在关闭时,触发该事

19、件KeyDown键盘按下事件。当窗体获取焦点,并按下键盘按键时,触发该事件。该事件为通用事件,多数控件和组件都具备该事件KeyUp键盘弹起事件。当窗体获取焦点,且键盘按键由按下状态变为弹起状态时,触发该事件。该事件为通用事件,多数控件和组件都具备该事件KeyPress键盘敲击事件。当窗体获取焦点,并敲击键盘按键时触发该事件。该事件为通用事件,多数控件和组件都具备该事件MouseDown鼠标按下事件。当鼠标按键在窗体上按下时,触发该事件。该事件为通用事件,多数控件和组件都具备该事件MouseUp鼠标弹起事件。当鼠标按键在窗体上由按下状态变为弹起状态时,触发该事件。该事件为通用事件,多数控件和组件

20、都具备该事件MouseMove鼠标移动事件。当鼠标按键在窗体上移动时,触发该事件。该事件为通用事件,多数控件和组件都具备该事件MouseEnter鼠标进入事件。当鼠标进入窗体区域时,触发该事件。该事件为通用事件,多数控件和组件都具备该事件Paint绘图事件。窗体在显示或可见区域发生变化时会触发该事件。该事件为通用事件,多数控件和组件都具备该事件每个窗体、控件或组件都有一个默认事件,在设计区双击窗体、每个窗体、控件或组件都有一个默认事件,在设计区双击窗体、控件或组件时,会自动生成其默认事件的事件处理函数。例如,窗控件或组件时,会自动生成其默认事件的事件处理函数。例如,窗体的默认事件是体的默认事件

21、是Load事件,所以双击窗体时,会自动生成窗体事件,所以双击窗体时,会自动生成窗体Load事件的事件处理函数;按钮的默认事件是事件的事件处理函数;按钮的默认事件是Click事件,双击按钮时,事件,双击按钮时,会自动生成按钮会自动生成按钮Click事件的事件处理函数。非默认事件需通过属性事件的事件处理函数。非默认事件需通过属性窗口的窗口的“事件事件”选项卡来完成。选项卡来完成。图12-9 属性窗口的事件选项卡【实例实例12-3】创建一个创建一个Windows窗体应用程序,验证窗体事件的应用。窗体应用程序,验证窗体事件的应用。实例描述:窗体加载时,设置窗体始终在前显示,且禁用窗体的实例描述:窗体加

22、载时,设置窗体始终在前显示,且禁用窗体的最小化按钮和最大化按钮,点击窗体的关闭按钮时,要首先给予对最小化按钮和最大化按钮,点击窗体的关闭按钮时,要首先给予对话框提示,如果用户确认关闭,继续完成窗体的关闭,否则取消关话框提示,如果用户确认关闭,继续完成窗体的关闭,否则取消关闭动作。闭动作。图12-10 实例12-3运行效果实例分析:窗体加载时会触发窗体的实例分析:窗体加载时会触发窗体的Load事件,令窗体始终在前可通过事件,令窗体始终在前可通过TopMost属性来控制,禁用窗体最小化和最大化按钮属性来控制,禁用窗体最小化和最大化按钮可分别通过可分别通过MinimizeBox和和MaximizeB

23、ox属属性控制。点击窗体关闭按钮时会触发性控制。点击窗体关闭按钮时会触发FormClosing事件,对话框可以使用事件,对话框可以使用MessageBox.Show()方法来实现方法来实现实例实现:实例实现:(1)创建)创建Windows 窗体应用程序项目窗体应用程序项目Example12_3。(2)使用本节介绍的方法,创建)使用本节介绍的方法,创建Load事件和事件和FormClosing事件事件的事件处理函数。的事件处理函数。(3)在)在Form1.cs类文件中编写代码如下:类文件中编写代码如下:【实例实例12-3】创建一个创建一个Windows窗体应用程序,验证窗体事件的应用。窗体应用程

24、序,验证窗体事件的应用。实例实现:实例实现: public partial class Form1 : Form public Form1() InitializeComponent(); /关闭窗体事件关闭窗体事件 private void Form1_FormClosing(object sender, FormClosingEventArgs e) /弹出确认对话框,参数一为提示信息,参数二为对话框标题,参数三控制对话框的按钮类型弹出确认对话框,参数一为提示信息,参数二为对话框标题,参数三控制对话框的按钮类型 DialogResult dr= MessageBox.Show(确认关闭该窗

25、体吗?确认关闭该窗体吗?, 关闭确认关闭确认, MessageBoxButtons.YesNo); /如果点击了对话框上的如果点击了对话框上的“否否”按钮按钮 if (dr=DialogResult.No) e.Cancel = true;/取消进一步操作取消进一步操作 /窗体加载事件窗体加载事件 private void Form1_Load(object sender, EventArgs e) this.TopMost = true;/始终在前始终在前 this.MinimizeBox = false;/禁用最小化按钮禁用最小化按钮 this.MaximizeBox = false;/禁

26、用最大化按钮禁用最大化按钮 本节介绍几个常用的基本本节介绍几个常用的基本Windows控件的使用,包控件的使用,包括按钮控件括按钮控件Button,标签控件,标签控件Label,文本框控件,文本框控件TextBox,面板控件,面板控件Panel、单选按钮控件、单选按钮控件RadioButton、复选框控件复选框控件CheckBox、富文本框控件、富文本框控件RichTextBox、组、组合框控件合框控件ComboBox,列表框控件,列表框控件ListBox以及图片框控以及图片框控件件PictureBox。按钮(按钮(Button控件)是控件)是Windows窗体应用程序最常用的控件之一,窗体应

27、用程序最常用的控件之一,用户在界面上的大多数都是以点击按钮作为提交数据或请求的标志用户在界面上的大多数都是以点击按钮作为提交数据或请求的标志性操作。按钮实际上是性操作。按钮实际上是System.Windows.Forms.Button类或其派生类类或其派生类的对象。的对象。表12-4 按钮的常用属性属性名属性作用常用可选值值作用Name按钮名称,唯一标识,同一窗体下的控件Name属性值必须唯一 Text按钮文本 Visible可见性True可见False不可见Enabled可用性True可用False不可用表12-5 按钮的常用方法方法名方法名方法作用方法作用Focus()令按钮对象获得焦点。

28、本方法为通用方法,窗体及可视控件都具有该方法Select()令按钮对象处于选中状态。该方法为通用方法,窗体及可视控件都具有该方法CreateGraphics()创建按钮对象的画布对象,主要用于绘图,详见第13章。窗体及可视化控件都具有该方法表12-6 按钮的常用事件事件名事件作用Click单击事件,当用鼠标在按钮上单击时触发该事件向窗体中添加按钮的方法:向窗体中添加按钮的方法:方法一,从工具箱选中按钮控件方法一,从工具箱选中按钮控件Button向窗体拖拽的方式。如果向窗体拖拽的方式。如果工具箱为打开,可到工具箱为打开,可到“视图视图”菜单中,点击菜单中,点击“工具箱工具箱”菜单项,即菜单项,即

29、可打开工具箱。可打开工具箱。方法二,以编写代码的方式,动态向窗体中添加按钮(也包括其方法二,以编写代码的方式,动态向窗体中添加按钮(也包括其它控件)。它控件)。【实例实例12-4】创建一个创建一个Windows窗体应用程序,向窗体中动态添加窗体应用程序,向窗体中动态添加一个按钮。一个按钮。实例描述:要求在窗体加载时,向窗体正中间位置,动态添加一个按钮,按钮宽实例描述:要求在窗体加载时,向窗体正中间位置,动态添加一个按钮,按钮宽度为度为150,高度为,高度为60,按钮文本为,按钮文本为“我是动态添加的按钮我是动态添加的按钮”,并动态添加该按钮的,并动态添加该按钮的Click事件处理函数,使得点击

30、该按钮时,可以弹出消息对话框,消息对话框内容为事件处理函数,使得点击该按钮时,可以弹出消息对话框,消息对话框内容为“在执行动态添加的按钮的在执行动态添加的按钮的Click事件处理函数事件处理函数”。图12-11 实例12-4运行效果实例分析:若要向窗体中添加一个按钮,首先需要实例分析:若要向窗体中添加一个按钮,首先需要实例化一个实例化一个System.Windows.Forms.Button类型的对象,类型的对象,将按钮对象添加到窗体中,可以使用窗体对将按钮对象添加到窗体中,可以使用窗体对象象.Controls.Add(Control value)方法来完成。方法来完成。Controls即代表

31、窗体的子控件集合,即代表窗体的子控件集合,Add方法即向该控件集合中方法即向该控件集合中添加新的控件元素。为按钮动态添加添加新的控件元素。为按钮动态添加Click事件处理函事件处理函数,可以通过向按钮对象的数,可以通过向按钮对象的Click事件队列中添加一个事件队列中添加一个新的新的EventHandler委托来实现。委托来实现。实例实现:实例实现:(1)创建)创建Windows 窗体应用程序项目窗体应用程序项目Example12_4。(2)在)在Form1.cs文件中添加如下代码:文件中添加如下代码:/窗体的窗体的Load事件处理函数事件处理函数 private void Form1_Loa

32、d(object sender, EventArgs e) Button btn = new Button();/创建按钮对象创建按钮对象 btn.Width = 150;/设置按钮宽度设置按钮宽度 btn.Height = 60;/设置按钮高度设置按钮高度 /通过通过this.ClientRectangle.Width获取窗体工作区(即去除边框)的宽度,并计算居中横坐标获取窗体工作区(即去除边框)的宽度,并计算居中横坐标 btn.Left = (this.ClientRectangle.Width - btn.Width) / 2; /通过通过this.ClientRectangle.Hei

33、ght获取窗体工作区(去除标题栏)的高度,并计算居中纵坐标获取窗体工作区(去除标题栏)的高度,并计算居中纵坐标 btn.Top= (this.ClientRectangle.Height - btn.Height) / 2; btn.Text = 我是动态添加的按钮我是动态添加的按钮; /向向btn按钮的按钮的Click事件队列中加入一个新的事件处理函数事件队列中加入一个新的事件处理函数Btn_Click btn.Click += Btn_Click; /将按钮将按钮btn添加到窗体的控件集合中添加到窗体的控件集合中 this.Controls.Add(btn); /手动创建的按钮的手动创建的

34、按钮的Click事件处理函数事件处理函数 private void Btn_Click(object sender, EventArgs e) MessageBox.Show(在执行动态添加的按钮的在执行动态添加的按钮的Click事件处理函数事件处理函数); 【实例实例12-4】创建一个创建一个Windows窗体应用程序,向窗体中动态添加窗体应用程序,向窗体中动态添加一个按钮。一个按钮。标签控件标签控件Label是是Windows窗体应用程序功能最简单的控件,它主要窗体应用程序功能最简单的控件,它主要用于在界面上提示必要的信息。标签是用于在界面上提示必要的信息。标签是System.Window

35、s.Forms.Label类类或其派生类的对象。或其派生类的对象。表12-7 标签的常用属性属性名属性名属性作用属性作用常用可选值常用可选值值作用值作用Text按钮文本 Font设定标签中文本的字体取决于系统已安装的字体 ForeColor设定标签的前景颜色,即文本的颜色 AutoSize是否根据内容自动调整尺寸True自动调整False不自动调整一般情况下不需要调用标签的方法来达到某种目的。标签拥有一般情况下不需要调用标签的方法来达到某种目的。标签拥有Click、MouseMove等通用事件,但一般也不需要处理它的事件,绝大多数情况等通用事件,但一般也不需要处理它的事件,绝大多数情况下,都是

36、触发了其它控件的事件后,引发了标签内容或可见性变化。下,都是触发了其它控件的事件后,引发了标签内容或可见性变化。【实例实例12-5】创建一个创建一个Windows窗体应用程序,实现一个爱情小游戏。窗体应用程序,实现一个爱情小游戏。实例描述:游戏界面如图实例描述:游戏界面如图12-12所示。本游戏是询问玩家所示。本游戏是询问玩家“你是否爱我?你是否爱我?”,如,如果玩家点击【爱】按钮,程序会显示果玩家点击【爱】按钮,程序会显示“我也爱你!我也爱你!”,而当玩家尝试向【不爱】按,而当玩家尝试向【不爱】按钮移动鼠标时,该按钮就钮移动鼠标时,该按钮就“跑掉跑掉”了,不给玩家点到它的机会。了,不给玩家点

37、到它的机会。图12-12 实例12-5游戏界面设计实例分析:实例分析:“你是否爱我你是否爱我”是一个典型的静态文本是一个典型的静态文本信息,由信息,由Label来承载,当玩家点击【爱】按钮时,触来承载,当玩家点击【爱】按钮时,触发该按钮的发该按钮的Click事件,修改事件,修改Label的文本即可。而当玩的文本即可。而当玩家视图将鼠标移动到【不爱】按钮上时,会触发按钮家视图将鼠标移动到【不爱】按钮上时,会触发按钮的的MouseEnter事件,在该事件处理函数中中我们需要事件,在该事件处理函数中中我们需要给【不爱】按钮随机一个新的坐标,将它移走,就实给【不爱】按钮随机一个新的坐标,将它移走,就实

38、现了按钮现了按钮“跑掉跑掉”的效果。的效果。实例实现:实例实现:(1)创建)创建Windows 窗体应用程序项目窗体应用程序项目Example12_5。(2)向)向Form1中放置一个中放置一个Label控件,控件,Name属性为默认的属性为默认的“Label1”,文本颜,文本颜色为红色。色为红色。(3)向)向Form1中放置两个中放置两个Button控件,控件,Name属性分别为属性分别为“Button1”和和“Button2”,Text属性分别为属性分别为“爱爱”和和“不爱不爱”,在属性窗口的事件选项卡中分别,在属性窗口的事件选项卡中分别生成生成Button1和和Button2的的Clic

39、k事件处理函数以及事件处理函数以及Button2的的MouseEnter事件处理函数。事件处理函数。(4)编写三个事件处理函数,代码如下:)编写三个事件处理函数,代码如下: private void button1_Click(object sender, EventArgs e) label1.Text=我也爱你!我也爱你!; private void button2_Click(object sender, EventArgs e) /虽然这里有不爱的反馈,但很可惜玩家是没有机会触发这个事件的虽然这里有不爱的反馈,但很可惜玩家是没有机会触发这个事件的 label1.Text=真遗憾真遗憾.

40、; private void button2_MouseEnter(object sender, EventArgs e) Random r = new Random();/创建随机对象创建随机对象 /计算横坐标合理的随机范围计算横坐标合理的随机范围 button2.Left = r.Next(this.ClientRectangle.Left, this.ClientRectangle.Width - button2.Width); /计算纵坐标合理的随机范围计算纵坐标合理的随机范围 button2.Top = r.Next(this.ClientRectangle.Top, this.Cl

41、ientRectangle.Height - button2.Height); 【实例实例12-5】创建一个创建一个Windows窗体应用程序,实现一个爱情小游戏。窗体应用程序,实现一个爱情小游戏。文本框文本框TextBox也是也是Windows窗体应用程序最常用的控件之一,用户在界面上需窗体应用程序最常用的控件之一,用户在界面上需要录入信息时大多数都是以要录入信息时大多数都是以TextBox来实现的。文本框是来实现的。文本框是System.Windows.Forms.TextBox类或其派生类的对象。文本框用于用户输入和结果类或其派生类的对象。文本框用于用户输入和结果展示,包括最常见的密码输

42、入等。展示,包括最常见的密码输入等。表12-8 文本框的常用属性属性名属性名属性作用属性作用常用可选常用可选值值值作用值作用Text按钮文本 Multiline是否允许多行True允许False不允许PasswordChar密码占位符,当文本框输入的内容需要保密时,可以为该属性设定一个占位符号,输入的内容将会被占位符号代替显示 TextAlign文本对齐方式Left左对齐Right右对齐Center居中MaxLength允许输入的最大字符长度 WordWrap是否允许自动换行,仅当Multiline属性为True时有效True允许False不允许ScrollBars滚动条启用样式。仅当Mult

43、iline属性为True时有效None无滚动条Horizontal仅水平滚动条Vertical仅垂直滚动条Both双向滚动条ReadOnly控制文本框是否只读True内容只读False可读写表12-9 文本框的常用方法表12-10 文本框的常用事件方法名方法名方法作用方法作用Clear()清除文本框内容事件名事件名事件作用事件作用TextChanged文本框最常用的事件,也是默认事件。当文本框的文本内容发生变化时,触发该事件【实例实例12-6】创建一个创建一个Windows窗体应用程序,设计一个加法计算器。窗体应用程序,设计一个加法计算器。实例描述:设计如图实例描述:设计如图12-13所示界面

44、,在前两个文本框中输入两所示界面,在前两个文本框中输入两个数字后,点击【个数字后,点击【=】按钮,计算前两个数的和并显示在第三个只】按钮,计算前两个数的和并显示在第三个只读文本框中。读文本框中。图12-13 实例12-6界面设计实例分析:本程序计算操作是发生在点实例分析:本程序计算操作是发生在点击【击【=】按钮后的,因此,应处理【】按钮后的,因此,应处理【=】按钮】按钮的的Click事件。在该事件中,首先获取两个事件。在该事件中,首先获取两个文本框的内容,并分别转换成文本框的内容,并分别转换成double类型的类型的数据,然后进行加运算,并将结果显示在第数据,然后进行加运算,并将结果显示在第三

45、个文本框中。三个文本框中。实例实现:步骤如下:实例实现:步骤如下:(1)创建)创建Windows 窗体应用程序项目窗体应用程序项目Example12_6。(2)从左到右依次放置一个)从左到右依次放置一个TextBox(Name为为“textBox1”)、一个)、一个Label(Text为为“+”)、一个)、一个TextBox(Name为为“textBox2”)、一个)、一个Button(Text为为“=”)、一个文本框()、一个文本框(Name为为“textBox3”,ReadOnly为为“True”)。)。(3)双击【)双击【=】Button,创建其,创建其Click事件处理函数,编写代码如

46、下:事件处理函数,编写代码如下:private void button1_Click(object sender, EventArgs e) /定义两个变量,分别用于存放两个运算数定义两个变量,分别用于存放两个运算数 double num1, num2; /TryParse方法尝试将第一参数字符串转换成方法尝试将第一参数字符串转换成double类型的数据类型的数据 /如果转换成功,将转换后的如果转换成功,将转换后的double数据赋给输出参数(第二参数数据赋给输出参数(第二参数),并返回,并返回True /否则返回否则返回false if (!double.TryParse(textBox1.

47、Text, out num1)| !double.TryParse(textBox2.Text, out num2) MessageBox.Show(必须输入数字!必须输入数字!); return; double result = num1 + num2; /将计算结果显示在将计算结果显示在TextBox3中中 textBox3.Text = result.ToString();【实例实例12-6】创建一个创建一个Windows窗体应用程序,设计一个加法计算器。窗体应用程序,设计一个加法计算器。【实例实例12-7】创建一个创建一个Windows窗体应用程序,制作一个文本同步复写器。窗体应用程序

48、,制作一个文本同步复写器。实例描述:程序界面如图实例描述:程序界面如图12-14所示。要求,在上面文本框中输所示。要求,在上面文本框中输入内容时,下面文本框与上面文本框保持同步更新内容。入内容时,下面文本框与上面文本框保持同步更新内容。图12-14 实例12-7界面设计实例分析:本程序要求在上面文本框中实例分析:本程序要求在上面文本框中输入内容的同时,处理下面文本框的更新,输入内容的同时,处理下面文本框的更新,也就是在上面文本框内容发生变化的时候,也就是在上面文本框内容发生变化的时候,执行更新操作,其实就是触发了上面文本框执行更新操作,其实就是触发了上面文本框的的TextChanged事件,每

49、输入或删减一个字事件,每输入或删减一个字符,都会触发一次符,都会触发一次TextChanged事件。在事件。在TextChanged事件处理函数中,只要把上面事件处理函数中,只要把上面文本框的内容赋给下面的文本框即可。文本框的内容赋给下面的文本框即可。实例实现:步骤如下:实例实现:步骤如下:(1)创建)创建Windows 窗体应用程序项目窗体应用程序项目Example12_7。(2)向窗体依次添加一个)向窗体依次添加一个Label(Text为为“原文文本:原文文本:”),一个),一个Text Box(Name为为“textBox1”,Multiline为为“True”),一个),一个Label

50、(Text为为“同步更新文同步更新文本:本:”),一个),一个TextBox(Name为为“textBox2”,Multiline为为“True”) 。(3)双击)双击textBox1,创建其,创建其TextChanged事件处理函数,编写代码如下:事件处理函数,编写代码如下: private void textBox1_TextChanged(object sender, EventArgs e) textBox2.Text = textBox1.Text; 【实例实例12-7】创建一个创建一个Windows窗体应用程序,制作一个文本同步复写器。窗体应用程序,制作一个文本同步复写器。面板控件

51、面板控件Panel也是也是Windows窗体应用程序最常用的容器控件,开发人员经常将窗体应用程序最常用的容器控件,开发人员经常将完成同一业务的各个控件放入同一个完成同一业务的各个控件放入同一个Panel内,以达到方便统一控制的目的。面板控内,以达到方便统一控制的目的。面板控件是件是System.Windows.Forms.Panel类或其派生类的对象。类或其派生类的对象。表12-11 面板的常用属性属性名属性名属性作用属性作用常用可选值常用可选值值作用值作用AutoScroll如果Panel内的某些控件坐标超出了Panel的可见区,该属性控制是否自动生成滚动条True自动生成滚动条False不

52、自动生成BackColor设置Panel的背景色 Controls任何容器控件都具备Controls属性,包括窗体。Controls属性是个集合,其内存储容器控件内的所有子控件。它具备集合的一切特性,如Add()、Remove()、RemoveAt()、Clear()等方法 一般情况下不需要调用面板控件的方法来达到某种目的,也不需要触发一般情况下不需要调用面板控件的方法来达到某种目的,也不需要触发面板的事件。面板的事件。【实例实例12-8】创建一个创建一个Windows窗体应用程序,遍历显示学生基本信息。窗体应用程序,遍历显示学生基本信息。实例描述:设计如图实例描述:设计如图12-15所示界面

53、。遍历实现准备好的学生信息,如果学生是所示界面。遍历实现准备好的学生信息,如果学生是普通学生,则仅显示学号、姓名和专业信息,研究方向和导师姓名区域全部隐藏。普通学生,则仅显示学号、姓名和专业信息,研究方向和导师姓名区域全部隐藏。如果是研究生,还需要显示他的研究方向和导师姓名。点击【上一个】、【下一个】如果是研究生,还需要显示他的研究方向和导师姓名。点击【上一个】、【下一个】按钮可向前、向后依次遍历集合中的学生。按钮可向前、向后依次遍历集合中的学生。图12-15 实例12-8界面设计实例分析:本实例考查知识点较多:首先,考查学实例分析:本实例考查知识点较多:首先,考查学生和研究生的面向对象类设计

54、以及继承的应用(研究生和研究生的面向对象类设计以及继承的应用(研究生也是学生,只不过是特殊的学生);其次,考查集生也是学生,只不过是特殊的学生);其次,考查集合的应用,需要在程序中预置一个学生集合,里面既合的应用,需要在程序中预置一个学生集合,里面既有普通学生又有研究生;第三,考查集合的遍历,点有普通学生又有研究生;第三,考查集合的遍历,点击【上一个】、【下一个】按钮时需依次遍历集合元击【上一个】、【下一个】按钮时需依次遍历集合元素;最后,考查素;最后,考查Panel控件的应用,需通过控件的应用,需通过Panel整体控整体控制研究生特有信息区域的显示和隐藏。制研究生特有信息区域的显示和隐藏。实

55、例实现:实例实现:(1)创建)创建Windows 窗体应用程序项目窗体应用程序项目Example12_8。(2)按照图)按照图12-15界面效果,添加相应的控件。界面效果,添加相应的控件。(3)创建两个类:普通学生)创建两个类:普通学生Student类和研究生类和研究生GraduateStudent类。代码如下:类。代码如下:class Student/普通学生类普通学生类 public string stuId;/学号学号 public string stuName;/姓名姓名 public string stuMajor;/专业专业 public Student(string stuId,

56、 string stuName, string stuMajor) this.stuId = stuId; this.stuName = stuName; this.stuMajor = stuMajor; class GraduateStudent : Student/研究生类,继承普通学生类研究生类,继承普通学生类 public string researchDirection;/研究方向研究方向 public string supervisorName;/导师姓名导师姓名 public GraduateStudent(string stuId, string stuName, strin

57、g stuMajor, string researchDirection, string supervisorName): base(stuId, stuName, stuMajor) this.researchDirection = researchDirection; this.supervisorName = supervisorName; 【实例实例12-8】创建一个创建一个Windows窗体应用程序,遍历显示学生基本信息。窗体应用程序,遍历显示学生基本信息。实例实现:实例实现:(4)编写)编写Form1.cs代码如下:代码如下:public partial class Form1 :

58、 Form public Form1() InitializeComponent(); /学生集合,用于存储所有的学生,包括研究生学生集合,用于存储所有的学生,包括研究生 List students = new List(); /当前遍历到的学生索引当前遍历到的学生索引 int currentNumber = 0; /窗体加载事件处理函数窗体加载事件处理函数 private void Form1_Load(object sender, EventArgs e) /创建一个普通学生,添加到学生集合创建一个普通学生,添加到学生集合 students.Add(new Student(95001, 张

59、三张三, 计算机科学与技术计算机科学与技术); /创建一个研究生,添加到学生集合创建一个研究生,添加到学生集合 students.Add(new GraduateStudent(95002, 李四李四, 软件工程软件工程,软件工程管理软件工程管理,刘明刘明); /创建一个普通学生,添加到学生集合创建一个普通学生,添加到学生集合 students.Add(new Student(95003, 王五王五, 软件工程软件工程); /显示当前学生信息,即第一个学生显示当前学生信息,即第一个学生 ShowCurrentStudent(); 【实例实例12-8】创建一个创建一个Windows窗体应用程序,

60、遍历显示学生基本信息。窗体应用程序,遍历显示学生基本信息。实例实现:实例实现: /自定义函数,显示当前学生信息自定义函数,显示当前学生信息 private void ShowCurrentStudent() /无论普通学生还是研究生,先将基本信息取出放入控件中无论普通学生还是研究生,先将基本信息取出放入控件中 textBox1.Text = studentscurrentNumber.stuId; textBox2.Text = studentscurrentNumber.stuName; textBox3.Text = studentscurrentNumber.stuMajor; /如果当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论