1.29k likes | 1.51k Views
第 12 章 创建程序的可视外观 ——Windows Form 编程基础. 用户界面是在用户运行程序时所看到的程序部分。用户界面通常由一个主窗口或窗体以及若干个控件(如按钮、用于输入文本的字段等)组成。这些 Visual Basic 程序类型称为 Windows Form 应用程序,并且使用 Windows 窗体控件来创建用户界面。
E N D
第12章 创建程序的可视外观——Windows Form编程基础 用户界面是在用户运行程序时所看到的程序部分。用户界面通常由一个主窗口或窗体以及若干个控件(如按钮、用于输入文本的字段等)组成。这些Visual Basic程序类型称为Windows Form应用程序,并且使用Windows窗体控件来创建用户界面。 控件是构成用户界面的要素,是重要的可视化编程工具,应用Visual Basic.Net开发Windows应用程序是一件很简单的事情。VB.NET2008提供了大量的Windows控件供程序员使用。掌握了控件的属性、事件和方法,就可以轻松地编写出精彩的应用程序。本章将讲述Windows应用程序开发常用的基础控件和组件。
章节内容 • 12.1 什么是控件和组件 • 12.2 控件的基本属性和事件 • 12.3 窗体Form • 12.4 Label控件与LinkLabel控件 • 12.5 Button控件 • 12.6 TextBox、RichTextBox与MaskedTextBox控件
章节内容 • 12.7 PictureBox控件 • 12.8 RadioButton与CheckBox控件 • 12.9 ListBox与CheckedListBox控件 • 12.10 ComboBox控件 • 12.11 GroupBox与Panel控件 • 12.12 用户控件
12.1 什么是控件和组件 • 组件指任何可复用的对象或任何可与其他对象交互的代码体。 • 控件就是具有用户界面的组件。也可以说,组件是不可见的控件,因为组件不需要显示任何信息或用户界面。 • 在.NET中,控件一般继承自Control,而组件一般继承自Component。
12.2 控件的基本属性和事件 • 每一个控件都有自己的属性、事件和方法。在【属性】窗口可以看到控件的属性和事件。 • 有一些属性是大多数控件都具有的,如名称(Name)、标题(Text)、字体(Font)、大小(Size)等。 • 有一些事件也是大多数控件都具有的,如鼠标的单击(Click)、双击(DblClick)事件等。
Name属性 • Name属性是所有控件都具有的属性,用于指明该控件的名称。在代码中使用Name属性来引用该控件。 • 所有的控件在创建时都有一个默认的名称,一般是控件名加数字,如Form1,TextBox1等。 • 为了提高程序的可读性,一般需要将名称修改成有意义的名称。
Text属性 • Text属性一般用于获取或者设置与控件关联的文本。 • 不同控件的Text属性含义也稍有不同, • 如窗体的Text属性表示窗体的标题, • 文本框的Text属性表示文本框中的文本, • 标签的Text属性表示标签的显示内容, • 单选按钮和多选框的Text属性表示单选按钮和多选框后面显示的文本等。
ForeColor和BackColor属性 • ForeColor属性用于设置或获取控件的前景颜色,即正文颜色,其值是一个十六进制的常数,可以在【属性】窗口的调色板中直接选取,其默认值是黑色。
BackGroundImage和BackGroundImageLayout属性 • 该属性用于设置控件的背景图像。单击右边的省略号按钮,即可打开【选择资源】窗口。在该窗口中导入作为控件背景的图像,单击【确定】按钮即可。
Font属性 • 该属性用于设置或获取显示文本的外观,包括字体、字号、是否黑体、是否斜体、是否有下划线、是否有删除线及使用的字符集等。
Size与Location属性 • Size属性用于设置或获取控件的尺寸,单击Size属性前面的“+”,可以看到Width和Height两个属性,分别用于设置宽和高。 • Location属性用于设置或获取控件的显示位置,单击Location属性前面的“+”,可以看到X和Y两个属性,表示该控件左上角的坐标。
Height Width • 这两个属性联合起来定义了控件的显示位置,以Button控件为例。
Location属性 • 该属性指定控件显示的相对位置。 • 对于Location属性,窗体与普通控件有些许区别,主要在于,窗体的Location属性是基于显示器的,而普通控件的Location是基于所在窗体的。
Visible属性 • 该属性用于指示控件是否可见,取值是Boolean类型,默认为True,表示控件在程序运行时可见;设成False表示控件在运行时不可见,此时该控件用户看不到,但是控件本身仍然存在。
Enabled属性 • 该属性用于指示控件是否启用,是否允许操作,取值是Boolean类型,默认为True,表示控件可用,即允许用户进行操作,并对用户的操作,做出响应;设成False表示不可用,禁止用户进行操作,控件呈暗淡色。
Modifers属性 • 该属性指示对象的可见性级别,默认是Friend,如图12-5所示。单击其下拉列表框,在打开的下拉菜单中还可以选择【Public】、【Protected】、【Private】和【Protected Friend】。
AutoSize和AutoSizeMode属性 • AutoSize属性指示是否自动调整自身的大小以适应其显示的内容,取值为Boolean类型,默认为False,即不允许自动调整大小,如果显示内容太长则被裁剪掉。设为True,则允许控件根据显示内容自动调整大小。 • 此时可以设置AutoSizeMode属性,指定控件自动调整自身大小的模式,其有GrowOnly和GrowAndShrink两种模式。
Locked属性 • 该属性指明是否可以移到控件和调整控件的大小,取值为Boolean类型,默认为False。
TextAlign和ImageAlign属性 • 这两个属性用于设置控件上的文本或图像的水平方向和垂直方向的对齐方式,取值均为ContentAlignment枚举,有9种情况。
BorderStyle属性 • 该属性用于设置控件边框的样式,取值如下。 • None:没有边框。 • FixedSingle:单直线边框。 • Fixed3D:立体边框(凹陷)。
鼠标事件 • MouseClick事件:在鼠标单击该控件时发生。 • MouseDoubleClick事件:在鼠标双击该控件时发生。 • MouseDown事件:当鼠标指针位于控件上并按下鼠标键时发生。 • MouseUp事件:在鼠标指针在控件上并释放鼠标键时发生。 • MouseMove事件:在鼠标指针移到控件上时发生。 • MouseEnter事件:在鼠标指针进入控件时发生。 • MouseHover事件:在鼠标指针停放在控件上时发生。 • MouseLeave事件:在鼠标指针离开控件时发生。 • MouseWheel事件:在移动鼠标滚轮并且控件有焦点时发生。 • MouseCaptureChanged事件:当控件失去或获得鼠标捕获时发生。
鼠标事件发生的次序 • (1)MouseEnter:鼠标指针进入控件。 • (2)MouseMove:鼠标指针发生移动。 • (3)MouseHover / MouseDown / MouseWheel:鼠标指针悬停或者按键按下或者滚轮滚动。 • (4)MouseUp:鼠标按键抬起。 • (5)MouseLeave:鼠标指针离开控件。
了解了鼠标事件的发生时间和顺序之后,就可以根据需求来编写事件的事件处理过程了。通常在鼠标事件处理过程中处理鼠标输入时,需要了解鼠标指针的位置和鼠标按钮的状态,这些信息是通过System.Windows.Forms.MouseEventArgs类来获取的。了解了鼠标事件的发生时间和顺序之后,就可以根据需求来编写事件的事件处理过程了。通常在鼠标事件处理过程中处理鼠标输入时,需要了解鼠标指针的位置和鼠标按钮的状态,这些信息是通过System.Windows.Forms.MouseEventArgs类来获取的。 • 1 Private Sub Form1_MouseClick(ByVal sender As System.Object,ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick • 2 • 3 End Sub
MouseEventArgs类的属性 • Button:获取按下的是哪个鼠标按钮,取值可以是None、Left、Middle、Right,分别代表没有鼠标按键按下、鼠标左键按下、鼠标中键按下和鼠标右键按下。 • Clicks:获取按下并释放鼠标按钮的次数,取值为整型。 • Delta:获取鼠标轮已转动的制动器数的有符号计数 • Location:获取鼠标在产生鼠标事件时的位置,取值是Point结构类型,以(x,y)点对的形式返回鼠标的位置。 • X:获取鼠标在产生鼠标事件时的x坐标。 • Y:获取鼠标在产生鼠标事件时的y坐标。
键盘事件 • KeyDown事件:在控件有焦点的情况下,当用户按物理键时将引发该事件。 • KeyPress事件:在控件有焦点的情况下,当所按的键产生字符时将引发该事件 • 例如,当用户按【Shift】键和小写的【a】键时,将产生大写字母“A”字符。 • KeyUp事件:在控件有焦点的情况下,释放物理键时引发该事件。
当用户按键盘键时,Windows窗体提供两个事件,而当用户松开键盘键时,Windows窗体提供一个事件,具体如下。当用户按键盘键时,Windows窗体提供两个事件,而当用户松开键盘键时,Windows窗体提供一个事件,具体如下。 • KeyDown事件,仅发生一次。 • KeyPress事件,当用户按住同一个键时,该事件可以发生多次。 • 当用户释放键时,KeyUp事件发生一次。
KeyDown事件的事件处理过程,以TextBox控件为例,代码如下。KeyDown事件的事件处理过程,以TextBox控件为例,代码如下。 • 1 Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown • 2 • 3 End Sub
KeyDown事件与KeyUp事件的事件处理过程类似,均提供一个KeyEventArgs参数。该参数提供的属性如下。KeyDown事件与KeyUp事件的事件处理过程类似,均提供一个KeyEventArgs参数。该参数提供的属性如下。 • KeyCode属性,提供按下的物理键的键值,取值为Key枚举的成员。Keys枚举用于指定键的代码和修饰符。例如,A代表A键,Enter代表回车键,D0代表0键,NumPad0代表数字键盘的0键等。 • Modifiers属性,用于判断是否按下了【Shift】、【Ctrl】或【Alt】键。 • KeyData属性,组合键代码和修改键,取值也是Keys枚举的成员。与KeyCode属性的区别在于,如果同时按下了【Shift】键和【a】键,KeyData属性取值为大写的“A”。
12.3 窗体Form • Windows窗体是Windows应用程序开发的新平台。 • 窗体就像是一块画布,是所有控件的容器,用户可以根据需要,利用工具箱中提供的控件,在这块画布上画出自己需要的用户界面。
窗体外观设置 • FormBorderStyle属性:边框风格设置
窗体初始状态设置 • WindowState属性 • StartPosition属性 • MaximizeBox和MinimizeBox属性 • MaximizeSize和MinimizeSize属性
12.4 Label控件与LinkLabel控件 • 标签控件主要用于显示文本信息,所显示的文本通过Text属性来设置,而不能直接编辑。 • 标签常用于标注本身不具有Text属性的控件,如为下拉框、组合框、Panel控件等附加描述性信息。
LinkLabel控件:链接文本 • LinkLabel控件用于显示链接文本,即允许用户使用鼠标单击链接。 • 与Label控件相比,LinkLabel多了与链接有关的属性和LinkClicked鼠标单击链接事件,其他的属性均与Label控件类似。
LinkArea属性 • 该属性用于在控件的文本内指定单个超链接。
编写该控件的LinkClicked事件处理过程。 • 1 Private Sub lnkSingleLink_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnkSingleLink.LinkClicked • 2 lnkSingleLink.LinkVisited = True • 3 System.Diagnostics.Process.Start ("http://mail.163.com") • 4 End Sub
链接外观的设置 • ActiveLinkColor、DisabledLinkColor、LinkColor和VisitedLinkColor定义在各种状态下显示超链接时所使用的颜色。 • LinkBehavior属性定义与超链接关联的下划线的显示方式等。
12.5 Button控件 • Button控件用于在窗体上显示一个按钮。按钮是Windows应用程序中最常用的控件之一,它提供了应用程序与用户交互的最简单的方法,通常用户单击按钮后,应用程序执行一定的操作。
FlatStyle属性 • 该属性用于设置按钮的外观,取值有以下4种。 • Flat:平面按钮。 • PopUp:当鼠标不在按钮上时,以平面按钮显示;当鼠标放在按钮上时,以三维按钮显示。 • Standard:三维按钮(默认)。 • System:按钮外观取决于当前操作系统的设置。
Image属性 • 该属性用于设置按钮上的显示图像,注意,如果FlatStyle属性设置为System,则该属性无效。
BackGroundImage属性 • 该属性用于设置按钮的背景图像,注意,与Image属性类似,如果FlatStyle属性设置为System,则该属性无效。
示例 • 实现功能为:当鼠标移动到按钮上时,将按钮的文本以红色显示;鼠标移开后恢复原来的颜色,单击该按钮,显示单击次数。
1 Public Class Form1 2 Private num As Integer = 0 3 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 4 num += 1 5 MessageBox.Show("Clicked me " & num & " times!") 6 End Sub 7 8 Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter 9 Button1.ForeColor = Color.Red 10 End Sub 11 12 Private Sub Button1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseLeave 13 Button1.ForeColor = Color.Black 14 End Sub 15 End Class
12.6 TextBox、RichTextBox与MaskedTextBox控件 • TextBox控件和RichTextBox控件均用于在窗体上显示一个用于输入的文本框。 • Text属性用于获取或者设置在文本框中的文本。 • 将MultiLine属性设为True,即可允许显示或者输入多行文本。 • 设置PasswordChar属性,即可屏蔽单行显示模式下的用户输入的字符,使用设置的字符取代等。
示例:创建一个用于创建和编辑文本文档的多行文本框。示例:创建一个用于创建和编辑文本文档的多行文本框。 • 首先新建一个Windows应用程序工程,并在窗体上添加一个TextBox控件,设置属性如下。 • 1 TextBox1.Multiline = True • 2 TextBox1.AcceptsTab = True • 3 TextBox1.AcceptsReturn = True • 4 TextBox1.WordWrap = True • 其中,AcceptsTab属性用于设置该文本框是否允许接收制表符,AcceptsReturn属性设置是否允许输入回车键,WordWrap属性指示多行编辑控件是否自动换行。
下面我们在该文本框中实现复制、剪切和粘贴操作。下面我们在该文本框中实现复制、剪切和粘贴操作。 • TextBox控件提供使用剪贴板的方法为Copy、Cut和Paste。 • 除此之外,还需要检测是否按下了【Ctrl】+【C】、【Ctrl】+【X】、【Ctrl】+【V】组合键。
下面代码演示了在文本框中实现使用键盘组合键实现复制、剪切和粘贴操作。下面代码演示了在文本框中实现使用键盘组合键实现复制、剪切和粘贴操作。 1 Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown 2 If e.Control And e.KeyData = Keys.C Then 3 TextBox1.Copy( ) 4 End If 5 If e.Control And e.KeyData = Keys.X Then 6 TextBox1.Cut( ) 7 End If 8 If e.Control And e.KeyData = Keys.V Then 9 TextBox1.Paste( ) 10 End If 11 If e.Control And e.KeyData = Keys.A Then 12 TextBox1.SelectAll( ) 13 End If 14 End Sub
之后在窗体上添加一个Label控件,用于显示当前选定的文本。之后在窗体上添加一个Label控件,用于显示当前选定的文本。 • 要实现此功能,需要监测鼠标的动作,当鼠标左键按下并移动时,认为用户执行了选择文本的操作。其中,TextBox控件的SelectedText属性用于返回选定的文本。
下面代码演示了使用Label控件显示当前选定的文本。下面代码演示了使用Label控件显示当前选定的文本。 1 Private Sub TextBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove 2 If e.Button = Windows.Forms.MouseButtons.Left Then 3 Label1.Text = "当前选中的文本为:" & TextBox1.SelectedText 4 End If 5 End Sub