第 12 章 创建程序的可视外观 ——windows form 编程基础

129
1 12 12 第 第第第第第第第第第 第 第第第第第第第第第 —— —— Windows Form Windows Form 第第第第 第第第第 第第第第第第第第第第第第第第第第第第第第第 第第第第第第第第 第第第第第第 。一 第第第第第第第第 第第第第 第第第第第第第第第第第 第第第 第第 体(、)。 Visual Basic 第第第第第第 Windows Form 第第第第 第第第第 Windows 第 第第第第第第第第第第 体。 第第第第第第第第第第第第 第第第第第第第第第第第第 第第 ,, Visual Basic.Net 第第 Windows 第第第第第 第第第第第第 VB.NET2008 第第第第第第 Windows 第第第第第第第第第第第第第第第第 第第第第第第 第第第第第第第第第第第第第第第第第 第第第第第 、,。 Windows 第第第第第第第第第第第第第第第第

Upload: kali

Post on 11-Jan-2016

220 views

Category:

Documents


0 download

DESCRIPTION

第 12 章 创建程序的可视外观 ——Windows Form 编程基础. 用户界面是在用户运行程序时所看到的程序部分。用户界面通常由一个主窗口或窗体以及若干个控件(如按钮、用于输入文本的字段等)组成。这些 Visual Basic 程序类型称为 Windows Form 应用程序,并且使用 Windows 窗体控件来创建用户界面。 - PowerPoint PPT Presentation

TRANSCRIPT

1

第第 1212 章 创建程序的可视外观章 创建程序的可视外观———— Windows FormWindows Form 编程基础编程基础用户界面是在用户运行程序时所看到的程序部分。用户界面通常由一个主窗口或窗体以及若干个控件(如按钮、用于输入文本的字段等)组成。这些Visual Basic程序类型称为Windows Form应用程序,并且使用Windows窗体控件来创建用户界面。控件是构成用户界面的要素,是重要的可视化编程工具,应用 Visual Basic.Net开发Windows应用程序是一件很简单的事情。 VB.NET2008提供了大量的Windows控件供程序员使用。掌握了控件的属性、事件和方法,就可以轻松地编写出精彩的应用程序。本章将讲述Windows应用程序开发常用的基础控件和组件。

2

章节内容章节内容12.1 什么是控件和组件12.2 控件的基本属性和事件12.3 窗体 Form12.4 Label控件与 LinkLabel控件12.5 Button控件12.6 TextBox 、 RichTextBox 与

MaskedTextBox控件

3

章节内容章节内容12.7 PictureBox控件12.8 RadioButton 与 CheckBox控件

12.9 ListBox 与 CheckedListBox控件

12.10 ComboBox控件12.11 GroupBox 与 Panel控件12.12 用户控件

4

12.1 12.1 什么是控件和组件什么是控件和组件组件指任何可复用的对象或任何可与其他对象交互的代码体。

控件就是具有用户界面的组件。也可以说,组件是不可见的控件,因为组件不需要显示任何信息或用户界面。

在 .NET中,控件一般继承自 Control,而组件一般继承自 Component。

5

12.2 12.2 控件的基本属性和事控件的基本属性和事件件每一个控件都有自己的属性、事件和方法。在【属性】窗口可以看到控件的属性和事件。

有一些属性是大多数控件都具有的,如名称( Name)、标题( Text)、字体( Font)、大小( Size)等。

有一些事件也是大多数控件都具有的,如鼠标的单击( Click)、双击( DblClick)事件等。

6

NameName 属性属性Name属性是所有控件都具有的属性,用于指明该控件的名称。在代码中使用 Name属性来引用该控件。

所有的控件在创建时都有一个默认的名称,一般是控件名加数字,如Form1 , TextBox1等。

为了提高程序的可读性,一般需要将名称修改成有意义的名称。

7

TextText 属性属性Text属性一般用于获取或者设置与控件关联的文本。

不同控件的 Text属性含义也稍有不同,◦如窗体的 Text属性表示窗体的标题,◦文本框的 Text属性表示文本框中的文本,◦标签的 Text属性表示标签的显示内容,◦单选按钮和多选框的 Text属性表示单选按钮和多选框后面显示的文本等。

8

ForeColorForeColor 和和 BackColorBackColor属性属性ForeColor属性用于设置或获取控件的前景颜色,即正文颜色,其值是一个十六进制的常数,可以在【属性】窗口的调色板中直接选取,其默认值是黑色。

9

BackGroundImageBackGroundImage 和和BackGroundImageLayoutBackGroundImageLayout 属属性性该属性用于设置控件的背景图像。单击右边的省略号按钮,即可打开【选择资源】窗口。在该窗口中导入作为控件背景的图像,单击【确定】按钮即可。

10

FontFont 属性属性该属性用于设置或获取显示文本的外观,包括字体、字号、是否黑体、是否斜体、是否有下划线、是否有删除线及使用的字符集等。

11

SizeSize 与与 LocationLocation 属性属性Size属性用于设置或获取控件的尺寸,单击 Size属性前面的“+”,可以看到Width 和 Height两个属性,分别用于设置宽和高。

Location属性用于设置或获取控件的显示位置,单击 Location属性前面的“+”,可以看到 X 和 Y 两个属性,表示该控件左上角的坐标。

