一共470多例winform 界面特效的源码。
实例467 访问带验证模式的Sqlserver 2000数据库... 197
实例471 根据cpu序列号、磁盘序列号设计软件注册程序... 214
1.1 菜单应用实例
菜单是程序开发中经常使用的界面元素,合理利用菜单不但可以使用户非常方便的操作程序的功能,更能使效率提高,适应人性化的潮流。下面通过几个应用实例,介绍菜单设计的方法和技术。
实例001
在开发图纸管理软件时,要求在菜单上记录用户最近打开的档案或图纸,以方便下次使用。如图1.1所示,单击“文件”菜单下的“打开文件”子菜单,打开需要查阅的图纸。下次运行该软件时,上次打开的文件名记录到“文件”菜单的历史菜单中,选择该菜单,即可打开相应的图纸文件。
要实现保存最近打开的文件,可以将在菜单中最近打开文件的文件名和路径保存到事先建立的*.ini文件中,系统启动时读取*.ini中的数据建立数组菜单,即可实现显示历史菜单的功能。
(1)创建一个项目,将其命名为Ex01_01,默认窗体为Form1。
(2)从工具箱中向Form1窗体添加MenuStrip控件,同时向窗体添加OpenFileDialog控件。创建一个“文件”主菜单,在其下面创建打开、关闭所有、退出等菜单选项。
(3)主要程序代码。
将打开文件路径写入INI文件的实现代码如下:
读取INI文件并将信息加入菜单的实现代码如下:
自定义方法ShowWindows()用来加载背景图片并显示窗体,实现代码如下:
根据本实例,读者可以开发以下程序。
实例002
在程序中经常使用弹出菜单,并且一个窗体中可以存在多个弹出菜单。开发过MDI窗体的读者可能都知道,当MDI子窗体最大化时,子窗体和主窗体的菜单能够自动的合并。这是如何实现的呢?本例实现了将两个弹出菜单动态的合并成一个弹出菜单的功能。实例效果如图1.2所示。
C#
public void AddRange (
)
参数说明如下。
l
(1)创建一个项目,将其命名为Ex01_02,默认窗体为Form1。
(2)从工具箱中向Form1窗体添加一个MenuStrip控件用来设计菜单;同时向窗体添加ContextMenuStrip控件用来设计右键菜单;选中MenuStrip控件创建一个“打开子窗体”主菜单,然后选中ContextMenuStrip控件为其添加子项。
(3)为程序添加一个窗体,默认名为Form2,同时向窗体添加ContextMenuStrip控件用来设计右键菜单,然后选中ContextMenuStrip控件为其添加子项。
(4)主要程序代码。
根据本实例,读者可以实现以下功能。
Windows的开始菜单非常的独特,在菜单的旁边有一条竖着的彩条,彩条中还写着文字。这种独特的菜单能够使程序的界面看起来更加的漂亮。本例中就实现了这种菜单,运行本例弹出“打开菜单”时,就会看到菜单的左边有一个紫色的彩条。实例效果如图1.3所示。
在C# 2.0中,MenuStrip控件中的子项ToolStripMenuItem已经包括了左侧的彩条,实现像开始菜单一样的菜单非常容易,不像在其他计算机语言的开发环境中,需要调用API才可以实现。如果想改变左侧竖着的彩条,只要给对应的菜单项设置相应的图片即可。
(1)创建一个项目,将其命名为Ex01_03,默认窗体为Form1。
(2)从工具箱中向Form1窗体添加MenuStrip控件。
(3)为MenuStrip控件添加相应的子项。
(4)为子项添加相应的图片。
根据本实例,读者可以实现以下功能。
有一些软件通常只是在后台运行,这些进程大部分时间不显示用户界面。可通过单击任务栏状态通知区域的图标来访问的病毒防护程序就是一个示例。Windows窗体中的NotifyIcon控件通常用于显示在后台运行的进程的图标,本实例利用该控件制作了一个任务栏托盘菜单。实例效果如图1.4所示。
要实现程序启动时出现在系统托盘中。必须要为窗体添加NotifyIcon 控件和ContextMenuStrip控件。
(1)创建一个项目,将其命名为Ex01_04,默认窗体为Form1。
(2)向Form1窗体添加NotifyIcon 控件和ContextMenuStrip控件,并为ContextMenuStrip控件添加子项。
(3)选择NotifyIcon 控件,在其属性窗口中将ContextMenuStrip属性设置为添加到窗体上的ContextMenuStrip控件,并为Icon属性设置图片。
根据本实例,读者可以开发以下程序。
如果管理程序功能菜单非常多,而用户只使用一些常用菜单,这时,可以将主菜单项下的不常用菜单隐藏起来。此种显示方式类似于对菜单进行拉伸。使用时,只需单击展开菜单,即可显示相应菜单功能。运行本例,效果如图1.5所示。
要实现可以拉伸的菜单,关键是要使用一个开关变量,同时调用ShowDropDown()方法,显示操作后的结果。下面详细介绍一下该方法。
ShowDropDown()方法用来显示与此ToolStripDrop DownItem关联的ToolStripDropDownItem控件。其语法结构如下:
public void ShowDropDown ()
另外,用ShowDropDown()方法还可以显示已由 DropDown 属性设置的下拉控件。
(1)创建一个项目,将其命名为Ex01_05,默认窗体为Form1。
(2)从工具箱中向Form1窗体添加MenuStrip控件,选中MenuStrip控件为其添加子项。
(3)双击“展开(关闭)子项”为其双击事件添加处理代码。
(4)主要程序代码。
根据本实例,读者可以开发以下功能。
如果管理程序功能菜单非常多,一些功能中又包括许多子功能,这时可以使用级联菜单来组织系统的各个功能。实例运行结果如图1.6所示。
图1.6
制作级联菜单需要使用MenuStrip控件。
(1)创建一个项目,将其命名为Ex01_06,默认窗体为Form1。
(2)在Form1窗体添加MenuStrip控件,选中MenuStrip控件为其添加子项和级联子项。
根据本实例,读者可以开发以下功能。
1.2 工具栏设计
在菜单栏中将常用的菜单命令以工具栏按钮的形式显示,并作为快速访问方式。工具栏位于菜单栏的下方,由许多命令按钮组成,每个命令按钮上都有一个形象的小图标,以标识命令按钮的功能。由于工具栏这种直观易用的特点,使其已成为Windows应用程序的标准界面。
工具栏是窗体的组成部分之一,工具栏中的按钮可以设定完成一些较为常用或重要的功能,本例中设计了一个工具栏,并且为该工具栏作了一些修饰,使工具栏带有背景。背景图案可以透过按钮显示,效果如图1.7所示。
工具栏中的背景是一幅图片,在运行时应该将该图片绘制到工具栏上,在.NET 2.0中,只需将工具栏按钮的BackGroundImage的属性设置为对应的图片即可。
(1)创建一个项目,将其命名为Ex01_07,默认窗体为Form1。
(2)从工具箱中为Form1窗体添加ToolStrip控件,并为工具栏添加相应的按钮。
(3)为工具栏的按钮设置相应的BackGroundImage属性,相应的的图片就会变成按钮的背景。
根据本实例,读者可以开发以下功能。
通常情况下,窗体显示在屏幕的中心。对于使用频率非常高的软件,通常放在屏幕上端以浮动工具栏形式显示。下面通过实例介绍浮动工具栏的设计方法。运行程序,程序可以停在屏幕的任何位置,当窗体失去焦点后,窗体将自动隐藏。效果如图1.8所示。
窗体是否要隐藏,重要的是要判断在操作中,通过窗体的Focused属性,是否可以确定窗体有焦点。在窗体有焦点时,该窗体正在被操作,这时需要完全显示在屏幕当中,如果窗体没有焦点,通过设置窗体到屏幕的高度,来确定窗体的隐藏部分。下面详细介绍一下Focused属性。
Focused属性用来获取一个值,该值指示控件是否有输入焦点。其语法结构如下:
public virtual bool Focused { get; }
l
(1)创建一个项目,将其命名为Ex01_08,默认窗体为Form1。
(2)从工具箱中为Form1窗体添加Panel控件,并为Panel控件添加相应的背景图片。
(3)在Panel上添加两个Label控件,并将其Text属性设置为“打开”和“关闭”,同时把两个Label控件的背景颜色设置为透明。
(4)主要程序代码。
根据本实例,读者可以开发以下功能。
工具栏是窗体的组成部分之一,工具栏中的按钮可以完成一些较为常用或重要的功能,本例中设计了一个工具栏,使工具栏带有下拉菜单,效果如图1.9所示。
带下拉菜单的工具栏在其他计算机语言中实现比较复杂,但在.NET 2.0中已经提供了这个功能,只需将工具栏按钮的类型设置为DropDownButton即可。
(1)创建一个项目,将其命名为Ex01_09,默认窗体为Form1。
(2)从工具箱中为窗体添加ToolStrip控件,并为工具栏添加相应的按钮,在按钮的下拉选项中选择DropDownButton类型。
(3)为工具栏DropDownButton类型的按钮设置相应的下拉菜单,就可以轻松实现带下拉菜单的工具栏。
根据本实例,读者可以开发以下功能。
在文档视图结构的应用程序中,默认情况下,当鼠标在工具栏按钮上停留片刻,会出现一个工具提示条。本例实现了一个具有提示功能的工具栏,效果如图1.10所示。
具有提示功能的工具栏在其他计算机语言中实现也许比较复杂,但在.NET 2.0中已经提供了这个功能。只需将工具栏按钮的ToolTipText设置为要提示的内容即可。下面详细介绍一下该属性。
ToolTipText属性用来获取或设置作为控件的ToolTip显示的文本。其语法结构如下:
public string ToolTipText { get; set; }
l
(1)创建一个项目,将其命名为Ex01_10,默认窗体为Form1。
(2)从工具箱中为Form1窗体添加ToolStrip控件用来设计工具栏,并为工具栏添加相应的按钮。
(3)为相应按钮的ToolTipTile属性设置提示内容,就可以轻松实现具有提示功能的工具栏。
根据本实例,读者可以开发以下功能。
1.3
状态栏是用来显示当前程序状态的。状态栏可以分为多个面板,用来显示不同状态下的内容,本节主要介绍了状态栏的用法以及如何在状态栏中添加控件。
在设计程序界面时,为了规范界面,可以将一些控件放置在状态栏中,这样既能起到控制程序的作用,又能使界面和谐、美观。运行程序,在窗体的状态栏中加入了显示时间检查框。效果如图1.11所示。
在状态栏中添加检查框比较容易,只需先将状态栏加入窗体,然后将检查框从工具箱中拖入状态拦即可。
(1)创建一个项目,将其命名为Ex01_11,默认窗体为Form1。
(2)从工具箱中为Form1窗体添加StatusStrip控件,并从工具箱中为状态栏添加CheckBox控件。
(3)主要程序代码。
根据本实例,读者可以开发以下功能。
上网浏览网页的读者都用过IE浏览器,读者是否注意到该浏览器的状态栏,在打开网页的过程中,浏览器下边的状态栏中有一个进度条显示当前网页的载入进度,这样的状态栏使界面显得更加丰富多彩,并且非常实用。本例将设计一个带进度条的状态栏,并且在程序运行当中进度条可以显示其进度,该实例运行结果如图1.12所示。
带进度条的状态栏在别的开发环境下实现相对比较复杂,但在.NET 2.0中已经提供了这个功能,只需将状态栏的按钮类型设置为ProgressBar即可。通过设置ProgressBar的Step 属性指定一个特定值用以逐次递增Value属性的值,然后调用PerformStep方法来使该值递增,就可以实现带进度条的状态栏。
(1)创建一个项目,将其命名为Ex01_12,默认窗体为Form1。
(2)从工具箱中为Form1窗体添加StatusStrip控件,并为状态栏添加相应的按钮,在按钮的下拉选项中选择ProgressBar类型。
(3)设置ToolStripProgressBar1的Value属性、Maximum属性和Step属性。
(4)主要程序代码。
根据本实例,读者可以开发以下功能。
状态栏已经成为主界面必不可少的部分,状态栏一般用于显示程序状态、当前日期等,在状态栏中添加一张图片会使程序的主界面更有特色。运行本例,效果如图1.13所示。
状态栏中加入图标在.NET 2.0中实现非常容易,只要将对应状态栏面板的Image属性设置为要显示的图片即可。
(1)创建一个项目,将其命名为Ex01_13,默认窗体为Form1。
(2)从工具箱中为Form1窗体添加StatusStrip控件,并为状态栏添加相应的按钮,设置添加的按钮的Image属性为要显示的图片。
根据本实例,读者可以实现以下功能。
1.4
对于一些应用工具软件,界面不但要求人性化、漂亮,还要突出界面功能、使用方便,这样才能吸引用户使用。本节主要介绍了常用的几种菜单界面。
程序主界面包括菜单栏、工具栏、状态栏和树状视图。OutLook界面美观、友好,是一个很实用的程序主界面,并且菜单栏和工具栏是可移动的。运行本例效果如图1.14所示。
图1.14
一般程序的菜单栏和工具栏是不可移动的,但是只要将MenuStrip和ToolStrip控件的AllowItemRecorder属性设为True就可以移动。在本例中使用MenuStrip控件制作菜单栏,使用ToolStrip制作工具栏,使用StatusStrip控件制作状态栏。下面详细介绍一下这几个控件的属性。
1.ToolStrip. AllowItemReorder属性
获取或设置一个值,该值指示是否由ToolStrip类私自处理拖放和项重新排序。其结构如下:
public bool AllowItemReorder { get; set; }
l
2.MenuStrip. AllowItemReorder属性
获取或设置一个值,该值指示是否由ToolStrip类私自处理拖放和项重新排序。其结构如下:
public bool AllowItemReorder { get; set; }
l
3.ToolStripItem.DisplayStyle属性
获取或设置是否在ToolStripItem上显示文本和图像。
public virtual ToolStripItemDisplayStyl
l
(1)创建一个项目,将其命名为Ex01_14,默认窗体为Form1。
(2)在Form1窗体上添加MenuStrip控件,用来设计主菜单;添加ToolStrip控件,用来设计工具栏;添加StatusStrip控件,用来设计状态栏;添加ImageList控件和TreeVew控件,用来设计树结构。
(3)分别为MenuStrip控件、ToolStrip控件、ImageList控件和TreeVew控件添加子项,将MenuStrip控件和ToolStrip控件的AllowItemRecorder属性设为True,并将ToolStrip控件的每个子项的DisplayStyle属性设置为“ImageAndText”。下面详细介绍这几个属性。
根据本实例,读者可以实现以下功能。
在窗体界面中,菜单栏是不可缺少的重要组成部分。本实例是用其他的控件来制作一个摸拟菜单栏。运行程序,单击窗体上面的按钮,将会在按钮的下面显示一个下拉列表。如图1.15所示。
该实例中主要使用Button控件和ListView控件制作导航菜单界面。在对ListView控件添加菜单信息时,必需在前面写入添加语句,如Listview.Items.Add,否则添加的菜单信息将替换前一条信息。单击相应的按钮时,应首先对ListView控件进行清空,否则在ListView控件中将继续上一次的添加菜单信息。
(1)创建一个项目,将其命名为Ex01_15,默认窗体为Form1。
(2)在Form1窗体上添加MenuStrip控件设计菜单栏;添加ToolStrip控件设计工具栏;添加SplitContainer控件、ImageList控件、3个Button控件和ListView控件用来制作左侧的导航栏。
(3)分别为MenuStrip控件、ToolStrip控件添加子项,将3个Button按钮和ListView控件加入SqlitContainer1.panel的左侧部分中。
(4)主要程序代码。
加载窗体时,设置左侧导航栏内容的实现代码如下:
添加打开按钮的ListView控件显示内容的实现代码如下:
添加编辑按钮的ListView控件显示内容的实现代码如下:
添加设置按钮的ListView控件显示内容的实现代码如下:
根据本实例,读者可以实现以下功能。
如果以按钮来代替菜单的功能,会使界面更具有个性化。使操作者更易于操作。下面介绍按钮显示菜单的设计方法。运行本例,效果如图1.16所示。
图1.16
本实例主要通过设置Button控件的相应属性,确定其按钮的位置、文字、显示样式和要显示的图片等。下面对Button控件相应属性进行详细介绍。
1.Button. BackColor属性
获取或设置控件的背景色,其方法结构如下:
public override Color BackColor { get; set; }
l
2.Button. FlatStyle属性
获取或设置按钮控件的平面样式外观。其代码如下:
public FlatStyle FlatStyle { get; set; }
l
3.Button. TextImageRelation属性
获取或设置文本和图像相互之间的相对位置。其代码如下:
public TextImageRelation TextImageRelation { get; set; }
l
(1)创建一个项目,将其命名为Ex01_16,默认窗体为Form1。
(2)在Form1窗体上添加MenuStrip控件用来设计菜单栏,添加ToolStrip控件用来设计工具栏,添加Panel控件、Button控件用来设计图形化的导航按钮。
(3)分别为MenuStrip控件、ToolStrip控件添加子项,并为Panel控件选择背景图片。
(4)将Button控件的BackColor属性设为“Transparent”、FlatStyle属性设置为“Flat”、TextImageRelation属性设置为“ImageBeforeText”。
(5)主要程序代码。
根据本实例,读者可以实现以下功能。
1.5
现在有很多开发人员都将界面制作成不同类型的样式,这样可以使界面更加形象化。本节主要介绍了如何对程序界面进行特色化设计,如类似QQ、Windows XP的界面等。
一般程序都是以菜单栏和工具栏的形式调用其他功能模块,如果以动态的类似QQ的程序界面来调用其他功能模块,将会给用户一种新鲜的感觉,使用户对软件更感兴趣。实例运行结果如图1.17所示。
本例主要使用Button控件来完成布局,使用ListView控件来显示有图标的功能菜单。ListView控件的常用属性及说明如下。
1.ListView.Items属性
使用该属性可直接访问表示列表中项目的ListItem对象。其结构如下:
public ListViewItemCollection Items { get; }
l
2.ListView.Dock属性
获取或设置哪些控件边框停靠到其父控件并确定控件如何随其父级一起调整大小。其结构如下:
public virtual DockStyle Dock { get; set; }
l
(1)创建一个项目,将其命名为Ex01_17,默认窗体为Form1。
(2)在窗体上添加Button控件、ListView控件和ImageList控件。设置ListView控件的ImageList属性为ImageList控件。
(3)主要程序代码。
添加“我的好友”选项内容的实现代码如下:
添加默认时选项内容的实现代码如下:
添加“陌生人”选项内容的实现代码如下:
添加“黑名单”选项内容的实现代码如下:
根据本实例,读者可以实现以下功能。
在Windows XP环境下打开控制面板,会发现左侧的导航界面很实用。双击展开按钮,导航栏功能显示出来,双击收缩按钮,导航按钮收缩。下面通过实例介绍此种主窗体的设计方法。运行本例,效果如图1.18所示。
PictureBox控件是一个图像显示控件,该控件主要以其中的Image属性存储图像数据。其详细介绍如下。
PictureBox.Image属性用来获取或设置 PictureBox 显示的图像,其语法格式如下:
public Image Image { get; set; }
图1.18
l
(1)创建一个项目,将其命名为Ex01_18,默认窗体为Form1。
(2)在Form1窗体上添加Button控件、PictureBox控件和label控件,布局如图1.18所示。
(3)主要程序代码。
双击“向下箭头”的实现代码如下:
双击“向上箭头”的实现代码如下:
根据本实例,读者可以实现以下功能。
菜单和工具栏虽然能方便用户操作程序的相应功能,但各有缺点。如果采用按钮式功能菜单,不但美观大方,而且操作灵活。当单击按钮时,用户区将显示相应的操作按钮组。下面介绍图形界面式菜单的设计方法。运行本例,效果如图1.19所示。
图1.19
本例中用到了Image.FromFile方法和PictureBox.Image属性,下面详细介绍一下。
(1)Image.FromFile方法:从指定的文件创建Image。该函数的结构为:
public static Image FromFile (string filename)
参数说明如下。
l
l
(2)PictureBox.Image属性:获取或设置PictureBox显示的图像。其属性结构为:
public Image Image { get; set; }
l
(1)创建一个项目,将其命名为Ex01_19,默认窗体为Form1。
(2)在Form1窗体上添加MenuStrip控件用来设计菜单;添加Picture控件、Panel控件用来设计图形显示的界面。
(3)将panel的背景图片设置为图1.19所示,并在图片上添加Label控件,同时将Label控件的BackColor属性设置为transparency。
(4)主要程序代码。
根据本实例,读者可以实现以下功能。
以树形来显示程序的菜单,可以更直观更快捷的对软件进行操作。树形菜单比菜单栏更加美观实用。下面介绍树形界面菜单的设计方法。运行本例效果如图1.20所示。
图1.20
在对TreeView控件输入记录时,双击Nodes属性就可以对TreeView的节点进行设置。
可以在窗体的Load事件中输入下面的一条命令:
treeView1.ExpandAll();
功能:展开TreeView控件中所有的下级菜单。
(1)创建一个项目,将其命名为Ex01_20,默认窗体为Form1。
(2)在窗体上添加MenuStrip控件用来设计菜单栏,添加PictureBox控件用来显示图片,添加TreevVew控件用来设计左侧树形导航界面。
(3)为PictureBox添加背景图片,给MenuStrip控件和TreevVew控件添加子项。
(4)主要程序代码。
根据本实例,读者可以实现以下功能。
在窗体界面中,通常以按钮来代替菜单栏的功能,这种形式虽然给用户一种直观,界面风格各异的感党,但通常按钮都是以静止的形式显示,如果使光标移到按钮时,可以使按钮上的图片和文字说明动态化,使用户快捷地找到所选按钮。这样就需要一个动态的按钮显示界面。运行本例效果如图1.21所示。
图1.21
在编辑过程中,首先在Button控件中的Image属性中添加图片,然后将Button控件的ImageAlign属性设置为MiddleCenter,使图片居中。在设置Button控件的动态图片时,必须在相应控件的MouseMove事件中设置。
1.Button.Image属性
获取或设置显示在按钮控件上的图像,其语法格式如下:
public Image Image { get; set; }
l
2.Button. ImageAlign属性
获取或设置按钮控件上的图像对齐方式,其语法格式如下:
public ContentAlignment ImageAlign { get; set; }
l
(1)创建一个项目,将其命名为Ex01_21,默认窗体为Form1。
(2)在Form1窗体上添加PictureBox用来显示图片,添加Button、Lable控件用来设计动态按钮。
(3)为PictureBox控件设置背景图片,将Lable控件的Text属性设置为“明日科技有限公司”,并为每个Button控件设置图片和文字。
(4)主要程序代码。
根据本实例,读者可以实现以下功能。
1.6
将界面以不规则的形状显示在桌面上,可以给用户一种新鲜的感觉。本节主要对窗体以特殊的形状进行显示,如非矩形窗体和字体形窗体等。
大部分Windows窗体都是一个矩形区域,读者是否已经厌倦了这种中规中矩的矩形窗体?本例中的窗体是一个打破传统矩形的异型窗体,运行该例会看到一个非常可爱的窗体,单击【X】按钮就会使窗口关闭。实例效果如图1.22所示。
以前,创建非矩形窗体是一个既费时又费人力的过程,其中涉及到 API 调用和大量的编程工作。在.NET 2.0框架中可以不调用API非常轻松的实现这一功能。只要重写窗体的OnPaint方法,在方法中重新绘制窗体,然后用透明色将窗体设置透明即可。
(1)Form.OnPaint方法:此成员重写Control.OnPaint。用来重新绘制窗体图像。其结构如下:
protected override void OnPaint (PaintEventArgs e)
参数说明如下。
l
(1)创建一个项目,将其命名为Ex01_22,默认窗体为Form1。
(2)在窗口中添加Label控件,并将BackColor属性设为透明,将text属性设为空。
(3)将窗体的TransparencyKey属性设为窗体的背景色。
(4)主要程序代码。
设置图片透明颜色的实现代码如下:
重写基类方法,具体代码如下:
根据本实例,读者可以开发以下程序。
大家都见过不规则形状的窗体吧,那么如何制作一个文字形的窗体呢?文字形窗体一般应用在屏幕提示中,如收款机屏幕等。运行本例,效果如图1.23所示。
以前,创建字体形窗体是一个既费时又费人力的过程,其中涉及到API调用和大量的编程工作。在.NET 2.0框架中可以不调用API非常轻松的实现这一功能。只要先将字体画在一幅图上,然后重写窗体的OnPaint方法(方法的详细内容可以参见实例022),在方法中用图重新绘制窗体,用背景色将窗体设置透明即可。
(1)创建一个项目,将其命名为Ex01_23,默认窗体为Form1。
(2)主要程序代码。
namespace SpecialSharpWindows
{
设置图片透明颜色的实现。代码如下:
重写基类方法的实现。代码如下:
}
根据本实例,读者可以实现以下功能。
在软件开发中,随着窗体的大小变化,界面会和设计时出现较大的差异,控件和窗体的大小会不成比例非常不美观。本例中的控件是一个可以随窗体大小变化的控件。运行该例会看到一个控件随窗体大小变化的窗体。实例效果如图1.24所示。
在.NET 2.0框架中可以非常轻松的实现这一功能。大多数控件都有Anthor属性,当在窗体上添加控件时设置Anthor属性即可。Anthor属性是个锚定属性,指定了控件距容器边缘的距离。当窗体大小变化时,控件距窗体边缘的距离不变,自然大小就随窗体自动调整。
(1)创建一个项目,将其命名为Ex01_24,默认窗体为Form1。
(2)在窗体上添加MenuStrip控件、ToolStrip控件和Button控件。并设置Button的Anthor属性和Text属性。
根据本实例,读者可以实现以下功能。
在软件开发中,经常需要将界面分成几个部分,而且这几个部分又可以自由调整大小。运行本例,实例效果如图1.25所示。
在.NET 2.0框架中可以非常轻松的实现这一功能,只要在窗体中加入SplitContainer控件即可。SplitContainer控件带有一个分隔栏,用来把窗体分成两部分。
(1)创建一个项目,将其命名为Ex01_25,默认窗体为Form1。
(2)在Form1窗体上添加MenuStrip控件用来设计菜单栏,添加ToolStrip控件用来设计工具栏,添加SplitContainer控件用来设计分隔栏。
根据本实例,读者可以实现以下功能。
如果开发的软件用户使用频率非常高,可以为程序设计随机更换背景的程序。这样不但可以使用户心情愉快,也增加了软件的人性化设计。下面的界面就是一个随机更换主界面的例子,效果如图1.26所示。
随机更换主界面背景使用了Random类和ImageList控件。首先为ImageList控件添加一组图片,然后实例化一个Random类,再用Next()方法产生一个随机数以决定将哪个图片设为背景。
Random.Next()方法用来返回一个小于所指定最大值的非负随机数。其结构如下:
public virtual int Next (int maxValue)
参数说明如下。
l
l
(1)创建一个项目,将其命名为Ex01_26,默认窗体为Form1。
(2)在Form1窗体上添加ImageList控件,并为ImageList控件添加图片。
(3)主要程序代码。
根据本实例,读者可以开发以下程序。
1.7
本节主要介绍了如何自动启动多媒体光盘和触摸屏的相关技术。自动启动多媒体光盘技术应用十分广泛,现在的光盘大多应用这些技术,节省了用户单击进入的时间。
用户在安装软件时,将光盘放入光驱内,光盘会自动运行,进行安装操作,该功能是如何实现的呢?本例介绍如何制作“自动安装的光盘程序”,程序运行效果如图1.27所示。
其实,实现光盘的自动运行非常简单,当用户打开自动运行的光盘时,会发现光盘中有几个特殊的文件,分别为“autorun.exe”、“run.ico”和“autorun.inf”,其中“autorun.exe”是光盘自动播放时执行的可执行文件,“run.ico”是光盘的图标,“autorun.inf”是一个INI文件。只要光盘中包含这些文件,那么在将光盘放入光驱时,就会自动运行。
(1)创建一个项目,将其命名为Ex01_27,默认窗体为Form1。
(2)为Form1窗体添加背景图片Button控件。
(3)主要程序代码。
(4)运行程序,将可执行文件命名为“autorun.exe”,该文件就是光盘自动播放时打开的文件。
(5)选择一个图标,命名为“run.ico”,该图标在光驱读盘时显示。
(6)在刻光盘时,将上面的“run.ico”、“autorun.inf”和“autorun.exe”3个文件刻录到光盘中。
根据本实例,读者可以开发以下程序。
由于触摸屏没有键盘,只能利用屏幕操作。如果要输入数据或查找数据,需要制作一个虚拟键盘,以方便用户输入。本例介绍如何实现虚拟键盘的程序设计。运行本例,效果如图1.28所示。
本例中用到了Lable控件的透明属性和字符串截取技术。主要是使用Substring()方法。下面详细介绍一下该方法。
Substring()方法用来从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。其语法结构如下:
public string Substring (int startIndex,int length)
参数说明如下。
l
l
l
(1)创建一个项目,将其命名为Ex01_28,默认窗体为Form1。
(2)在窗体上添加2个Panel控件,1个TextBox控件和许多Label控件,每个Label控件对应背景图片上的1个按钮。
(3)为Panel控件添加背景图片,并将Label控件的BackColor设置为透明。
(4)主要程序代码。
将选中的数字或字母加入TextBox.Text的实现代码如下:
根据本实例,读者可以实现以下程序。
1.8
本节主要是对窗体的透明度、颜色渐变、背景及边框的相关技术进行讲解。在项目开发中窗体的设计会影响用户对软件的整体印象,所以窗体的效果要设计的美观一些。下面将介绍一些常用的效果。
很多专业软件在启动前都会显示一个说明该软件信息或用途的窗口,有的则是一个漂亮的启动界面,如Adobe公司的Acrobat。该窗口使软件显得更加专业。本例将实现一个半透明的渐显窗体,运行本软件会显示一个启动画面,并且画面会将完全透明慢慢到半透明的效果显示在用户面前。效果如图1.29所示。
图1.29
在其他开发环境中,实现窗体的半透明渐显需要调用API函数,实现非常困难,但在C# 2.0中,窗体提供了Opacit属性来设置窗体的透明度。
Form.Opacit属性用来获取或设置窗体的不透明度级别,其语法格式如下:
public double Opacity { get; set; }
l
(1)创建一个项目,将其命名为Ex01_29,默认窗体为Form1。
(2)在Form1窗体中设置背景图片,添加Timer控件用来触发渐变事件。
(3)设置Timer控件的Enable属性为True,设置Interval属性为1000。
(4)主要程序代码。
根据本实例,读者可以开发以下程序。
在程序设计时,可以通过设置窗体的BackColor属性来改变窗口的背景颜色。但是这个属性改变后整个窗体的客户区都会变成这种颜色,并且非常单调。如果窗体的客户区可以向标题栏一样能够体现颜色的渐变效果,那么窗体风格将会另有一番风味。本例设计了一个颜色渐变的窗体。效果如图1.30所示。
C#中可以通过Color.FromArgb(
Color.FromArgb(
public static Color FromArgb (
)
参数说明如下。
l
l
l
l
该函数就是用3种不同的色值来返回一个颜色,而稍微的调整某一种颜色值就可以使整体的颜色发生细微的变化,在窗体中至上而下每行填充一种稍微调整后的颜色,这样整体看来就会产生渐变的效果。可以利用窗体的Graphics对象对窗体进行绘图,该对象可以完全操控窗体的客户区。
(1)创建一个项目,将其命名为Ex01_30,默认窗体为Form1。
(2)在Form1窗体中添加Button用来使颜色渐变;添加TextBox控件用来输入颜色RGB值。
(3)主要程序代码。
触发重新绘制事件的实现代码如下:
重新绘制窗体背景颜色的实现代码如下:
根据本实例,读者可以开发以下程序。
1.9
本节主要对窗体进行动画设置,在窗体上添加一些动画效果,可以为操作者添加一些乐趣,下面的几个例子将详细介绍窗体动画的相关技术。
普通窗体中的文字位置都是固定的,一些窗体中需要让文字动起来,例如一些广告性较强的界面中需要做一些滚动的字幕。本例实现了一个具有滚动字幕效果的窗体,运行本例,单击【演示】按钮,看到窗口中的文字开始滚动。单击【暂停】按钮,可以使字幕停止滚动。本例运行效果如图1.31所示。
滚动字幕的效果其实就是改变了文字的位置,在窗体中显示一串文字最好的办法就是利用Label控件。将Label控件的位置改变就可以实现文字的位置变换,如果该控件的位置不断的向水平方向移动,就会实现文字的滚动效果。改变Label控件的水平位置可以通过改变Label控件的Left的值来实现。用Timer控件对文字的移动进行时间控制。
(1)创建一个项目,将其命名为Ex01_31,默认窗体为Form1。
(2)在窗体上添加Label控件用来显示消息;添加Button控件用来控制消息的运动;添加Timer控件用来控制滚动速度。
(3)主要程序代码。
根据本实例,读者可以开发以下程序。
当用户启动程序后,普通的程序窗口都是瞬间显示到屏幕上,这样未免有些生硬。如果窗口能够慢慢的展现在用户面前,将会是什么样的效果?本例设计的是一个动画显示的窗体,该程序运行后,窗体是慢慢的以拉伸的效果显示到用户的面前。当关闭时也是一样慢慢的消失。本例运行效果如图1.32所示。
Windows提供了一个API函数Animate Window,该函数可以实现窗体的动画效果,AnimateWindow函数在C#中的声明如下。
参数说明如下。
l
l
l
DwFlags参数可选值含义如表1.1所示
表1.1
标 | 描 |
AW_SLIDE | 使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略 |
AW_ACTIVE | 激活窗口。在使用了AW_HIDE标志后不要使用这个标志 |
AW_BLEND | 使用淡入效果。只有当hWnd为顶层窗口的时候才可以使用此标志 |
AW_HIDE | 隐藏窗口,缺省则显示窗口 |
AW_CENTER | 若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展 |
AW_HOR_POSITIVE | 自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 |
AW_HOR_NEGATIVE | 自右向左显示窗口。当使用了 AW_CENTER 标志时该标志被忽略 |
AW_VER_POSITIVE | 自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 |
AW_VER_NEGATIVE | 自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略 |
(1)创建一个项目,将其命名为Ex01_32,默认窗体为Form1。
(2)在窗体上添加PictureBox控件。
(3)设置PictureBox控件的Image属性。
(4)主要代码如下。
根据本实例,读者可以开发以下程序。
Windows系统中,当程序在后台运行时,如果某个窗口的提示信息需要用户浏览,该窗口就会不停的闪烁,这样就会吸引用户的注意。同样,如果在自己的程序中使某个窗口不停的闪烁就会吸引用户的注意。本例设计了一个闪烁的窗体,运行程序,单击【开始闪烁】按钮,窗体就会不停的闪烁,单击【停止】按钮,窗体就会停止闪烁。本例运行效果如图1.33所示。
Windows提供了一个API函数FlashWIndow,该函数可以使窗体闪烁一下。FlashWIndow函数在C#中声明如下:
参数说明如下。
l
l
利用该函数只能使窗体闪烁一下,如果让窗口不停地闪烁,就需要用一个Timer控件每隔一段时间就调用该函数使窗体闪烁。
(1)创建一个项目,将其命名为Ex01_33,默认窗体为Form1。
(2)在窗体上添加PictureBox控件用来显示窗体;添加Button、Timer控件用来开始和停止闪烁。
(3)设置PictureBox控件的Image属性。
(4)主要程序代码。
timer1的Tick事件处理代码如下:
【开始闪烁】按钮的单击事件,用来启动窗体闪烁:
【停止】按钮的单击事件,用来停止窗体的闪烁:
根据本实例,读者可以开发以下程序。
含有Graphics对象的控件都能够在其上进行绘图,很多软件就是通过Graphics对象来美化程序的主界面,因为窗体中含有Graphics对象,所以可以将窗体看作一个大画板,一个可以在上面绘图的特殊控件。本例设计了一个简单的绘图软件,该软件就利用了在窗体上绘图的方法,运行本软件可以在窗体上进行绘图。实例效果如图1.34所示。
窗体中含有Graphics对象,使用该对象就能够完成大部分绘图功能,Graphics对象已经对Windows底层的一些绘图API进行了封装,使用起来比较方便。下面介绍Graphics对象的常用方法。
Graphics.DrawLine绘图方法用来绘制一条连接由坐标对指定的两个点的线条。其语法结构如下:
public void DrawLine (Pen pen,int x1,int y1,int x2,int y2)
参数说明如下。
l
l
l
l
l
(1)创建一个项目,将其命名为Ex01_34,默认窗体为Form1。
(2)向Form1窗口中添加GroupBox控件,用作RadioButton控件的容器;添加Button控件用来推出程序。
(3)主要程序代码。
在窗体单元的private中添加变量如下:
单击鼠标事件。具体代码如下:
鼠标在窗体中的移动事件。具体代码如下:
鼠标抬起事件。具体代码如下:
根据本实例,读者可以实现以下功能。
在很多的程序界面中,都是以菜单或工具栏的形式显示窗体界面,这种显示方式是以静止状态显示的,界面不够生动。下面介绍一个以动画显示窗体界面的设计方法。运行本例,效果如图1.35所示。
在该实例中用到了Microsoft Animation Control 6.0(SP4)COM组件,所以要从工具箱“选择项”中将该组件添加到工具箱,然后继续将该组件从工具箱添加到窗体即可。下面介绍本例中用到的相关方法。
AxAnimation.open方法用来播放动画文件。其结构如下:
Public void AxAnimation.open(string bstrFilename)
参数说明如下。
l
(1)创建一个项目,将其命名为Ex01_35,默认窗体为Form1。
(2)在Form1窗体添加PictureBox控件用来显示图片,添加Microsoft Animation Control 6.0 (SP4)COM组件用来播放动画。
(3)主要程序代码。
根据本实例,读者可以实现以下功能。
1.10
本节主要是对窗体的标题栏进行设置,标题栏是一个显著的位置,在这个位置添加按钮或进行一些个性化的设置,都会给人一种新奇的感觉。通过以下实例的学习,读者将掌握此技术。
窗口标题栏中的文字是窗口的重要说明,该文字可以标示窗口的功能、状态或名称等信息,一般该文字是居左显示的,在本例中设计一个标题栏文字右对齐的窗口。本实例运行结果如图1.36所示。
在C#
Form. RightToLeft属性用来获取或设置一个值,该值指示是否将控件的元素对齐以支持使用从右向左的字体的区域设置,其语法结构如下:
public virtual RightToLeft RightToLeft { get; set; }
l
(1)创建一个项目,将其命名为Ex01_36,默认窗体为Form1。
(2)为Form1窗体添加背景图片。
(3)设置RightToLeft属性为Yes。
根据本实例,读者可以开发以下程序。
隐藏Windows窗口的标题栏之后,窗口只剩下一个客户区域,有点像Panel控件在窗口中的样子,而这样的窗口通常是不能够改变大小的。因为屏蔽其标题栏之后,窗口默认将边框也去除了,本例将用特殊的方法建立一个没有标题栏但是可以改变其大小的窗体。实例运行效果如图1.37所示。
窗口的样式是在窗口建立时确定的,在C#中实现窗体没有标题栏但是可以改变大小的窗口,有一个巧妙的方法就是将窗体的Text属性设为空,同时将ControlBox属性设为False。下面介绍一下相关的属性。
ControlBox属性用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控件框,其语法结构如下:
public bool ControlBox { get; set; }
l
(1)创建一个项目,将其命名为Ex01_37,默认窗体为Form1。
(2)在Form1窗口中添加Label、Button控件,用来设计界面。
(3)主要程序代码。
根据本实例,读者可以开发以下程序。
在窗体显示时最大化。1.11 设置窗体位置
在许多的软件中,都会对窗体的大小、位置和移动进行限定。在不同分辨率的显示器中如何正确显示窗体、如何设置窗体始终在最上面,这些都需要本节的技术。
在窗体中可以设置窗体居中显示,本例通过设置窗体的Left属性和Top属性可以准确设置窗体的位置。运行本例,效果如图1.38所示。
设置窗体在屏幕中的位置,可以通过设置窗体的属性来实现。窗体的Left属性表示窗体距屏幕左侧的距离,Top属性表示窗体距屏幕上方的距离。
(1)创建一个项目,将其命名为Ex01_38,默认窗体为Form1。
(2)在窗体上添加Label控件;添加TextBox控件用来输入距屏幕的距离;添加Button控件用来设置窗体在屏幕上的位置。
(3)主要程序代码。
根据本实例,读者可以开发以下程序。
Windows桌面上允许多个窗体同时显示,但是只有一个窗体能够得到焦点,当一个窗体得到焦点后在其上面的窗体会被得到焦点的窗体遮挡,得到焦点的窗体会显示在最上层,这样被覆盖的窗体就不能完全的显示给用户,如果该窗体中具有实时性和比较重要的信息时,需要该窗口始终在最上层。本例就实现了此功能,运行本例后,主窗体会始终在桌面的最上面。实例效果如图1.39所示。
在其他开发环境中实现窗体始终在最上面比较复杂,但在C# 2.0中实现非常简单,只要将TopMost属性设为True即可。下面介绍一下TopMost属性。
Form.TopMost属性用来获取或设置一个值,指示该窗体是否应显示为最顶层窗体。其结构如下:
public bool TopMost { get; set; }
l
(1)创建一个项目,将其命名为Ex01_39,默认窗体为Form1。
(2)为Form1窗体添加背景图片,并设置窗体TopMost属性为True。
根据本实例,读者可以开发以下程序。
1.12
用户打开软件后首先看到的就是窗体和窗体上的控件,如何设置窗体的大小及合理的设置窗体和控件的关系就变得十分重要,下面的实例将介绍这方面的知识。
Windows窗体是可以随意改变大小的,然而对于一些要求严格的窗体,开发人员不希望用户随意的改变其大小,例如,定位准确的地图和游戏软件等。遇到这种情况必须对窗口的大小进行一些限制。本例设计一个限制了大小的窗体,用户虽然可以改变其大小,但是,大小的范围是受到限制的。实例效果如图1.40所示。
在此C#中实现限制大小非常方便,只要设置窗体的最大和最小范围即可。下面介绍一下相关属性。
Form.MinimumSize属性用来获取或设置窗体可调整到的最小大小,其语法格式如下:
public override Size MinimumSize { get; set; }
l
Form.MaximumSize属性用来获取或设置窗体可调整到的最大大小,其语法格式如下:
public override Size MaximumSize{ get; set; }
l
(1)创建一个项目,将其命名为Ex01_27,默认窗体为Form1。
(2)主要程序代码。
根据本实例,读者可以开发以下程序。
获取桌面分辨率可以使用API函数GetDeviceCaps,但API函数参数较多,使用不方便,如何更方便的获取桌面分辨率呢?在本例中,通过读取Screen对象的属性,来获取桌面分辨率信息,以像素为单位。运行本例,效果如图1.41所示。
C#中提供了Screen对象,在该对象中封装了屏幕相关信息。可以通过读取Screen对象的相关属性,来获取屏幕的信息,Screen.PrimaryScreen.WorkingArea.Width用于读取桌面宽度;Screen.PrimaryScreen.WorkingArea.Height可以读取桌面的高度。下面介绍一下相关属性。
Screen.PrimaryScreen.WorkingArea属性用于获取显示器的工作区。工作区是显示器的桌面区域,不包括任务栏、停靠窗口和停靠工具栏。其结构如下:
public Rectangle WorkingArea { get; }
l
(1)创建一个项目,将其命名为Ex01_41,默认窗体为Form1。
(2)在Form1窗体上添加一个Button控件,用来获取桌面大小;添加两个TextBox控件,用来输出所获取的桌面大小。
(3)主要程序代码。
根据本实例,读者可以开发以下程序。
窗体中每个可视控件都有所有者和父对象两个重要属性,所有者是控件建立时指定的所属对象,该对象可以是不可视控件,而父对象必须是可视控件。因此可以通过窗体中可视控件的Parent属性来判断控件是否在这个窗体中,还可以用Form.Controls.Add(
图1.42
可视控件包含一个Parent属性,该属性表示控件的父对象。一般将此属性设置为一个窗口。通过该属性可以控制所属窗体。
(1)创建一个项目,将其命名为Ex01_42,默认窗体为Form1。
(2)添加一个窗体,默认窗体的Name属性为Form2。
(3)在Form1窗口中添加一个Button控件。并为Form1和Form2设置背景图片。
(4)主要程序代码。
单击按钮在两个窗体之间移动,具体代码如下:
Form1窗体加载时同时显示Form2窗体,具体代码如下:
根据本实例,读者可以开发以下程序。
用过Office的人都知道,Office助手是一个非常漂亮的小工具,有了它,即使对Office不太熟悉的用户也可以操作自如。本实例使用C#制作了一个类似Office助手的程序,实例效果如图1.44所示。
要实现Office助手效果,需要使用Microsoft提供的第3方控件。在工具箱中单击“选择项”,从弹出的对话框中选择COM组件选项卡中的Microsoft Agent Control 2.0组件并加入工具箱中,然后再添加到窗体中。
(1)创建一个项目,将其命名为Ex01_43,默认窗体为Form1。
(2)在Form1窗体上添加一个ListBox控件用来让用户选择人物的动作。
(3)主要程序代码。
声明成员变量及字符串数组,具体代码如下:
为ListBox添加选项的实现代码如下:
随着选项改变Office表情的实现代码如下:
根据本实例,读者可以实现以下程序。
用户对程序进行操作时,难免会有错误操作的情况,例如不小心关闭程序,如果尚有许多资料没有保存,那么损失将非常严重,所以最好使程序具有灵活的交互性。人机交互过程一般都是通过对话框来实现的,对话框中有提示信息,并且提供按钮让用户选择,例如【是】或【否】。这样用户就能够对所做的动作进行确认。正如前面所说的不小心关闭程序,如果在关闭程序之前提示用户将要关闭程序,并且提供用户选择是否继续下去,这样就大大减少了误操作现象。本例程序中的窗口在关闭时会显示一个对话框,该对话框中有两个按钮【是】与【否】代表是否同意关闭程序操作。实例运行结果如图1.45所示。
窗口正要关闭但是没有关闭之前会触发FormClosing事件,该事件中的参数FormClosingEventArgs e中包含Cancel属性,如果设置该属性为True,窗口将不会被关闭。所以在该事件处理代码中可以提示用户是否关闭程序,如果用户不想关闭程序,则设置该参数为True。利用MessageBox参数的返回值可以知道用户所选择的按钮。下面详细介绍一下相关属性。
CancelEventArgs.Cancel属性用来获取或设置指示是否应取消事件的值。该属性结构如下:
public bool Cancel { get; set; }
l
(1)创建一个项目,将其命名为Ex01_44,默认窗体为Form1。
(2)主要程序代码。
根据本实例,读者可以实现以下程序。
通常将鼠标按住窗口的标题栏才能够拖动窗口,但是,在没有窗口标题栏的情况下如何拖动窗体呢?本例将会利用窗口中的控件拖动窗口,将鼠标放在按钮上然后按住鼠标左键移动鼠标即可拖动窗体。实例效果如图1.46所示。
通过控件移动窗体时,需要判断用户的鼠标动作。用户准备拖动窗体时必须在控件上按住鼠标左键,所以应该在鼠标MouseDown事件处理过程中来实现窗体的拖动。当用户在按钮上将鼠标左键按下时,触发MouseDown事件,在该事件处理代码中,MouseEventArgs e的Button属性记录了当前按下的鼠标按钮,如果按键是鼠标左键,则表示可以移动窗口,鼠标移动时,窗体就可以跟着移动了。
(1)创建一个项目,将其命名为Ex01_45,默认窗体为Form1。
(2)在Form1窗体上添加两个Button控件,分别用来拖动窗体和关闭窗体。然后设置窗体的背景颜色。
(3)主要程序代码。
声明记录鼠标按下时初始位置的变量,具体代码如下:
鼠标按下事件处理代码,具体代码如下:
鼠标移动事件处理代码,具体代码如下:
根据本实例,读者可以开发以下程序。
如果设置了控件的ToolTip属性,当鼠标移到该控件后,会提示相关的文本,但没有提供对提示字体及颜色的设置属性,如何改变提示文本的样式和字体呢?本例可以设置提示文本的字体及颜色。运行本例,效果如图1.47所示。
C# 2.0中提供了ToolTip控件,可以指定关联控件并为每个控件提供提示文本,其中ToolTipTitle属性指定文本提示盒中的文本。下面介绍相关的属性和方法。
(1)SetToolTip方法
使工具提示文本与指定的控件相关联。其语法结构如下:
public void SetToolTip (Control control,string caption)
参数说明如下。
l
l
(2)ToolTip.ToolTipTitle属性
获取或设置工具提示窗口的标题。其语法结构如下:
public string ToolTipTitle { get; set; }
l
(1)创建一个项目,将其命名为Ex01_46,默认窗体为Form1。
(2)在Form1窗体上添加Button控件用来在其上方显示提示文本;添加ToolTip控件用来设计提示文本。
(3)主要程序代码。
设置提示文本,及提示文本的关联控件,具体代码如下:
设置文本的提示样式,具体代码如下:
根据本实例,读者可以实现以下功能。
1.14
本节主要介绍了如何创建和关闭MDI窗体。在大型项目和产品的开发中常常将系统设计为MDI界面。
MDI窗体是一种应用非常广泛的窗体类型,在一个主窗体内包含多个子窗体,子窗体永远不会显示在主窗体的外面。当子窗体不能完全的显示在主窗体中时,主窗体会显示滚动条来调整可视范围,在其他开发环境中为MDI窗体添加背景图片十分困难。但在C# 2.0中实现非常容易。在本例中实现了一个具有背景的MDI窗体。实例效果如图1.48所示。
在C# 2.0中直接提供了BackgroundImage 属性,该属性可以直接设置窗体的背景图片。设置IsMdiContainer属性为True可以使窗体成为MDI主窗体。下面详细介绍一下相关属性。
(1)BackgroundImage属性
获取或设置在控件中显示的背景图像。其语法结构如下:
public virtual Image BackgroundImage { get; set; }
l
(2)Form.IsMdiContainer属性
获取或设置一个值,该值指示窗体是否为多文档界面(MDI)子窗体的容器。其语法结构如下:
public bool IsMdiContainer { get; set; }
l
此属性将窗体的显示和行为更改为MDI父窗体。当此属性设置为True时,该窗体显示具有凸起边框的凹陷工作区。所有分配给该父窗体的MDI子窗体都在该父窗体的工作区内显示。
(1)创建一个项目,将其命名为Ex01_47,默认窗体为Form1。
(2)添加一个窗体,默认窗体的Name属性为Form2。
(3)为Form1窗体中添加背景图片。
(4)设置Form1窗体的IsMdiContainer属性为True,该窗口作为MDI主窗体。
(5)主要程序代码。
根据本实例,读者可以开发以下程序。