一、控件分类
Visual Basic 的控件有三种广义分类:
内部控件,例如 CommandButton 和 Frame 控件。这些控件都在 Visual Basic 的 .exe 文件中。内部控件总是出现在工具箱中,不象 ActiveX 控件和可插入对象那样可以添加到工具箱中,或从工具箱中删除。包括:CheckBox(复选框)、ComboBox(组合框)、CommandButton(命令按钮)、Data(数据)、DirListBox(目录列表框)、DriveListBox(驱动器列表框)、FileListBox(文件列表框)、Frame(框架)、HScrollBar 和 VScrollBar(水平和垂直滚动条)、Image(图象)、Label(标签)、Line(线形)、ListBox(列表框)、OLE(OLE 容器)、OptionButton(选项按钮)、PictureBox(图片框)、Shape(形状)、TextBox(文本框)、Timer(定时器)。
ActiveX 控件,是扩展名为 .ocx 的独立文件,其中包括各种版本 Visual Basic 提供的控件(DataCombo, DataList 控件等等)和仅在专业版和企业版中提供的控件(例如 Listview、Toolbar、Animation 和Tabbed Dialog),另外还有许多第三方提供的的 ActiveX 控件。
可插入的对象,例如一个包含公司所有雇员的列表的 Microsoft Excel 工作表对象,或者一个包含某工程计划信息的 Microsoft Project 日历对象。因为这些对象能添加到工具箱中,所以可把它们当作控件使用。其中一些对象还支持自动化(正式的名称为 OLE 自动化),使用这种控件就可在 Visual Basic 应用程序中编程控制另一个应用程序的对象。
二、各控件共用的知识
(1)可以这样为控件命名:用前缀描述类,其后为控件的描述性名称。
(2)所有控件都有一个属性,只需引用控件名而无需使用属性名就可利用这个属性来存储或获取数值,称此属性为控件的值,这是控件的最重要或最常用属性。
控件 | 值 |
CheckBox(复选框) | Value |
ComboBox(组合框) | Text |
CommandButton(命令按钮) | Value |
CommonDialog(公共对话框) | Action |
Data(数据) | Caption |
DataCombo(数据组合) | Text |
DataGrid(数据网格) | Text |
DataList(数据列表) | Text |
DirListBox(目录列表框) | Path |
DriveListBox(驱动器列表框) | Drive |
FileListBox(文件列表框) | FileName |
FlexGrid | Text |
Frame(框架) | Caption |
HScrollBar(水平滚动条) | Value |
Image(图象) | Picture |
Label(标签) | Caption |
Line(线形) | Visible |
ListBox(列表框) | Text |
OptionButton(选项按钮) | Value |
PictureBox(图片框) | Picture |
Shape(形状) | Shape |
TextBox(文本框) | Text |
Timer(定时器) | Enabled |
VScrollBar(垂直滚动条) | Value |
(3)通过限制焦点验证控件数据:Validate 事件和 CausesValidation 属性是在允许用户将焦点移开控件之前,串联使用以确认对控件的输入的。比如,当每个文本框接收焦点时,您想在文本框的特殊验证准则被满足之前阻止用户移动焦点;然而,您也想允许用户在任何时候都能单击 Help 按钮。 要做到这点,在 Validate 事件中设置验证准则,并将 Help 按钮的 CausesValidation属性设置为 False。另外,Validate 事件包括一个 keepfocus 参数。当参数设置为 True,控件将保留焦点。这样做有效地防止了用户单击其它控件。
三、使用控件数组
(1)控件数组是一组具有共同名称和类型的控件。它们的事件过程也相同。同一控件数组中的元素有自己的属性设置值。常见的控件数组的用处包括实现菜单控件和选项按钮分组。
(2)在设计时,使用控件数组添加控件所消耗的资源比直接向窗体添加多个相同类型的控件消耗的资源要少。当希望若干控件共享代码时,控件数组也很有用。参见“有关菜单”。
(3)设计时有三种方法创建控件数组:
将相同名字赋予多个控件。
复制现有的控件并将其粘贴到窗体上。
将控件的 Index 属性设置为非 Null 数值。
-
(4)在运行时,可用 Load 和 Unload 语句添加和删除控件数组中的控件,然而,添加的控件必须是现有控件数组的元素。必须在设计时创建一个(在大多数情况下)Index 属性为 0 的控件。
-
加载控件数组的新元素时,大多数属性设置值将由数组中具有最小下标的现有元素复制。因为不会自动把 Visible、Index 和 TabIndex 属性设置值复制到控件数组的新元素中,所以,为了使新添加的控件可见,必须将其 Visible 属性设置为 True。
-
注意 试图对数组中已存在的索引值使用 Load 语句时,Visual Basic 将生成一个错误。
重点 可用 Unload 语句删除所有由 Load 语句创建的控件,然而,Unload 无法删除设计时创建的控件,无论它们是否是控件数组的一部分。
四、使用 ADO Data 控件
4.1 概述
ADO Data 控件使用 Microsoft ActiveX 数据对象(ADO) 来快速建立数据绑定的控件和数据提供者之间的连接。
Visual Basic以前的版本提供了内在的 Data 控件和 Remote Data 控件 (RDC) 来进行数据访问。这两种控件仍包括在 Visual Basic 中,以提供向后兼容。不过,因为 ADO 的适应性更广,因此建议用户使用 ADO Data 控件来创建新的数据库应用程序。
请注意,这种控件是一种相当“昂贵”的创建连接的方法,在第一个控件至少有两个连接,且以后的每个控件至少多一个连接时使用。
可能的用法:
连接一个本地数据库或远程数据库。
打开一个指定的数据库表,或定义一个基于结构化查询语言 (SQL) 的查询、或存储过程、或该数据库中的表的视图的记录集合。
将数据字段的数值传递给数据绑定的控件,可以在这些控件中显示或更改这些数值。
添加新的记录,或根据对显示在绑定的控件中的数据的任何更改来更新一个数据库。
-
4.2 用法
-
如果该控件不在“工具箱”中,请按 CTRL+T 键,显示“部件”对话框。在这个“部件”对话框中,单击“Microsoft ADO Data Control”。
-
在“属性”窗口中,单击“ConnectionString”显示“ConnectionString”对话框。 如果您已经创建了一个 Microsoft 数据链接文件(Data Link file)(.UDL),请选择“使用 OLE DB 文件”并单击“浏览”,以找到计算机上的文件。如果使用 DSN,则单击“使用 ODBC 数据源名”,并从框中选择一个 DSN,或单击“新建”创建一个。如果想创建一个连接字符串,请选择“使用 ConnectionString”,单击“生成”,然后使用“数据链接属性”对话框创建一个连接字符串。在创建连接字符串后,单击“确定”。
-
在“属性”窗口中,将“记录源”属性设置为一个 SQL 语句。在访问一个表时,应始终包括一个 WHERE 子句。否则会锁定整个表,这样对其他用户将是一个严重的障碍。
-
在窗体上再放置一个“文本框”控件,用来显示数据库信息。在其“属性”窗口中,将 Text1 的“数据源”属性设为 ADO Data 控件的名称 (ADODC1)。这样就将这个文本框和 ADO Data 控件绑定在一起。在其“属性”窗口中,单击“数据字段”将下拉得到一个可用的字段列表。单击所要显示的字段的名称。
下面的代码演示了如何在程序中设置 ConnectionString、Source、DataSource、以及 DataField这四个属性。注意设置 DataSource 属性要使用 Set 语句。
With ADODC1
.ConnectionString = "driver={SQL Server};" & _
"server=bigsmile;uid=sa;pwd=pwd;database=pubs"
. RecordSource = "Select * From Titles Where AuthorID = 7"
End With
Set Text1.DataSource = ADODC1
Text1.DataField = "Title"
End Sub
4.3 ADO Data 控件的事件
ADO Data 控件提供了若干个可以编程的事件。WillMove、MoveComplete、WillChangeField、FieldChangeComplete、WillChangeRecord、RecordChangeComplete、WillChangeRecordset、RecordsetChangeComplete、InfoMessage。
4.4 ADO Data 控件的与数据库相关的属性
当创建连接时,您可以使用下列三种源之一:一个连接字符串,一个 OLE DB 文件(.MDL),或一个 ODBC 数据源名称(DSN)。当您使用 DSN 时,则无须更改控件的任何其它属性。
设置 ADO Data 控件的与数据库相关的属性:ConnectionString、UserName、Password、RecordSource、CommandType、CursorLocation 、CursorType、LockType、Mode、MaxRecords、ConnectionTimeout、CacheSize、BOFAction、EOFAction
4.5 绑定到 ADO Data 控件的控件
任何具有 DataSource 属性的控件都可以绑定到一个 ADO Data 控件。下面的内在控件都可以绑定到 ADO Data 控件:复选框、组合框、图像、标签、列表框、图片框、文本框。
Visual Basic 的所有版本中也提供下述数据绑定的 ActiveX 控件:DataList、DataCombo、DataGrid、Microsoft Hierarchical FlexGrid、RichTextBox、Microsoft Chart、DateTimePicker、ImageCombo、MonthView
最后,用户可以使用 DataBinding 对象创建自己的数据绑定的 ActiveX 控件。
五、使用CheckBox 控件
如果试图双击 CheckBox 控件,则将双击当作两次单击,而且分别处理每次单击;这就是说,CheckBox 控件不支持双击事件。
在键盘上使用 TAB 键并按 SPACEBAR 键,由此将焦点转移到 CheckBox 控件上,这时也会触发 CheckBox 控件的 Click 事件。
CheckBox 控件象 CommandButton 和 OptionButton 控件一样,可通过更改 Style 属性的设置值后使用 Picture、DownPicture 和 DisabledPicture 属性增强其视觉效果。
六、使用 ComboBox 控件
(1)虽然通过ComboBox 控件可以显示、编辑和更新大多数标准类型数据库中的信息,但是 DBCombo 提供了更高级的数据访问特性。DBCombo 控件还支持一组与标准组合框控件不同的属性和方法。
(2)有三种组合框样式。下拉式组合框、简单组合框、下拉式列表框。
(3)在组合框中添加项目,应使用 AddItem 方法。
(4)设计时添加项目,选定 List 属性选项并单击向下箭头后就可输入列表项目,然后按 CTRL+ENTER 组合键换到新的一行。只能将项目添加到列表的末尾。所以,如果要将列表按字母顺序排序,则应将 Sorted 属性设置为 True。
(5)将 Sorted 属性设置为 True 之后,使用带有 index 参数的 AddItem 方法将导致不可预料的非排序结果。排序时不区分大小写;所以 "chardonnay" 和 "Chardonnay" 被看作一个词。
(6)可在组合框中用 RemoveItem 方法删除项目。为了在组合框中删除所有列表项目,应使用 Clear 方法:Combo1.Clear
(7)在运行时无论向控件的文本框部分输入了什么文本,Text 属性都与这个文本相对应。这可以是选定的列表选项,或者是用户在文本框中输入的字符串。
(8)有了 List 属性就可访问列表中所有项目。Text1.Text = Combo1.List(2)
(9)ListIndex 属性设置或返回控件中当前选定项目的索引值,而且只在运行时有效。对组合框的 ListIndex 属性进行设置也会触发控件的 Click 事件。如果未选定项目,或者用户在组合框中输入选项(样式 0 或 1)而不在列表中选择现有项目,则 ListIndex 为 –1。NewIndex 属性可用来跟踪列表中最后添加的项目的索引。
(10)为了返回组合框中的项目数,应使用 ListCount 属性。
七、使用CommandButton
(1)如果不创建访问键,而又要使标题中包含连字符但不创建访问键,应添加两个连字符 (&&)。这样一来,在标题中就只显示一个连字符而不显示下划线。
(2)无论何时选定命令按钮都会将其 Value 属性设置为 True 并触发 Click 事件。可在代码中用 Value 属性触发命令按钮的 Click 事件。
(3)单击命令按钮后也将生成 MouseDown 和 MouseUp 事件。CommandButton 控件中事件发生的顺序为:MouseDown、Click、MouseUp。可通过更改 Style 属性设置值后用 Picture、DownPicture 和 DisabledPicture 属性增强视觉效果。
八、使用 CommonDialog 控件
CommonDialog 控件提供诸如打开和保存文件、设置打印选项、选择颜色和字体等操作的一组标准对话框。在运行 Windows 帮助引擎时,控件还能够显示帮助。为了用该控件创建对话框,必须要求 Commdlg.dll 在 Microsoft Windows /System 目录下。
在窗体上绘制 CommonDialog 控件时,控件将自动调整大小并显示成一个图标。此图标的大小不能改变。象 Timer 控件一样,CommonDialog 控件在运行时不可见。运行时,请适当使用下表所列方法显示需要的对话。
方法 | 显示的对话 |
ShowOpen | 打开 |
ShowSave | 另存为 |
ShowColor | 颜色 |
ShowFont | 字体 |
ShowPrinter | 打印 |
ShowHelp | 调用 Windows“帮助” |
8.1 “打开“对话框
下列代码显示“打开“对话框并以选定的文件名为打开文件过程的参数:
'CancelError 为 True。
On Error GoTo ErrHandler
'设置过滤器。
CommonDialog1.Filter = "All Files (*.*)|*.*|Text _
Files (*.txt)|*.txt|Batch Files (*.bat)|*.bat"
'指定缺省过滤器。
CommonDialog1.FilterIndex = 2
'显示“打开”对话框。
CommonDialog1.ShowOpen
'调用打开文件的过程。
OpenFile (CommonDialog1.FileName)
Exit Sub
ErrHandler:
'用户按“取消”按钮。
Exit Sub
End Sub
(1)指定在“文件类型”列表框中显示的文件过滤器列表。Description 是列表框中显示的字符串─ 例如,"Text Files (*.txt)"。Filter 是实际的文件过滤器─ 例如,"*.txt"。每个description | filter 设置间必须用管道符号分隔 (|)。
(2)选定文件后可用 FileName 属性获取选定文件的名称。
(3)对所有公共对话框,当 CancelError 属性为 True,而且用户单击了对话框的“取消”按钮时将生成一个错误。在显示对话框时捕获错误,以此检测是否按了“取消”按钮。
8.2 使用“颜色”对话框
'将 Cancel 设置成 True。
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
'设置 Flags 属性。
CommonDialog1.Flags = cdlCCRGBInit
'显示“颜色”对话框。
CommonDialog1.ShowColor
'将窗体的背景颜色设置成选定的
'颜色。
Form1.BackColor = CommonDialog1.Color
Exit Sub
ErrHandler:
'用户按了“取消”按钮。
Exit Sub
End Sub
8.3 使用“字体”对话框
“字体”对话框根据大小、颜色、样式选择字体。用户一旦在“字体”对话框中选定字体后,其属性就会包含有关用户选项的信息。
在显示“字体”对话框之前必须将 Flags 属性设置为3个常数之一,否则将发生不存在字体错误。
8.4 使用“打印”对话框
“打印”对话框允许用户指定打印输出的方法。用户可指定打印页数范围、打印质量、复制数目等等。此对话框还显示有当前安装的打印机信息,并允许用户进行配置或重新安装新的缺省打印机。
注意 此对话框并不真正地将数据送到打印机。它允许用户指定如何打印数据。必须编写代码实现用选定格式打印数据。
若将 PrinterDefault 属性设置为 True,则可在 Visual Basic Printer 对象上打印。另外,当 PrinterDefault 属性为 True 时,所有在“打印”对话框“设置”部分中作出的变更都将改变用户“打印机”设置中的打印机设置值。
8.5 使用 ShowHelp 方法显示帮助文件
'将 Cancel 设置为 True。
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
'设置 HelpCommand 属性
CommonDialog1.HelpCommand = cdlHelpForceFile
'指定帮助文件。
CommonDialog1.HelpFile = "c:/Windows/Cardfile.hlp"
'显示 Windows 帮助引擎。
CommonDialog1.ShowHelp
Exit Sub
ErrHandler:
'用户按下了“取消”按钮。
Exit Sub
End Sub
九、使用Data控件
Data 控件通过使用 Microsoft 的 Jet 数据库引擎来实现数据访问 –与 Microsoft Access 所用的数据库引擎相同。Data 控件最适合较小的(桌面)数据库,诸如 Access 和 ISAM 数据库。
Data 控件和 Remote Data 控件两者都包含在 Visual Basic 中,以提供向后兼容。不过,由于 ActiveX 数据对象 (ADO) 的适应性更广,因此建议使用 ADO Data 控件来创建新的数据库应用程序。