12

这两个属性联合起来定义了控件的显示位置,以 Button控件为例。

Height

Width

13

LocationLocation 属性属性该属性指定控件显示的相对位置。对于 Location属性,窗体与普通控件有些许区别,主要在于,窗体的Location属性是基于显示器的,而普通控件的 Location是基于所在窗体的。

14

VisibleVisible 属性属性该属性用于指示控件是否可见,取值是 Boolean类型,默认为 True,表示控件在程序运行时可见;设成 False表示控件在运行时不可见,此时该控件用户看不到,但是控件本身仍然存在。

15

EnabledEnabled 属性属性该属性用于指示控件是否启用,是否

允许操作,取值是 Boolean类型,默认为 True,表示控件可用,即允许用户进行操作,并对用户的操作,做出响应;设成 False表示不可用,禁止用户进行操作,控件呈暗淡色。

16

ModifersModifers 属性属性该属性指示对象的可见性级别,默认是 Friend,如图 12-5所示。单击其下拉列表框,在打开的下拉菜单中还可以选择【 Public】、【 Protected】、【 Private】和【 Protected Friend】。

17

AutoSizeAutoSize 和和AutoSizeModeAutoSizeMode 属性属性AutoSize属性指示是否自动调整自身的大小以适应其显示的内容,取值为Boolean类型,默认为 False,即不允许自动调整大小,如果显示内容太长则被裁剪掉。设为 True,则允许控件根据显示内容自动调整大小。

此时可以设置 AutoSizeMode属性,指定控件自动调整自身大小的模式,其有 GrowOnly 和 GrowAndShrink两种模式。

18

LockedLocked 属性属性该属性指明是否可以移到控件和调整控件的大小,取值为 Boolean类型,默认为 False。

19

TextAlignTextAlign 和和 ImageAlignImageAlign属性属性这两个属性用于设置控件上的文本或图像的水平方向和垂直方向的对齐方式,取值均为 ContentAlignment 枚举,有 9 种情况。

20

BorderStyleBorderStyle 属性属性该属性用于设置控件边框的样式,取值如下。◦None :没有边框。◦FixedSingle :单直线边框。◦Fixed3D :立体边框(凹陷)。

21

鼠标事件鼠标事件 MouseClick事件:在鼠标单击该控件时发生。 MouseDoubleClick事件:在鼠标双击该控件时发生。 MouseDown事件:当鼠标指针位于控件上并按下鼠标键时发生。

MouseUp事件:在鼠标指针在控件上并释放鼠标键时发生。 MouseMove事件:在鼠标指针移到控件上时发生。 MouseEnter事件:在鼠标指针进入控件时发生。 MouseHover事件:在鼠标指针停放在控件上时发生。 MouseLeave事件:在鼠标指针离开控件时发生。 MouseWheel事件:在移动鼠标滚轮并且控件有焦点时发生。

MouseCaptureChanged事件:当控件失去或获得鼠标捕获时发生。

22

鼠标事件发生的次序鼠标事件发生的次序( 1 ) MouseEnter :鼠标指针进入控件。

( 2 ) MouseMove :鼠标指针发生移动。

( 3 ) MouseHover / MouseDown / MouseWheel :鼠标指针悬停或者按键按下或者滚轮滚动。

( 4 ) MouseUp :鼠标按键抬起。( 5 ) MouseLeave :鼠标指针离开控件。

23

了解了鼠标事件的发生时间和顺序之后,就可以根据需求来编写事件的事件处理过程了。通常在鼠标事件处理过程中处理鼠标输入时,需要了解鼠标指针的位置和鼠标按钮的状态,这些信息是通过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

24

MouseEventArgsMouseEventArgs 类的属性类的属性Button :获取按下的是哪个鼠标按钮,取值可以是

None 、 Left 、 Middle 、 Right,分别代表没有鼠标按键按下、鼠标左键按下、鼠标中键按下和鼠标右键按下。

Clicks :获取按下并释放鼠标按钮的次数,取值为整型。

Delta :获取鼠标轮已转动的制动器数的有符号计数Location :获取鼠标在产生鼠标事件时的位置,取值是 Point 结构类型,以( x , y )点对的形式返回鼠标的位置。

X :获取鼠标在产生鼠标事件时的 x 坐标。Y :获取鼠标在产生鼠标事件时的 y 坐标。

25

键盘事件键盘事件KeyDown事件:在控件有焦点的情况下,当用户按物理键时将引发该事件。

KeyPress事件:在控件有焦点的情况下,当所按的键产生字符时将引发该事件◦例如,当用户按【 Shift】键和小写的【 a】键时,将产生大写字母“ A”字符。

KeyUp事件:在控件有焦点的情况下,释放物理键时引发该事件。

26

当用户按键盘键时,Windows窗体提供两个事件,而当用户松开键盘键时,Windows窗体提供一个事件,具体如下。◦KeyDown事件,仅发生一次。◦KeyPress事件,当用户按住同一个键时,该事件可以发生多次。

◦当用户释放键时, KeyUp事件发生一次。

27

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

28

KeyDown事件与KeyUp事件的事件处理过程类似,均提供一个KeyEventArgs 参数。该参数提供的属性如下。◦KeyCode属性,提供按下的物理键的键值,取值为

