第三章 GUI程序设计_第1页
第三章 GUI程序设计_第2页
第三章 GUI程序设计_第3页
第三章 GUI程序设计_第4页
第三章 GUI程序设计_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

第三章GUI程序设计GUI(GraphicsUserInterface),即图形用户界面,是指用图形的方式实现人与计算机之间的交互。1版权所有目录GUI程序设计方法窗体对话框标签、文本框和按钮菜单和多文档界面工具栏和状态栏单选钮、复选钮、组和面板列表框、组合框和复选列表框2版权所有3.1GUI程序设计方法3.1.1GUI程序模型3版权所有3.1.2建立GUI应用程序的一般步骤利用C#编写GUI应用程序的一般步骤:(1)建立“Windows应用程序”项目(2)设计应用程序界面(3)设置窗口和控件的属性(4)编写事件方法代码4版权所有3.1.3控件的基本属性下面介绍的一些属性是多数控件都具有的属性:(1)Name:用来获取或设置控件的名称。名称是控件的标识。(2)Text:用来获取或设置控件的标题文字。(3)Width和Height:用来获取或设置控件的大小。(4)Left和Top:用来获取或设置控件的位置。(5)Visible:用来获取或设置控件是否可见。取值为true或false。(6)Enabled:用来获取或设置控件是否对响应交互。取值为true或false。(7)ForeColor:用来获取或设置控件的前景色。(8)BackColor:用来获取或设置控件的背景色。5版权所有(9)Font:用来获取或设置控件的字体。(10)BorderStyle:用来获取或设置控件的边框。(11)AutoSize:用来获取或设置控件是否自动调整大小。取值为true或false。(12)Anchor:获取或设置控件的哪些边缘锚定到其容器边缘。(13)Dock:获取或设置控件停靠到父容器的哪一个边缘。(14)TabIndex:用来获取或设置控件的Tab键顺序。(15)TextAlign:用来确定文本对齐方式。(16)Cursor:用来获取或设置鼠标移到控件上时,被显示的鼠标指针的类型。6版权所有【案例3-1】图片的显示和隐藏。在窗体上放置一个图片框、一个“显示”按钮和一个“隐藏”按钮。开始运行时,图片不可见,“显示“按钮可用,“隐藏”按钮不可用。单击“显示”按钮后,图片显示出来,“显示”按钮变成不可用,而“隐藏”按钮变成可用。7版权所有3.1.4事件和事件处理1.事件处理模型在C#中,Windows窗体应用程序中的事件处理是通过委托来实现的。在.NET框架中,Delegate类用于生成事件处理机制。一个委托由对对象的引用以及对该对象内部一个或多个方法的引用组成的。在委托事件模型中,“委托”实际上是将事件和处理事件的方法绑定到一起。委托可以将一个事件绑定到单个方法或多个方法;也允许将多个事件绑定到一个方法。8版权所有事件处理程序是绑定到事件的方法。当引发事件时,执行事件处理程序内的代码。每个事件处理程序提供两个使您得以正确处理事件的参数。如下为Button控件的Click事件的事件处理程序:privatevoidbutton1_Clicked(objectsender,System.EventArgse){}