Key 枚举的成员。Keys 枚举用于指定键的代码和修饰符。例如, A代表 A 键,Enter代表回车键,D0代表 0键,NumPad0代表数字键盘的0键等。

◦Modifiers属性,用于判断是否按下了【Shift】、【 Ctrl】或【Alt】键。

◦KeyData属性,组合键代码和修改键,取值也是Keys 枚举的成员。与KeyCode属性的区别在于,如果同时按下了【Shift】键和【 a】键,KeyData属性取值为大写的“ A”。

29

12.3 12.3 窗体窗体 FormFormWindows窗体是Windows应用程序开发的新平台。

窗体就像是一块画布,是所有控件的容器,用户可以根据需要,利用工具箱中提供的控件,在这块画布上画出自己需要的用户界面。

30

窗体外观设置窗体外观设置FormBorderStyle属性:边框风格设置

31

窗体初始状态设置窗体初始状态设置WindowState属性StartPosition属性MaximizeBox 和 MinimizeBox属性MaximizeSize 和 MinimizeSize属性

32

12.4 Label12.4 Label 控件与控件与 LinkLabelLinkLabel控件控件

标签控件主要用于显示文本信息,所显示的文本通过 Text属性来设置,而不能直接编辑。

标签常用于标注本身不具有 Text属性的控件,如为下拉框、组合框、 Panel控件等附加描述性信息。

33

LinkLabelLinkLabel 控件:链接文本控件:链接文本LinkLabel控件用于显示链接文本,即允许用户使用鼠标单击链接。

与 Label控件相比, LinkLabel多了与链接有关的属性和 LinkClicked鼠标单击链接事件,其他的属性均与Label控件类似。

34

LinkAreaLinkArea 属性属性该属性用于在控件的文本内指定单个

超链接。

35

编写该控件的 LinkClicked事件处理过程。

1 Private Sub lnkSingleLink_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnkSingleLink.LinkClicked

2 lnkSingleLink.LinkVisited = True3 System.Diagnostics.Process.Start

("http://mail.163.com")4 End Sub

36

链接外观的设置链接外观的设置ActiveLinkColor 、 DisabledLinkCo

lor 、 LinkColor 和 VisitedLinkColor定义在各种状态下显示超链接时所使用的颜色。

LinkBehavior属性定义与超链接关联的下划线的显示方式等。

37

12.5 Button12.5 Button 控件控件Button控件用于在窗体上显示一个按钮。按钮是Windows应用程序中最常用的控件之一,它提供了应用程序与用户交互的最简单的方法,通常用户单击按钮后,应用程序执行一定的操作。

38

FlatStyleFlatStyle 属性属性该属性用于设置按钮的外观,取值有以下 4 种。◦Flat :平面按钮。◦PopUp :当鼠标不在按钮上时,以平面按钮显示;当鼠标放在按钮上时,以三维按钮显示。

◦Standard :三维按钮(默认)。◦System :按钮外观取决于当前操作系统的设置。

39

ImageImage 属性属性该属性用于设置按钮上的显示图像,

注意,如果 FlatStyle属性设置为System,则该属性无效。

40

BackGroundImageBackGroundImage 属性属性该属性用于设置按钮的背景图像,注意,与 Image属性类似,如果FlatStyle属性设置为 System,则该属性无效。

41

示例示例实现功能为:当鼠标移动到按钮上时,将按钮的文本以红色显示;鼠标移开后恢复原来的颜色,单击该按钮,显示单击次数。

42

1 Public Class Form12 Private num As Integer = 03 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click4 num += 15 MessageBox.Show("Clicked me " & num & " times!")6 End Sub7 8 Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter9 Button1.ForeColor = Color.Red10 End Sub11 12 Private Sub Button1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseLeave13 Button1.ForeColor = Color.Black14 End Sub15 End Class

43

运行结果运行结果

44

12.6 12.6 TextBoxTextBox 、、 RichTextBoxRichTextBox 与与MaskedTextBoxMaskedTextBox 控件控件TextBox控件和 RichTextBox控件

均用于在窗体上显示一个用于输入的文本框。◦Text属性用于获取或者设置在文本框中的文本。

◦将 MultiLine属性设为 True,即可允许显示或者输入多行文本。

◦设置 PasswordChar属性,即可屏蔽单行显示模式下的用户输入的字符,使用设置的字符取代等。

45

示例:创建一个用于创建和编辑示例:创建一个用于创建和编辑文本文档的多行文本框。文本文档的多行文本框。首先新建一个Windows应用程序工程,并在窗体上添加一个 TextBox控件,设置属性如下。◦ 1 TextBox1.Multiline = True◦ 2 TextBox1.AcceptsTab = True◦ 3 TextBox1.AcceptsReturn = True◦ 4 TextBox1.WordWrap = True◦其中, AcceptsTab属性用于设置该文本框是否

允许接收制表符, AcceptsReturn属性设置是否允许输入回车键,WordWrap属性指示多行编辑控件是否自动换行。

46

下面我们在该文本框中实现复制、剪切和粘贴操作。◦TextBox控件提供使用剪贴板的方法为

Copy 、 Cut 和 Paste。◦除此之外,还需要检测是否按下了【 Ctrl】 + 【 C】、【 Ctrl 】 + 【 X 】、【 Ctrl 】 + 【 V 】组合键。

47

下面代码演示了在文本框中实现使用键盘组合键实现复制、剪切和粘贴操作。

1 Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown2 If e.Control And e.KeyData = Keys.C Then3 TextBox1.Copy( )4 End If5 If e.Control And e.KeyData = Keys.X Then6 TextBox1.Cut( )7 End If8 If e.Control And e.KeyData = Keys.V Then9 TextBox1.Paste( )10 End If11 If e.Control And e.KeyData = Keys.A Then12 TextBox1.SelectAll( )13 End If14 End Sub

48

之后在窗体上添加一个 Label控件,用于显示当前选定的文本。

要实现此功能,需要监测鼠标的动作,当鼠标左键按下并移动时,认为用户执行了选择文本的操作。其中, TextBox控件的 SelectedText属性用于返回选定的文本。

49

下面代码演示了使用 Label控件显示当前选定的文本。

1 Private Sub TextBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove2 If e.Button = Windows.Forms.MouseButtons.Left Then3 Label1.Text = " 当前选中的文本为: " & TextBox1.SelectedText4 End If5 End Sub

50

运行结果运行结果

51

与选定文本有关的属性和方法与选定文本有关的属性和方法SelectionLength,用于获取或设置文本框中选定的字符数。

SelectionStart,用于获取或设置文本框中选定的文本起始点。

Select(Start , End),用于选择位于Start 和 End 之间的文本。其中, Start和 End 均为 Integer类型,用于指示文本的起点和终点。

SelectAll( ),用于选择文本框中的所有文本。

52

RichTextBoxRichTextBox 控件控件TextBox控件仅能完成相对简单的文本编辑操作,大多用于获取用户输入内容的情况,更复杂的文本编辑则多采用RichTextBox控件。

53

选定文本的格式设置选定文本的格式设置SelectionFont属性可以将文本以粗体或斜体显示,还可以使用此属性更改文本的大小和字样。

SelectionColor属性可以更改文本的颜色。若要创建项目符号列表,可以使用

SelectionBullet属性。还可以通过设置

SelectionIndent 、 SelectionRightIndent 和 SelectionHangingIndent属性调整段落格式设置。

54

文件操作方法文件操作方法LoadFile方法将现有的 RTF 或 ASCII文本文件加载到控件中。

SaveFile可以将文件保存到 RTF 或ASCII文本中。

Find方法可以查找文本字符串。

55

示例:文本查找示例:文本查找我们新建一个Windows应用程序工程,在窗体上添加一个 RichTextBox控件。窗体加载时,将 RTF文件加载到控件中并搜索单词“ Text“的第一个实例,然后更改选定文本的字体样式、字号和字体颜色,并将更改保存到原始文件。

56

1 Public Class Form12 3 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load4 RichTextBox1.Dock = DockStyle.Fill5 6 RichTextBox1.LoadFile("D:\MyDoc.rtf")7 RichTextBox1.Find("Text", RichTextBoxFinds.MatchCase)8 9 RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)10 RichTextBox1.SelectionColor = Color.Red11 12 RichTextBox1.SaveFile("D:\MyDocument.rtf", RichTextBoxStreamType.RichText)13 14 End Sub15 End Class

57

运行结果运行结果

58

MaskedTextBoxMaskedTextBox 控件控件该控件是一个增强型的 TextBox控件,支持用于接受或拒绝用户输入的声明性语法。通过使用Mask属性,无需在应用程序中编写任何自定义验证逻辑,即可指定下列输入。◦ 必需的输入字符。◦ 可选的输入字符。◦ 掩码中的给定位置所需的输入类型。例如,只允许数字、只

允许字母或者允许字母和数字。◦ 掩码的原义字符或者应直接出现在MaskedTextBox中的字符。例如,电话号码中的连字符( -)或者价格中的货币符号

◦ 输入字符的特殊处理。例如,将字母字符转换为大写字母。

59

示例:接受有效日期输入示例:接受有效日期输入首先,新建一个Windows应用程序工程,并向窗体中添加一个MaskedTextBox控件和一个 ToolTip控件。

60

ToolTipToolTip 控件控件该控件通常用来向用户提示控件的预

期用途。这里,我们使用 ToolTip控件来提示用户的无效输入。◦ToolTipTitle属性:设置提示标题。◦Show方法:显示提示框。

61

设置设置 MaskedTextBoxMaskedTextBox 控件的控件的MaskMask 属性属性该属性用于设置运行时使用的输入掩码。掩码必须是由一个或多个掩码元素组成的字符串。

掩码元素 说明

0 数字,必选。此元素将接受 0 ~ 9 之间的任何一个数字

9 数字或空间,可选。

#

数字或空间,可选。如果掩码中该位置为空白,在 Text属性中将把它呈现为一个空格。允许使用加号( + )和减号( -)。

L字母,必选。将输入限定为 ASCII字母,即 a ~ z 和 A ~ Z 。此掩码元素等效于正则表达式中的 [a-zA-Z]

?字母,可选。输入限定为 ASCII 字母即 a ~ z 和 A ~ Z 。此掩码

元素等效于正则表达式中的 [a-zA-Z]?