第一个参数sender提供对引发事件的对象的引用。第二个参数e传递针对要处理的事件的对象。通过引用对象的属性(有时引用其方法)可获得一些信息,如鼠标事件中鼠标的位置或拖放事件中传输的数据。9版权所有2.键盘事件当用户对键盘进行操作时,系统会产生相应的键盘事件。当用户按下某个键时,就会发生KeyDown事件,随后便发生KeyPress事件。而当用户释放某个键时,发生KeyUp事件。当用户按住某个键不放时,KeyDown和KeyPress事件会不停地重复触发。表3-2列出了这些键盘事件的含义与说明。10版权所有11版权所有3.鼠标事件鼠标是一种定位输入设备,通常有两个或三个按钮(左、中和右按钮),还可能有滚轮。它的基本操作方式主要有:单击、双击和滚动。12版权所有13版权所有【案例3-2】利用鼠标和键盘控制图片显示。窗体上用图片框显示一张图片。当在图片框上单击鼠标左键时图片放大10%,单击鼠标右键时图片缩小10%。若转动滚轮,则图片根据前后方向垂直移动,移动步长为12。鼠标在图片框上移动时,窗体标题显示当前位置坐标,鼠标在图片框上悬停时,显示提示信息“单击左键放大图片,单击右键缩小图片,用光标移动图片”。鼠标离开图片框时,显示“利用鼠标和键盘控制图片显示”。按下各方向键时,图片按相应的方向移动;当按ESC键时,窗体关闭,退出程序;当按下其他键时,在窗体标题上显示所按的键的名称。14版权所有15版权所有3.2窗体3.2.1窗体的创建创建窗体可以有两种方法:一种是手动创建,即直接编写代码,一种是用项目模板来创建。无论怎样创建,都要用到.NET框架的System.Windows.Forms命名空间和System.Windows.Forms.Form类。16版权所有3.2.2窗体的属性和方法窗体的属性决定了窗体的外观和操作。下面是窗体的一些主要属性:(1)Text:用来指定窗体的标题内容。(2)Size和StartPosition:用来指定窗体显示的大小和位置。(3)ForeColor:用来更改窗体内所有控件默认前景色。(4)FormBorderStyle:用来指定窗体的边框类型。(5)MinimizeBox和MaximinzeBox:指定窗体是否显示最小化、最大化按钮。(6)TopMost:用来指定窗体是否应显示为应用程序的最顶层窗体。(7)WindowState:用来指定窗体运行时的状态。(8)Opacity:用来指定窗体的不透明度级别(0.0~1.0)。(9)Icon:用来指定窗体的图标。17版权所有窗体的常用方法有:(1)Acitvate():激活窗体使其获得焦点。(2)BringToFront()和SendToBack():将某个窗体置于Z顺序的前面(或后面)。(3)Close():关闭窗体。(4)Contains():判断指定控件是否为窗体的子控件。(5)GetChildAtPoint():检索位于指定位置处的子控件。(6)GetNextControl():按照窗体上子控件的Tab顺序向前或向后检索下一个控件。(7)Hide():隐藏窗体。(8)Invalidat():使窗体的特定区域无效并发送重新绘制消息。(9)Refresh():强制控件使其工作区无效并立既重绘自己和任何子控件。(10)ResetXXX():将XXX属性重置为其默认值。(11)Show()和ShowDialog():Show()和ShowDialog()都可以用来显示窗体。18版权所有【案例3-3】启动界面。本案例建立一个启动界面程序,运行效果如图3-4所示。当程序运行时,启动界面显示一幅图片,进度条自动开始走动,图片随进度条的走动渐渐显示清晰,进度条到头时,关闭该窗口,进入主窗口,19版权所有20版权所有3.3对话框对话框是一种简单的窗口,主要用于向用户显示提示信息或接受用户输入的信息。在C#提供了一些标准的对话框供用户使用。对话框与窗口的不同,主要是对话框可以处于模态状态。处于模态的对话框,要求用户必须作出响应,否则无法激活其他窗口。21版权所有3.3.1消息对话框消息对话框是最简单的一类对话框,用来显示一些提示、警告等信息。在.NET框架中,使用MessageBox类来封装消息对话框,但它不能创建MessageBox实例,而只能调用其静态成员方法Show显示消息对话框。22版权所有例如,下面代码运行结果如图所示。MessageBox.Show("你喜欢VisualC#.NET吗?");23版权所有例如下面的代码,其运行结果如图所示。if(DialogResult.Yes==MessageBox.Show("退出吗?","提问",

MessageBoxButtons.YesNo,

MessageBoxIcon.Question, MessageBoxDefaultButton.Button1 )) {

Application.Exit(); }24版权所有3.3.2通用对话框在Windows应用程序中,经常进行打开或保存文件、选择颜色或字体、打印文档等操作。.NET框架中System.Windows.Forms命名空间中为这些操作提供了一组标准用户界面对话框,它们称为“通用对话框”,并有相应的通用对话框类支持,它们都是从一个公共的基类System.Windows.Forms.CommonDialog派生而来的。25版权所有26版权所有3.3.3自定义对话框用户可以根据自己的需要创建对话框。自定义的对话框实际上也是窗体。作为对话框的窗体在外观上与一般的窗体在外观上是有所区别的,对话框没有控制菜单及最大化和最小化按钮,不能改变大小,多以模态方式显示,以防止用户在对话框外执行任务。27版权所有3.4标签、文本框和按钮3.4.1

标签(Label)