62

&字符,必选。如果 AsciiOnly属性设置为 true,此元素的行为将与

“ L”元素类似

C字符,可选。任何非控制字符。如果 AsciiOnly属性设置为 true,

此元素的行为将类似于“ ?”元素

A字母数字,可选。如果将 AsciiOnly属性设置为 True,则它接受的惟一字符是 ASCII字母,即 a ~ z 和 A ~ Z

a字母数字,可选。如果将 AsciiOnly属性设置为 True,则它接受的惟一字符是 ASCII字母,即 a ~ z 和 A ~ Z

.

小数点占位符。使用的实际显示字符将是适合于格式提供程序的小数点符号,格式提供程序由控件的 FormatProvider属性决定

,

千分位占位符。使用的实际显示字符将是相应于格式提供程序的千分位占位符,格式提供程序由控件的 FormatProvider属性决定

:

时间分隔符。使用的实际显示字符将是适合于格式提供程序的时间符号,格式提供程序由控件的 FormatProvider属性决定

/

日期分隔符。使用的实际显示字符将是适合于格式提供程序的日期符号,格式提供程序由控件的 FormatProvider 属性决定

63

$货币符号。显示的实际字符将是相应于格式提供程序的货币符号,

格式提供程序由控件的 FormatProvider属性决定

< 转换为小写。将后续所有字符都转换为小写

> 转换为大写。将后续所有字符都转换为大写

| 禁用前一个大写转换或小写转换

\转义。对掩码字符进行转义,将其转变为原义字符。其中,“ \\”是反斜杠的转义序列

其他所有字符

原义字符。所有非掩码元素都将原样出现在MaskedTextBox中。原义字符在运行时始终占据掩码中的一个固定位置,用户不能移动或删除该字符

64

单击Mask属性右侧的 按钮,可以打开【输入掩码】窗口。该窗口中有预定义的掩码可以选择,也可以自定义掩码,这里我们选择【自定义】,并在【掩码】文本框中输入“ 00/00/0000”,可以在【预览】文本框中看到运行时的显示效果。

65

PromptCharPromptChar 属性属性MaskedTextBox控件在运行时,会将

掩码表示为一系列提示字符和可选的原义字符,表示一个必需或可选输入的每个可编辑掩码位置都显示为单个提示字符。

PromptChar属性指定自定义提示字符。当用户在掩码文本框中输入内容时,有效的输入字符将按顺序替换其各自的提示字符;如果用户输入无效的字符,将不会发生替换。

66

MaskInputRejectedMaskInputRejected 事件事件当用户的输入被掩码拒绝时,将触发

MaskInputRejected事件,该事件是MaskedTextBox控件的默认事件。本例中,我们使用 ToolTip控件来显示提示信息。

67

1 Private Sub MaskedTextBox1_MaskInputRejected(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MaskInputRejectedEventArgs) Handles MaskedTextBox1.MaskInputRejected2 If (Me.MaskedTextBox1.MaskFull) Then3 ToolTip1.ToolTipTitle = " 长度太长,输入被拒绝 "4 ToolTip1.Show(" 您输入的内容超出了日期的长度 ", Me.MaskedTextBox1, 10, -20,5000)5 ElseIf (e.Position = Me.MaskedTextBox1.Mask.Length) Then6 ToolTip1.ToolTipTitle = " 已到达末尾,输入被拒绝 "7 ToolTip1.Show(" 您无法再输入更多的字符,请删除部分字符再试 ", Me.MaskedTextBox1, 10, -20, 5000)8 Else9 ToolTip1.ToolTipTitle = "输入被拒绝 "10 ToolTip1.Show(" 您只能输入 0 ~ 9的数字 ", Me.MaskedTextBox1, 10, -20, 5000)11 End If12 End Sub

68

运行结果运行结果

69

12.7 PictureBox12.7 PictureBox 控件控件PictureBox控件用于在窗体上显示图像或者图形。

12.2 节中介绍的基本属性(如Enabled 、 Visible 、 Name 、 Size、 Location等)完全适用于PictureBox控件。

70

ImageImage 属性属性Image属性用于指定在图片框中显示的图像◦可以直接在【属性】窗口进行设置,同样支持本地资源和项目资源文件两种资源上下文。单击Image属性右侧的 按钮,在打开的【选择资源】窗口中导入需要装入的图像文件即可。

◦也可以在运行期间装入图像,此时需要在代码中使用 Image.FromFile方法,基本格式如下。

◦PictureBox1.Image=Image.FromFile("文件名 ")

71

ErrorImageErrorImage 属性属性ErrorImage属性用于指定在另外一幅图像加载失败时显示的图像,一般默认为红色的叉。

72

InitialImageInitialImage 属性属性InitialImage属性用于指定在加载另一幅图像时显示的图像。

一般用于装载一幅较大图像时,由于加载需要一定的时间,可以将该属性设置为其缩略图,在加载的过程中显示。这样做可以使得程序界面比较友好,同时用户不致于失去等待的耐心。

73

SizeModeSizeMode 属性属性SizeMode属性用于设置图像的显示方

式◦ Normal :默认值。在该模式下, Image置于 PictureBox的左上角,凡是因过大而不适合 PictureBox的任何图像部分都将被剪裁掉。

◦ StrechImage :拉伸或者收缩图像以适合 PictureBox的大小。

◦ AutoSize :使控件调整大小,以便总是适合图像的大小。◦ CenterImage :图像居于工作区的中心。如果 PictureBox

比图像大,则图像将居中显示;如果图像比 PictureBox大,则图片将居于 PictureBox中心,而外边缘将被剪裁掉。

◦ Zoom :该模式下,图像大小按其原有的大小比例被增加或减小。

74

示例:示例:下面我们新建一个Windows应用程序工程,并在窗体上添加两个PictureBox控件,即 PictureBox1和 PictureBox2控件。

75

设置设置 PictureBox1PictureBox1 的的 ImageImage属性属性单击 Image属性右边的 按钮,即可打开【选择资源】窗口。这里点选【本地资源方式】单选按钮,单击【导入】按钮,在打开的【打开】窗口中选择要装载的图像。

76

此时, PictureBox1控件中的图像是以 Normal 模式显示的,由于图像大小大于 PictureBox1的大小,因此只显示了图像的左上角。

我们接着设置其 SizeMode属性为StrechImage,使得图像适合PictureBox的大小。

77

以代码方式为以代码方式为 PictureBox2PictureBox2 装装入图像入图像编写窗体的 Load事件处理过程。

◦ 1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

◦ 2 PictureBox2.Image = Image.FromFile("D:\Image\Winter.jpg")

◦ 3 PictureBox2.SizeMode = PictureBoxSizeMode.Zoom

◦ 4 PictureBox2.BorderStyle = BorderStyle.Fixed3D

◦ 5 End Sub

78

除了上面介绍的两种设置 PictureBox控件的显示图像外,还可以通过设置ImageLocation属性指定图像,该属性用于设置显示的图像的路径或 URL。

然后在运行期间使用 Load方法同步加载图像或使用 LoadAsync方法异步加载图像。

79

12.8 RadioButton12.8 RadioButton 与与CheckBoxCheckBox 控件控件RadioButton控件在窗体上显示单选按钮,一般用于建立一系列选项供用户选择,但是用户一次只能选择其中一项,而且必须选择一项,而且单选按钮一般都是成组出现的。

CheckBox控件在窗体上显示复选框,一般也用于建立一系列选项供用户选择。与单选按钮不同的是,复选框运行用户一次选择多项,或者一项也不选。多个复选框可以同时存在并且互相独立。

80

相同的属性相同的属性Text属性,用于设置控件上显示的文本。Checked属性,取值为 True或者 False。该属性用于表示当前单选按钮或者复选框是否被选定。

AutoCheck属性,该属性设为 True时,单击控件时自动更改选中状态。

Appearance属性,用于设置控件的外观,取值为Normal(一般外观)或 Button(按钮外观)。

FlatStyle属性,用于设置外观风格,有 Standard, Flat , Popup , System四个可选值。如果该属性设置为 Flat,则还可以设置 FlatAppearance属性来定制控件的边框外观和颜色。

81

复选框的复选框的 CheckStateCheckState 属性属性用于指示设置或者获取当前复选框的

状态。可以拥有以下 3 种状态。

◦Unchecked(未选中)。◦Checked(选中)。◦Indeterminate(不确定,此时复选框呈灰色)。

82

单选按钮示例:收入水平选择单选按钮示例:收入水平选择

83

CheckedChangedCheckedChanged 事件事件该事件在单选按钮状态改变的时候触发

1 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged2 If RadioButton1.Checked Then MessageBox.Show(" 您现在的收入水平为 0 ~ 1000 元 ")3 End Sub

84

运行结果运行结果

85

复选框示例:爱好选择复选框示例:爱好选择

86

下面代码是确定按钮的 Click事件过程,用于显示用户的选择结果。

1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click2 Dim result As String = " 您的爱好是 "3 Dim flag As Integer = 04 If ckbMusic.Checked Then5 result &= ckbMusic.Text & " "6 flag += 17 End If …… ……28 If flag <> 0 Then29 MessageBox.Show(result)30 Else31 MessageBox.Show(" 您什么爱好都没有么? ")32 End If33 End Sub

87

运行结果运行结果

88

12.9 ListBox12.9 ListBox 与与CheckedListBoxCheckedListBox 控件控件ListBox控件在窗体上显示一个列表框,以列表的形式显示文本,并接受用于选择。该控件大多用于标准化数据输入。

89

ItemsItems 属性属性该属性用于设置或者获取列表中显示的项。 Items是一个用于保存列表项的数组,可以通过下标来访问其中的项。

例如,下面的代码将返回列表框中的第 7 项。注意,下标从 0 开始。◦str=ListBox1.Items(6)

90

可以在设计阶段直接在【属性】窗口设置 Items属性。单击 Items属性右侧的 按钮,即可打开【字符串集合编辑器】窗口,直接输入即可,每行代表一项。

91

Items属性是一个集合,因此集合的属性和方法均使用。◦Count属性:返回该集合的元素个数。◦Add方法:用于向列表框中的尾部插入一项。◦Clear方法:用于清除列表框中的所有项。◦Remove方法:用于删除列表框中指定的一项。

◦RemoveAt方法:用于删除指定位置的列表项。

92