.NET框架中Label类封装了标签控件。标签用于显示用户不能编辑的文本或图像。1.标签的属性(1)BackColor和AutoSize:通过将Label的BackColor属性设置为Color.Transparent,可使该标签成为透明的。使用透明标签时,请只使用当前设备坐标系在容器上绘制,否则就可能无法正确绘制Label背景。

Label控件可为单行或多行,可以为固定大小,也可以自动调整自身大小以适应其标题。AutoSize

属性设为真时,标签自动调整大小以适应较大或较小的标题。如果将AutoSize

设置为false,则Text属性中指定的文字将切换到下一行(如果可能),但该控件不会增大。28版权所有(2)Image:获取或设置显示在Label上的图像。(3)ImageAlign:获取或设置在控件中显示的图像的对齐方式。(4)ImageIndex:获取或设置在Label上显示的图像的索引值。(5)ImageList:获取或设置包含要在Label控件中显示的图像的ImageList。(6)UseMnemonic:获取或设置一个值,该值指示控件是否将控件的Text属性中的“and”符(&)解释为访问键前缀字符。

29版权所有2.使用Label控件创建访问键使用Label控件创建访问键的步骤如下:(1)先添加标签和另一个控件。将该标签的TabIndex

属性设置为比另一个控件小1。(2)将该标签的UseMnemonic

属性设置为true。(3)在该标签的Text属性中使用“and”符(&)为该标签分配访问键。label1.UseMnemonic=true;label1.Text="&Print";label2.UseMnemonic=true;label2.Text="&Copy&&Paste";30版权所有3.使用标签显示图像除了显示文本外,Label控件还可使用Image属性显示图像,或使用ImageIndex

和ImageList

属性组合显示图像。31版权所有3.4.2文本框

.NET框架中TextBox类封装了文本框控件,它是从TextBoxBase类派生的,用于显示或输入文本。(1)Multiline和ScrollBars:Multiline获取或设置一个值,该值指示它是否为多行文本框控件。ScrollBars获取或设置哪些滚动条应出现在多行TextBox

控件中。(2)AcceptsTab

和AcceptsReturn

:AcceptsReturn获取或设置一个值,该值指示在多行TextBox

控件中按ENTER键时,是在控件中创建一行新文本还是激活窗体的默认按钮。AcceptsTab

获取或设置一个值,该值指示在多行文本框控件中按TAB键时,是否在控件中键入一个TAB字符,而不是按选项卡的顺序将焦点移动到下一个控件。32版权所有(3)MaxLength:获取或设置用户可在文本框控件中键入或粘贴的最大字符数。(4)PasswordChar:获取或设置字符,用于屏蔽单行TextBox

控件中的密码字符。(5)ReadOnly:获取或设置一个值,该值指示文本框中的文本是否为只读。33版权所有2.文本框的基本操作(1)设置焦点使用Focus()方法。例如:textBox1.Focus();

(2)选择文本选择文本一般用鼠标或键盘进行操作。如果用代码进行,可以使用文本框的从基类TextBaseBox继承的方法Select()或SelectAll()。Select()方法有两个参数分别确定要选择文本的起始位置和要选择文本的字符个数。也可以利用文本框的属性来选择文本,SelectionStart、SelectionText、SelectionLength:34版权所有(3)文本操作添加文本使用AppendText()方法,清除文本使用Clear()方法,撤销文本的上一次操作用Undo()方法;从文本框的撤销缓冲区中清楚关于最近操作的信息使用ClearUndo()方法。(4)限制文本输入要限制某些文本不被输入到TextBox

控件,可以为KeyDown

事件创建一个事件处理程序,以便验证在控件中输入的每个字符。也可以通过将ReadOnly

属性设置为true来限制TextBox

控件中的所有数据项输入。(5)获取多行文本框文本通过Text属性可获得全部文本,不能单独获得某一行文本。要获得某一行文本,可使用Lines属性,Lines属性是一个字符串数组,它的每一个元素对应多行文本框的一行文本。35版权所有3.文本框的常用事件(1)GotFocus事件:该事件在文本框接收焦点时发生。(2)LostFocus事件:该事件在文本框失去焦点时发生。(3)TextChanged事件:文本的Text属性的值改变时发生。

36版权所有3.5菜单和多文档界面3.5.1菜单Windows窗体上的菜单是使用MainMenu

对象创建的,该对象是一个MenuItem

对象集合。可以在设计时向Windows窗体添加菜单,方法是添加MainMenu

组件然后使用菜单设计器向其追加菜单项。还可以用编程方法添加菜单,方法是向Windows窗体添加一个或多个MainMenu

对象并向该集合中添加MenuItem

对象。37版权所有1.菜单的主要属性(1)MainMenu的属性

MenuItems:获取一个值,通过该值指示与菜单关联的MenuItem

对象的集合。通过集合类的通用操作方法Add、AddRange等可以用来添加菜单项。

RightToLeft:获取或设置控件显示的文本是否从右向左显示。(2)MenuItem的主要属性

Checked:获取或设置一个值,通过该值指示选中标记是否出现在菜单项文本的旁边。

Index:获取或设置一个值,通过该值指示菜单项在其父菜单中的位置。

IsParent:获取一个值,通过该值指示菜单项是否包含子菜单项。

MenuItems:获取一个值,通过该值指示与菜单关联的MenuItem

对象的集合。

MergeOrder:获取或设置一个值,通过该值指示菜单项与另一个项合并时的相对位置。38版权所有MergeType:获取或设置一个值,通过该值指示该菜单项的菜单与另一个菜单合并时该菜单项的行为。Mnemonic:获取一个值,通过该值指示与此菜单项关联的助记字符。MdiList:获取或设置一个值,通过该值指示是否使用在关联窗体内显示的多文档界面(MDI)子窗口列表来填充菜单项。RadioCheck:获取或设置一个值,通过该值指示MenuItem(如果已选中)是否显示单选按钮而不是选中标记。Shortcut:获取或设置一个值,通过该值指示与菜单项关联的快捷键。ShowShortcut:获取或设置一个值,通过该值指示与菜单项关联的快捷键是否在菜单项标题的旁边显示。Text:获取或设置一个值,通过该值指示菜单项标题。Visible:获取或设置一个值,通过该值指示菜单项是否可见。39版权所有2.菜单的事件在菜单类Menu、MainMenu和MenuItem中,只有MenuItem类具有事件。常用的事件有Click、Popup和Select。(1)Click事件。当单击菜单项或使用为该菜单项定义的快捷键或访问键选择菜单项时发生。(2)Popup事件。在显示菜单项的菜单项列表之前发生。(3)Select事件。当用户将光标放在菜单项上时发生。40版权所有3.使用菜单设计器创建菜单的一般步骤(1)在设计时向Windows窗体添加菜单。(2)添加菜单项。(3)修改和删除菜单项。(4)添加分隔符和快捷键。

(5)为菜单项的Click事件添加代码。41版权所有3.5.2多文档界面1.多文档界面的特性所有子窗体均显示在MDI父窗体的工作区中。用户可以改变子窗体大小或移动子窗体,但被限制在MDI父窗体中。当最小化MDI子窗体时,它的图标将显示于MDI父窗体上而不是在任务栏中。当最小化MDI父窗体时,所有的子窗体也被最小化,只有MDI父窗体的图标出现在任务栏。当最大化一个MDI子窗体时,它的标题与MDI父窗体的标题一起显示在MDI父窗体的标题栏上。MDI父窗体和MDI子窗体都可以有自己的菜单,当子窗体被加载时,其上的菜单可以按指定的方式与父窗体的菜单合并。42版权所有2.与多文档界面有关的属性、方法和事件(1)常用的MDI父窗体的属性ActiveMdiChild:表示当前活动的MDI子窗体。IsMdiContainer:获取或设置窗体是否为MDI父窗体。MdiChildren:以数组形式返回MDI子窗体。(2)常用的MDI子窗体的属性:IsMdiChild:获取或设置窗体是否都为MDI子窗体。MdiParent:指定子窗体的MDI父窗体。(3)与多文档界面有关的方法和事件与多文档界面有关的方法,主要是父窗体的LayoutMdi方法,该方法的调用格式如下:MDI父窗体名.LayoutMdi(Value);43版权所有3.菜单合并父窗体和子窗体可以使用不同的菜单,这些菜单会在打开子窗体时合并。可以通过设置MergeOrder属性和MergeType属性指定合并的方式。(1)MergeOrder:用来确定当两个菜单合并时菜单项出现的顺序,具有较低MergeOrder的菜单项会首席出现。(2)MergeType:当合并的两个菜单的某些菜单项的MergeOrder属性值相等时,使用该属性可以控制这些菜单项的显示方式。44版权所有3.6工具栏和状态栏在Windows窗体中,ToolBar类用来封装工具栏的外观和功能。1.常用的属性(1)ToolBar的属性(2)ToolBarButton的属性2.用设计器向窗体添加工具栏一般步骤45版权所有3.6.2状态栏通过将ShowPanels