MultiColumnMultiColumn 属性属性该属性用于设置列表框是否显示多列,默认值为 False。

93

SelectionModeSelectionMode 属性属性该属性用于设置列表框的选择模式如下。

◦默认为 One,即仅运行用户选择一项。◦None(不允许选择)。◦MultiSimple(简单多选。可以同时选择多项,后续选择不会取消前面选择的项,可以用鼠标和空格键选择和释放)。

◦MultiExtended(扩展多选。可以使用鼠标拖曳或者配合【 Shift】和【 Ctrl】键来进行选择,类似于在文件管理器中选择多个文件的方式)。

94

SortedSorted 属性属性该属性用于设置列表中项是否进行排序,默认为 False,即按照加入列表的先后顺序排列;如果设为 True,则按照字母或数字升序排列。

95

SelectedIndexSelectedIndex 属性属性该属性用于指示被选中的列表项的索引值。如果没有项被选中,则该属性值为 -1。在代码中设置了该属性后,相对应的项反相显示。

该属性与 Items属性配合使用,可以确定当前被选中的项。下面的代码将返回选中的项。◦ListBox1.Items(ListBox1.SelectedInde

x)

96

SelectedItemSelectedItem 属性属性SelectedItem属性返回列表框中的选定项。

97

SelectedItemsSelectedItems 与与SelectedIndicesSelectedIndices 属性属性SelectedItems属性返回列表框中选定项的集合。

SelectedIndices属性返回列表框中选定项的索引值集合。

这两个属性适用于多项选择模式的列表框。

98

TextText 属性属性该属性在单选模式下表示被选中项的文本,在多选模式下指示最后一次选中的项的文本。

注意,该属性是只读属性,不能被直接修改。

99

常用事件常用事件ListBox控件除了

Click 、 DoubleClick等事件外,常用事件还有 SelectedIndexChanged。该事件在列表框中选择项发生变化的时候触发。

100

示例:文化程度选择示例:文化程度选择

101

下面代码是【确定】按钮的 Click事件过程,用于实现用户选择结果的显示。

1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

2 MessageBox.Show(" 您的文化程度为: " & ListBox1.Items(ListBox1.SelectedIndex))

3 End Sub

102

复选列表框复选列表框 CheckedListBoxCheckedListBox控件控件该控件用类似与列表框和复选框的组合体,其功能和用法与 ListBox控件很类似,只有以下两点区别。◦复选列表框中的每一项之前都显示一个复选框。

103

复选列表框的 SelectionMode 只能设置为 One,其他属性值无效。

这意味着复选列表框不支持多项选择模式,一次只能选择一项。但是,可以通过选中其复选框来实现多项选择。◦与此相关的属性包括 CheckedItems 和

CheckedIndeces。其中, CheckedItems属性是复选列表框中选定的项的集合,包含 CheckState 是Checked 和 Indeterminate的项;而CheckedIndeces属性是选定项的索引的集合。

104

12.10 ComboBox12.10 ComboBox 控件控件ComboBox控件在窗体上显示一个组合框,该控件兼具列表框和文本框二者的功能于一身,既可以让用户使用鼠标选择项目,又允许用户输入列表中没有的内容。

ListBox的很多属性都可以直接适用于ComboBox控件,如 Items属性、 Sorted属性等。除此之外, ComboBox 还具备一些其他的属性。

105

DropDownStyleDropDownStyle 属性属性这是 ComboBox控件的一个重要属性,它

决定了组合框的3 种不同类型。◦ DropDown(默认值):组合框称为下拉式组合框。此时单击右侧的箭头,用户可以在下拉列表中选择项,可响应DropDown事件。除此之外,也可以在文本框中输入文本。

◦ Simple :简单组合框,由一个可输入文本的编辑区和一个标准列表框组成。列表不是下拉式的,而是一直显示在屏幕上的,可以选择表项,也可以在编辑区输入文本,响应DblClick事件。运行时,如果项目超出了列表框的高度,自动加上垂直滚动条。

◦ DropDownList :下拉式列表框。与下拉式组合框类似,右侧也有一个下拉箭头,单击后可以在下拉列表框中选择项,但下拉式列表框不允许输入文本,也不能响应 DblClick 和TextChanged事件,但可以响应 DropDown事件。

106

三种类型的组合框三种类型的组合框

下拉式组合框 简单组合框 下拉式列表框

107

TextText 属性属性该属性是与组合框关联的文本。

◦对于下拉式组合框和简单组合框来说, Text属性表示选择的列表项或者输入的文本。

◦对于下拉式列表框来说, Text属性只能是选择的列表项。

108

示例:计算机配置选择示例:计算机配置选择

109

下面代码是【确定】按钮的 Click事件过程,使用消息框显示用户选择或者输入的计算机配置内容。

1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click2 Dim s As String = " 您的计算机配置为: " & vbCrLf3 s &= "品牌: " & cbbBrand.Text & vbCrLf _4 & "CPU : " & cbbCPU.Text _5 & "内存: " & cbbMem.Text _6 & "硬盘: " & cbbHardDisk.Text7 MessageBox.Show(s, " 计算机配置 ")8 End Sub

110

添加用户输入添加用户输入以品牌组合框为例

1 If cbbBrand.FindStringExact(cbbBrand.Text) = -1 Then

2 cbbBrand.Items.Add(cbbBrand.Text)3 End If

111

运行结果运行结果

112

12.11 GroupBox12.11 GroupBox 与与PanelPanel 控件控件

GroupBox控件是一个容器控件,用于在窗体上显示包含一组控件的带或不带标题的分组框架,也可以使用 GroupBox对窗体上的控件集合进行逻辑分组,还可作为用于定义控件组的容器控件。

113

基本属性基本属性GroupBox控件的基本属性包括

Name 、 Enabeld 、 Text 、 Font、 Height 、 Width 、 Left 、 Top 、Visible等,其含义与 12.2.1 节介绍的基本属性类似,只是如果将Enabled属性设置为 False,不仅GroupBox控件不可用,同时标题变成灰色,包含在该控件中的所有控件均不可用。

114

分组框的典型用途:分组框的典型用途:包含包含 RadioButtonRadioButton 控件的逻辑控件的逻辑组组示例:投票选举

115

为了记录每个候选人的投票数,需要设置计数变量,代码如下。◦Dim numW, numL, numY, numZ,

numC, numX As Integer

116

编写【投票】按钮的 Click事件过程,查看每个单选按钮的状态,如果是选中状态,则将对应候选人的计数变量加 1,并提示用户已完成投票。

1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click2 If RadioButton1.Checked Then3 numW += 14End If ……20 MessageBox.Show(" 您的投票已完成,谢谢! ")21 End Sub

117

下面代码是【查看结果】按钮的 Click事件过程。

1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click2 Dim s As String = ""3 s &= RadioButton1.Text & " : " & numW & vbCrLf _4 & RadioButton2.Text & " : " & numL & vbCrLf _5 & RadioButton3.Text & " : " & numY & vbCrLf _6 & RadioButton4.Text & " : " & numZ & vbCrLf _7 & RadioButton5.Text & " : " & numC & vbCrLf _8 & RadioButton6.Text & " : " & numX & vbCrLf9 MessageBox.Show(s, "投票结果 ")10 End Sub

118

运行结果运行结果

119

PanelPanel 控件控件GroupBox控件一般仅用来做简单的控件分组,它无法显示滚动条,如果需要可包含滚动条的类似于 GroupBox的控件,可以使用 Panel控件。◦默认情况下, Panel控件在显示时没有任何边框。可以用 BorderStyle属性提供标准或三维的边框,将面板区与窗体上的其他区域区分开。

◦AutoScroll属性启用 Panel控件中的滚动条。

120

12.12 12.12 用户控件用户控件Windows窗体支持以下 3 种用户定义的控件。◦复合控件。◦扩展控件。◦自定义控件。

121

复合控件复合控件复合控件是封装在公共容器内的

Windows窗体控件的集合,这种控件有时称为用户控件。其中,被包含的控件称为构成控件。

复合控件包含与每个包含的Windows窗体控件相关联的所有固有功能,允许有选择地公开和绑定它们的属性。

复合控件从 UserControl类派生。

122

示例:输入用户资料的复合控件示例:输入用户资料的复合控件首先新建一个Windows窗体控件库项

目,并命名为“ UserInfo” 。也可以创建一个类库项目,并单击菜单栏中的【项目】→【添加用户控件】来进行用户控件的添加。

123

实际上,用户控件与任何类类似,创建后就可以重复使用。

不同的是,它具有一项额外功能,即可放置于工具箱中并显示在窗体上;而类模块仅具有代码,不具有界面;用户控件模块同时具有代码和设计器。

用户控件设计器类似于窗体设计器,具有用于控制用户控件外观和行为的属性

124

下面我们向该用户控件中添加控件,并设置控件的属性。

125

公开属性公开属性在本例中,目前没有任何方法可以检

索已输入到控件中的文本,必须将它们的值作为属性公开以使控件有用。如果不想让控件的值在外部被更改,可以将它作为只读属性公开。

1 ' 姓名2 Public ReadOnly Property UserName( ) As String3 Get4 Return txbName.Text5 End Get6 End Property

126

为用户控件编写事件处理过程为用户控件编写事件处理过程下面的代码用于检查手机号输入情况。在手机号文本框后面放置一个标签 lblPhoneEM,用于显示相关检查信息。

1 Private Sub txbPhone_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txbPhone.Leave2 If txbPhone.Text.Length <> 11 Then3 lblPhoneEM.ForeColor = Color.Brown4 lblPhoneEM.Text = " 请输入完整的手机号码 "5 Else6 lblPhoneEM.Text = ""7 End If8 End Sub

127

至此,用户控件就基本完成了。单击菜单栏中的【调试】→【启动调试】命令,可以在用户控件测试容器中对该用户控件进行测试。

128

用户控件使用用户控件使用接下来我们将创建一个Windows应用工程来使用该用户控件。单击菜单栏中的【文件】→【添加】→【新建项目】命令,在打开的【添加新项目】窗口中选择【Windows窗体应用工程】,命名为“ UserControlTest”。然后在【解决方案资源管理器】窗口,将该项目设为启动项目。

129

此时,工具箱中增加了【 UserInfo组件】选项卡。

直接将该控件添加到窗体上就可以使用了。使用方法与普通控件相同。