属性设置为false(默认值)并将状态栏的Text属性设置为希望出现在状态栏中的文本,可在状态栏中显示一个消息。通过将ShowPanels

属性设置为true并使用StatusBarPanelCollection

类的Add方法,可将状态栏分割为多个面板以显示一种以上类型的信息。46版权所有3.7组框和面板3.7.1组框(GroupBox)GroupBox

显示围绕一组控件的框架(带或不带标题)。使用GroupBox

对窗体上的控件集合进行逻辑分组。组框是可用于定义控件组的容器控件。组框的典型用途是作为包含RadioButton控件的逻辑组。如果有两个组框,每个组框都包含多个单选按钮,每组按钮都互相排斥,则每组设置一个选项值。通过使用Controls属性的Add方法,可将控件添加到GroupBox。47版权所有3.7.2面板(Panel)Panel是一个包含其他控件的控件。可以使用Panel来组合控件的集合,例如一组RadioButton

控件。与其他容器控件(如GroupBox

控件)一样,如果Panel控件的Enabled属性设置为false,则也会禁用包含在Panel中的控件。48版权所有3.8复选钮和单选钮3.8.1复选钮(CheckBox)

CheckBox可为用户提供一项选择,如“真/假”或“是/否”。复选钮控件可以显示一个图像或文本,或两者都显示。多个CheckBox控件构成一组选项时,可以进行多重选择,相互之间不影响。49版权所有(1)复选钮的基本属性Appearance:获取或设置确定复选框控件外观的值。如果将Appearance属性设置为Appearance.Button,则RadioButton

控件的外观可以像命令按钮一样。当选定它时,它看似已被按下。Text:获取或设置与此控件关联的文本。TextAlign:获取或设置与CheckBox

控件关联的文本标签的对齐方式。Image:获取或设置显示在按钮控件上的图像。ImageList:获取或设置包含按钮控件上显示的Image的ImageList。ImageIndex:获取或设置按钮控件上显示的图像的图像列表索引值。Checked:获取或设置一个值,该值指示是否已选中控件。50版权所有(2)复选钮的主要事件CheckedChanged事件。当Checked属性的值更改时发生。CheckStateChanged事件。当CheckState

属性的值更改时发生。Click事件。在单击控件时发生。51版权所有3.8.2单选按钮(RadioButton)RadioButton

和CheckBox

控件的功能相似:它们提供用户可以选择或清除的选项。不同之处在于,可以同时选定多个CheckBox

控件,而单选按钮却是互相排斥的。52版权所有(1)单选按钮的基本属性Appearance:获取或设置确定单选按钮控件外观的值。如果将Appearance属性设置为Appearance.Button,则RadioButton

控件的外观可以像命令按钮一样。当选定它时,它看似已被按下Text:获取或设置与此控件关联的文本。TextAlign:获取或设置与CheckBox

控件关联的文本标签的对齐方式。Image:获取或设置显示在按钮控件上的图像。ImageList:获取或设置包含按钮控件上显示的Image的ImageList。ImageIndex:获取或设置按钮控件上显示的图像的图像列表索引值。Checked:获取或设置一个值,该值指示是否已选中控件。53版权所有(2)单选按钮的主要事件CheckedChanged事件。当Checked属性的值更改时发生。Click事件。在单击控件时发生。54版权所有【案例3-6】单选钮和复选钮的使用。本案例建立一个使用单选钮和复选钮的应用程序,界面上有一个文本框,两组单选钮和一组复选钮。两组单选钮分别用于设置文本框的字体和字号,一组复选钮用于设置文本框的字型。55版权所有3.9列表框、组合框和复选列表框3.9.1列表框(ListBox)ListBox

控件通过显示多个选择项,供用户选择其中一项或多项,达到与用户对话的目的。ListBox

控件可使用SelectionMode

属性提供单项选择或多重选择。ListBox

还提供MultiColumn

属性,以启用按多列显示项而不是项的垂直列表。这使控件得以显示更多可见项,并使用户不必滚动到某项。56版权所有(1)列表框的主要属性Items:获取或设

温馨提示

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

评论

0/150

提交评论