VB控件教程大全

阅读: 评论:0

2024年2月8日发(作者:)

VB控件教程大全

VB控件教程大全

一、Datagrid控件

(0) '删除0号字段

(0).Caption=”姓名” '标签头

s(0).DataField=”Name” '对应的字段

h

设定DataGrid格式的有用的属性:

BackColor — 设定背景颜色。

Font — 设定DataGrid的字体信息。字体信息包括使用何种字体、字号,是否粗体,斜体等。

CellPadding — 设定HTML表格中单元格内的边距。

CellSpacing — 设定HTML表格中单元格之间的间距。

Width — 设定HTML表格的宽度(可以以像素、百分比等为单位)

HorizontalAlign — 设定表格在页面上的对齐方式(左对齐、右对齐、居中、未设定)

一个使用上述属性而使得表格变得漂亮的例子如下所示。请注意DataGrid的Font属性是一个对象,它指向了FontInfo类,FontInfo类包括Size, Name, Bold, Italic等属性。为了设定Font对象所指向类的属性,必须通过连字符(-)完成。这类似于和C#语言中表示对象属性的点(.)。

1、使用 DataGrid 控件

DataGrid 控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示 Recordset 对象的记录和字段。可以使用 DataGrid 来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid 控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了DataGrid 控件的

DataSource 属性后,就会用数据源的记录集来自动填充该控件,以及自动设置该控件的列标头。然后您就可以编辑该网格的列;删除、重新安排、添加列标头、或者调整任意一列的宽度。

在运行时,可以在程序中切换 DataSource 来察看不同的表,或者可以修改当前数据库的查询,以返回一个不同的记录集合。

注意 DataGrid 控件与 Visual Basic 5.0中的 DBGrid 是代码兼容的,除了一个例外:DataGrid 控件不支持 DBGrid 的“解除绑定模式”概念。DBGrid 控件包括在 Visual Basic 的 Tools 目录中。

2、可能的用法

查看和编辑在远程或本地数据库中的数据。

与另一个数据绑定的控件(诸如 DataList 控件)联合使用,使用 DataGrid控件来显示一个表的记录,这个表通过一个公共字段链接到由第二个数据绑定控件所显示的表。

使用 DataGrid 控件的设计时特性

可以不编写任何代码,只通过使用 DataGrid 控件的设计时特性来创建一个数据库应用程序。下面的说

明概要地说明了在实现 DataGrid 控件的典型应用时的一般步骤。完整的循序渐进的指示,请参阅主题“DataGrid 方案1: 使用 DataGrid 控件创建一个简单数据库应用程序”。

要在设计时实现一个 DataGrid 控件

1. 为要访问的数据库创建一个 Microsoft 数据链接 (.MDL) 文件。请参阅“创建 Northwind OLE DB

数据链接”主题,以获得一个示例。

2. 在窗体上放置一个 ADO Data 控件,并将其 ConnectionString 属性设置为在第 1 步中所创建的OLE DB 数据源。

3. 在这个 Ado Data 控件的 RecordSource 属性中输入一条将返回一个记

录集的 SQL 语句。例如,Select * From MyTableName Where CustID = 12

4. 在窗体上放置一个 DataGrid 控件,并将其 DataSource 属性设置为这个 ADO Data 控件。

5. 右键单击该 DataGrid 控件,然后单击“检索字段”。

6. 右键单击该 DataGrid 控件,然后单击“编辑”。

7. 重新设置该网格的大小、删除或添加网格的列。

8. 右键单击该 DataGrid 控件,然后单击“属性”。

9. 使用“属性页”对话框来设置该控件的适当的属性,将该网格配置为所需的外观和行为。

在运行时更改显示的数据

在创建了一个使用设计时特性的网格后,也可以在运行时动态地更改该网格的数据源。下面介绍实现这一功能的通常方法。

3、更改 DataSource 的RecordSource

更改所显示的数据的最通常方法是改变该 DataSource 的查询。例如,如果DataGrid 控件使用一个ADO

Data控件作为其 DataSource,则重写RecordSource和刷新该ADO Data 控件都将改变所显示的数据。

'' ADO Data 控件连接的是 Northwind 数据库的'' Products 表。新查询查找所有

'' SupplierID = 12 的记录。

Dim strQuery As String

strQuery = "SELECT * FROM Suppliers WHERE SupplierID = 12"

Source = strQuery

h

4、更改 DataSource

在运行时,可以将 DataSource 属性重新设置为一个不同的数据源。例如,您可能具有若干个 ADO Data

控件,每个控件连接不同的数据库,或设置为不同的 RecordSource 属性。可以简单地将 DataSource 从一个 ADO Data控件重新设置为另一个 ADO Data 控件:

'' 将 DataSource 重新设置为一个连接到 Pubs 数据库的、

'' 使用 Authors 表的 ADO Data 控件。

Set urce = adoPubsAuthors

5、重新绑定 DataSource

当将 DataGrid 控件用于一个远程数据库,诸如 SQLServer 时,可以改变表的结构。例如,可以给这个表添加一个字段。在这种情形下,可以调用Rebind 方法根据新的结构来重新创建该网格。注意,如果已经在设计时改变了这个列的布局,DataGrid 控件将会试图重新创建当前的布局,包括任何空的列。不过,通过首先调用 ClearFields 方法,可以强制该网格重新设置所有的列。

从 DataGrid 返回值

在 DataGrid 被连接到一个数据库后,可能想要监视用户单击了哪一个单元。可以使用 RowColChange

事件——而不是 Click 事件。如下所示:

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)

'' 显示用户所单击的单元的文字、行和列的信息。

; ;

End Sub

6、使用 CellText 和 CellValue 方法

当一个列使用 NumberFormat 属性设置格式后,CellText 和 CellValue 属性是很有用的。NumberFormat

属性不必更改实际的数据格式就可以更改任何包含数字的列的格式。例如,给定一个网格,其中包含一个名为 ProductID的、包含整数的列。下面的代码将使 DataGrid 以"P-0000" 的格式来显示数据。换句话说,尽管在 ProductID 字段中所包含的实际数值为 "3",但该网格所显示的值将是 "P-0003"。

Private Sub Form_Load()

s("ProductID").NumberFormat = "P-0000"

End Sub

要返回数据库中所包含的实际值,应使用 CellValue 方法,如下所示:

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)

_

s("ProductID").CellValue(rk)

End Sub

注意 上面所用的 CellValue 和下面所用的 CellText 值,都需要将Bookmark 属性作为一个参数, 功能才正确。

相反地,如果要返回该字段的格式化的值,应使用 CellText 方法:

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)

_

s("ProductID").CellText(rk)

End Sub

注意 上面的 CellText 方法等价于使用 DataGrid 控件的 Text 属性。

添加、删除或隐藏列

通过使用 Columns 集合和 Column 对象的属性和方法,可以在程序中添加、删除或隐藏列。

添加和删除一列

要在运行时添加一列,可以使用 Add 方法。如果首先声明一个变量,并将新对象赋给该变量,就可以用简明的代码设置各种属性。

Private Sub AddColumn()

' 在最右边的位置添加一列。然后设置其 Visible、Width、

' Caption以及 Alignment 属性。DataField 属性则指定

' 该列将绑定到哪一个字段。

Dim c As Column

Set c = ()

With c

.Visible = True

.Width = 1000

.Caption = "我的新列"

.DataField = ("ProductName").Name

.Alignment = dbgRight

End With

End Sub

可以使用方法来删除任意一列。请确保使用 ColIndex 参数来指定要删除的列。下面的代码将删除被单击的列。

Private Sub DataGrid1_HeadClick(ByVal ColIndex As Integer)

ColIndex

End Sub

隐藏一列

通过将 Visible 属性设置为 False,可以隐藏任意一列。当想要限制用户可以查看或编辑的列时这一功能特别有用。下面的示例在 Columns 集合中循环,隐藏除少数列之外的所有列。

Private Sub HideColumns()

' 使用 DataField 属性来判别正在测试的是哪一列。

' 只显示三列:ProductName、UnitPrice以及

' UnitsInStock。

Dim c As Column

For Each c In s

Select Case eld

Case "ProductName"

e = True

Case "UnitPrice"

e = True

Case "UnitsInStock"

e = True

n = "In Stock" ' 更改这个列的标头。

Case Else ' 隐藏其它所有的列。

e = False

End Select

Next c

End Sub

操作 DataGrid 视图

一个“拆分”的网格使最终用户对相同的数据可以拥有多个视图。例如,假设有一个由十个字段组成的大表。在这种情况下,在控件中察看的记录集将有十列宽,除非窗体非常宽,否则用户将无法同时看见所有列的内容。,而且,假设用户只对第一列和最后一列感兴趣(例如,第一列是名字,最后一列是电话号码)。为了能同时看到在两端的列(不重新安排列的顺序),可以对网格进行拆分。

创建一个 Split 对象

在设计时,可以创建一个拆分,具体步骤是:右键单击网格,单击“编辑”,再单击右键,然后单击“拆分”。通过右键单击该控件,并单击“属性”来显示“属性页”对话框,可以编辑这个拆分。可以使用“拆分”选项卡来自定义拆分。要删除一个拆分,右键单击该拆分,并单击“删除”。

在运行时,最终用户也可以通过单击位于这个网格控件的左下边的右边的选项卡,以手工方式来拆分该网格(除非不允许这个操作),如下图所示:

默认情况下,DataGrid 控件包含一个 Split 对象。防止最终用户添加拆分的代码为:

(0).AllowSizing = False

在程序中添加和删除拆分

DataGrid 控件包含一个 Split 对象的集合。要在程序中添加拆分,可以使用 Add 方法,如下所示:

1

注意 Add 方法需要新的拆分索引作为其参数。要添加一个拆分,应将这个索引参数设置为

Splits 集合的 Count 属性值。

使用 Split 集合的 Add 方法,可以在程序中按照实际需要添加拆分。由于添加多于两个以上的拆分将使网格很难使用,可以使用该集合的 Count 属性来限制拆分的数目。

If < 3 Then ' 添加一个拆分。

End If

使拆分同步

当拆分多于一个时,可能希望控制这些拆分如何滚动。例如,在一个具有三个拆分的网格中,可以决定只让第一个和第三个拆分同步,而让中间的拆分独立地滚动。要同步任何两个(或多个)拆分,只需将每个 Split 对象的 ScrollGroup 属性设置为同一个值。

' 使第一个和第三个 Split 对象同步。

With DataGrid1

.Splits(0)

.ScrollGroup = 1

.Splits(1).ScrollGroup = 2

.Splits(2).ScrollGroup = 1

End With

通过设置 Scrollbars 属性,使同步的拆分组只显示一个滚卷条,从而进一步自定义拆分的外观。

控制 Tab 键和箭头键的行为

使用 WrapCellPointer、TabAcrossSplits以及 TabAction 属性,可以决定当最终用户按下

tab 键或箭头键时网格的行为。

在这三个属性中,TabAction 属性级别最高,它决定 WrapCellPointer 和TabAcrossSplits

这两个属性是否能生效。TabAction 有三个设置值: ControlNavigation、Column Navigation 和

Grid Navigation。当该属性设置为 ControlNavigation 时,按 Tab 键根据 TabIndex 将焦点切换到下一个控件。这一设置优先于 WrapCellPointer 和 TabAcrossSplits。

WrapCellPointer 属性决定在任何单个的拆分中 tab 键和箭头键的行为。如果该属性设置为

True,且当前单元位于最后一列,这时最终用户按 tab 键则使第一列的下一行变成当前的单元。不过,如果当前单元位于最后一行的最后一列时,这时就没有地方可以“换行”。

TabAcrossSplits 属性决定当网格中存在两个或多个拆分时 tab 和箭头键的行为。如果该属性设置为 True,且当前单元位于任何一个拆分的最后一列,则按Tab或箭头键将使当前单元“跳”

到下一个拆分的第一列。当前单元仍保持相同的行位置。

注意 如果 WrapCellPointer 和 TabAcrossSplits 属性都设置为 True,则只有当前单元位于最后一个拆分的最后一列时才会换行。这时当前单元将换到第一个拆分的第一列中的下一行。

自定义列集合

每一个 Split 对象都有一个 Columns 属性,允许用户来操作一个 Column对象的集合。通过这样做,可以更改每个 Split 对象的外观。例如,可以用一个拆分包含显示姓氏字段和名字字段的两个列,而第二个拆分则显示电话字段和地址字段。要实现这一目标,需要将其它的每一列的

Visible 属性设置为 False,如下所示:

' 枚举 Columns 集合,对每一个 Column 对象的 DataField 属性

' 进行测试。如果测试失败,则隐藏这一列。

Dim i As Integer

' 隐藏除 ProductName 列之外的所有列。

For i = 0 To (0). - 1

If (0).Columns(i).DataField <> "ProductName" Then

(0).Columns(i).Visible = False

End If

Next i

' 隐藏除 UnitPrice 列之外的所有列。

For i = 0 To (0). - 1

If (1).Columns(i).DataField <> "UnitPrice" Then

(1).Columns(i).Visible = False

End If

Next I

使用 Bookmarks 和 SelBookmarks 跟踪记录

Bookmarks 和 SelBookmarks 提供了标记记录的一种手段。当编写应用程序中的特定功能(诸如允许最终用户手工地选择多个不相邻的记录,进行所选记录的大批更新)时,这就很有必要。在这些情形中,需要标记哪些记录已被选择,因此可以使用 SelBookmarks 集合及其属性。

有两个函数,分别是 CellText 和 CellValue 方法,需要标记才能正确执行。

标记用户的选择

SelBookmarks 集合包含所有选定的记录的书签。当最终用户手工选择记录时(即在单击时按住 CTRL 键),每一个选定的记录的书签都会加入到该集合中。使用标准的循环,用户可以知道已经选定了什么,也可以保存书签(因为可能需要恢复某个值),以及执行操作:

Dim i as Integer ' 计数器

Dim intCount As Integer

intCount = - 1

ReDim arrSelBK(intCount) ' 声明用于保存书签的数组。

For i = 0 To intCount

ArrSelBK(i) = kmarks(i)

' 在此处执行操作。如果该操作必须被

' 取消,则退出该循环,然后使用该数

' 组来取消这些更改。

Next i

通过在程序中添加到 SelBookmarks 集合来选择记录

通过将记录添加到这个集合,也可以在程序中选定记录。例如,可能有一个显示指定的客户所有订货的网格。如果要高亮显示该客户花费超过 $100的所有记录,则对记录进行过滤,并将结果

书签添加到 SelBookmarks 集合。

Dim rs As Recordset

Set rs = set

While Not

If rs!SupplierID = 12 Then

rk

End If

xt

Wend

显示计算结果字段

假设在表中有一个名为 "Price" 的字段,并且想使用本地税率来计算表中每一项的税费。这就是一个计算结果字段,可以通过修改 DataSource 的查询来计算这个值,并把这个值返回给

DataGrid 控件。

要在 DataGrid 控件中创建一个计算结果字段

1. 确认在机器上已为 Northwind 数据库建立了一个OLE DB 数据源;如果还没有创建这样的一个数据源,请按照“创建 Northwind 的OLE DBData 连接”的步骤操作。

2. 在窗体上放置一个 ADO Data 控件和一个 DataGrid 控件。

3. 将 ADO Data 控件的ConnectionString 属性设置为 Northwind 的数据源。

4. 设置 ADO Data 控件的 RecordSource 属性。在“属性”窗口中,单击“记录源”并输入

Select ProductName, UnitPrice,(UnitPrice * .082) As Tax From Products。

5. 将 DataGrid 控件的 DataSource 属性设置为这个 ADO Data 控件。

6. 运行该工程。

与类模块一起使用 DataGrid 控件

如果想要访问以自定义格式或以 ODBC 驱动程序不直接支持的格式存放的数据,可以创建一个类来封装该数据。然后可以编写该类的自定义函数来检索这些数据。这样该类就变成了一种数据源,可以被任何数据使用者(如DataGrid 控件)使用。

在这个类模块的Initialize 事件中,首先通过声明一个作为 New set的变量,来创建一个 ADODB recordset 对象。在创建了这个 recordset 对象后,再添加字段,每个数据源中的每个字段都要加入。然后使用合适的数据填充这个记录集。

注意 也可以使用 OLEDB 示例提供者来创建一个数据源。关于 OLEDB示例提供者的详细信息,请参阅“创建带有数据提供方的部件”。

类模块有一个 GetDataMember 事件,只要当数据使用者(诸如 DataGrid 控件)需要数据时就产生该事件。在这个事件中,Data 参数被设置为在Initialize 事件中所创建的 recordset 对象。

如果要使用这个类模块,应创建一个具有一个 DataGrid 控件的窗体。在该窗体的 Load 事件的代码中,将该控件的 DataSource 属性设置为这个类。

注意 数据类模块在设计时是不可用的。例如,如果使用 DataGrid 控件,则当用户在“属性”

窗口中单击“数据源”时,所有可用的数据源都会出现在一个下拉列表中。但其中不会有这个数据类模块,它只能在代码中设置。

使用类模块创建一个数据源

下面的示例使用一个类模块来创建一个简单数据源。然后通过 DataSource属性将 DataGrid

控件绑定到该模块。

要创建一个用于DataGrid 的类

1. 创建一个新的标准 Exe 工程。

2. 给窗体添加一个 DataGrid 控件。如果DataGrid控件不在“工具箱”中,则在“工程”菜单中单击“部件”,

再单击“Microsoft DataGrid Control”,然后单击“确定”。

3. 在“工程”菜单中,单击“引用”。在“引用”对话框中,单击“MicrosoftActiveX Data

Objects 2.0 Library”。

4. 在“工程”菜单中,单击“添加类模块”来给工程添加一个数据类模块。

5. 在“工程资源管理器”窗口中,单击并选定“类”图标,并按 F4 键显示“属性”窗口。

6. 在“属性”窗口中,将类的名称更改为NamesData。

7. 在“属性”窗口中,单击“DataSourceBehavior”并将该属性更改为vbDataSource。

8. 在该类模块的 Declarations 部分,创建一个 ADODB Recordset变量,如下所示:

Option Explicit

Private WithEvents rsNames As Set

使用 WithEvents 关键词来声明该变量,使用户可以对 RecordSet 对象的事件编程。

9. 在该类的 Initialize 事件中,添加下述代码:

Private Sub Class_Initialize()

' 将新的数据成员的名称添加到 DataMember 集合

' 这使其它对象可以看见这些可用的

"Names"

Set rsNames = New Set ' 设置对象变量。

' 创建一个具有两个字段的 recordset,并打开该 recordset。

' 第一个记录具有一个整数的数据类型,第二个记录是一个最大可

' 达 256 个字符的字符串。CursorType 被设置为 OpenStatic

' —— 一个可更新的对一组记录的快照。LockType 被设置为

' LockOptimistic,以允许对该 recordset 进行更新。

With rsNames

. "ID", adInteger

. "Name", adBSTR, 255

.CursorType = adOpenStatic

.LockType = adLockOptimistic

.Open

End With

Dim i As Integer

For i = 1 to 10 ' 添加十条记录。

rsNames!ID = i

rsNames!Name = "Name " & i

Next i

rst ' 移到该记录集的开始。

End Sub

这部分代码首先创建 recordset 对象,然后给该对象添加两个字段。代码接着给 recordset

添加十条记录。

10. 在该类的 GetDataMember 事件中,添加下述代码 :

Private Sub Class_GetDataMember(ByVal DataMember As String, _

Data As Object)

Set Data = rsNames

End Sub

只要发生该事件——即当该类对象被绑定到一个数据使用者,如 DataGrid控件时,代码将返回该 recordset 对象。

11. 在 Form 对象的代码模块中,声明一个数据类的对象变量:

Option Explicit

Private datNames As NamesData ' 类变量

12. 在 Form 对象的 Load 事件的代码中,将 DataGrid 控件的 DataSource设置为该类对象。

Private Sub Form_Load()

' 创建一个新的 NamesData 对象

Set datNames = New NamesData

' 将这个 DataGrid 绑定到新的数据源 datNames

Set urce = datNames

End Sub

13. 按 F5 键运行该工程。

二、访问 Hierarchical FlexGrid 控件

要在 Visual Basic 中安装并访问 Hierarchical FlexGrid 控件,请使用以下步骤。

要安装和访问 Hierarchical FlexGrid 控件

1. 在“工程”菜单中,选择“部件”。出现“部件”对话框。

2. 在“控件”选项卡中,选择“Microsoft Hierarchical FlexGrid Control 6.0”,然后单击“确定”。MSHFlexGrid 控件被添加到 Visual Basic 工具箱中。

3. 在 Visual Basic 工具箱中,单击 MSHFlexGrid 控件,然后将其拖到一个 Visual Basic 窗体上。

-或者-

在 Visual Basic 工具箱上,双击 MSHFlexGrid 控件,将其添加到窗体上。

将数据绑定到 Hierarchical FlexGrid

在开始使用它的功能之前,必须先将数据绑定到 Hierarchical FlexGrid。要将数据绑定到控件,可以使用 Visual Basic 新的 Data Binding Manager,或者通过编程实现。

在将 Hierarchical FlexGrid 绑定到数据源之后,Hierarchical FlexGrid 在设计时屏幕显示是一个空白列和一个空白行。字段和带区信息不是自动提取的(要获得此类信息,请参阅取得结构信息)。如果 Hierarchical FlexGrid 在没有字段和带区信息的情况下运行,那么在显示数据的时候将使用缺省的属性设置。就是说,如果 Hierarchical FlexGrid 被绑定到一个分层结构的Command,那么显示出的数据带区将是水平排列的,每个带区中包含一列,分别对应于 Recordset 中的每一个字段。

绑定到数据源的 Hierarchical FlexGrid

使用 Visual Basic Data Binding Manager 将数据绑定到Hierarchical FlexGrid

本节说明如何使用 Visual Basic Data Binding Manager 将数据绑定到Hierarchical

FlexGrid。Data Binding Manager 提供了一种便于进行数据绑定的用户界面。

使用 Visual Basic Data Binding Manager 设置 DataSource

1. 为 Hierarchical FlexGrid 创建数据源。数据源可以是 DataEnvironment 对象或者

ActiveXData Control,或者是一种新的 Visual Basic 功能。在本例中,将数据源创建为

DataEnvironment 对象。

2. 在 Visual Basic 工具箱上,单击 MSHFlexGrid 控件,然后将其拖到一个 Visual Basic 窗体上。

-或者-

在 Visual Basic 工具箱上,双击 MSHFlexGrid 控件将其拖到一个 VisualBasic 窗体上。

3. 在 Visual Basic “属性”窗口中,将 DataSource 属性设置为包含了希望被绑定到

Hierarchical FlexGrid 的 Command 对象的 DataEnvironment对象。

警告 如果 DataSource 被重新设置,Hierarchical FlexGrid 单元格中的所有用户定义的、修改过的数据都将被丢失。4. 在 Visual Basic “属性”窗口中,将 DataMember 属性设置为

DataEnvironment 中的一个 Command 对象。如果希望在 HierarchicalFlexGrid 中查看分层结构的数据,那么必须指定 Command 分层结构中最顶部的父 Command 对象作为 DataMember。

5. 要查看 Hierarchical FlexGrid 中的数据,请在“运行”菜单中选择“开始”。

-或者-

按下 F5 键。

以编程方式将数据绑定到 Hierarchical FlexGrid

本节描述如何以编程方式将数据绑定到 Hierarchical FlexGrid。要以编程方式设置

DataSource

1. 在 Visual Basic 工具箱中,双击 MSHFlexGrid 控件,将其放在一个Visual Basic 窗体上。

2. 右击该 Hierarchical FlexGrid,然后从快捷菜单中选择“查看代码”。出现“代码编辑器”窗口。

3. 在 Form_Load 事件中,添加代码来创建一个 ADO Recordset 并将其赋予 Hierarchical

FlexGrid。该代码将在下面的分步骤中提供。

注意 要以编程方式设置数据源,工程中必须要有指向 MicrosoftActiveX Data Objects 的引用:在“工程”菜单中,选择“引用”,然后选择“Microsoft ActiveX Data Objects 2.0

Library”。

插入下列代码,创建一个 ADO Connection 和 Recordset,请根据实际情况替换其中的注释(例如,将 替换为数据源的实际名称):

DIM Cn As New Connection, Rs As New Recordset

' 你需要将 替换为你的系统

' 中的一个有效的 DSN。

tionString = "DSN="

' 使用下列代码用于 SHAPE Commands

er = "MSDataShape"

Location = adUseNone

' 第二种办法,对于 SQL Commands 可使用下列代码

Location = adUseNone

' 需要为上面创建的 Connection 的 Recordsets 指定

' 有效的数据源

= ""

' 现在将 Command 与 Connection 关联

' 起来并执行它们。

Set Connection = Cn

插入下面的代码,将 Rs 中打开的 Recordset 赋予 HierarchicalFlexGrid:

Set urce = Rs

4. 要查看 Hierarchical FlexGrid 中的数据,请在“运行”菜单中选择“开始”。

-或者-

按下 F5 键

Hierarchical FlexGrid 与分层结构的 Recordset

将 Hierarchical FlexGrid 和一个分层结构的 Recordset 结合起来可以查看关系类型的信息。在将这些信息显示给用户的时候,可以确保原始数据的安全,使之不被用户修改;也可以通过将文本框添加到窗体defForm来增加Hierarchical FlexGrid 的单元格编辑功能。当

Hierarchical FlexGrid 被绑定到分层结构的 Recordsets 上时,可以使用带区来显示分组的和相关的Recordsets。

注意 在执行本步骤之前,必须先将数据绑定到 Hierarchical FlexGrid。为此,请参阅将数据绑定到分层结构的 FlexGrid。

要使用带区在 Hierarchical FlexGrid 中显示分层结构的 Recordsets

1. 右击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“通用”选项卡中,设置“带区显示”。关于每一种带区显示的描述,请参阅带区的格式设置。

3. 在“带区”选项卡中,从“带区”框中选择一个带区。这里列出的可用带区是根据 Command

分层结构中的Recordsets确定的。对于每一个带区,生成Recordset的Command 的名称被显示在括号中。

4. 在必要的时候修改每个带区的属性。与此有关的详细信息,请参阅带区的格式设置。

5. 单击“确定”,将带区属性应用于Hierarchical FlexGrid 并关闭“属性页”对话框。

带区的格式设置

在 Hierarchical FlexGrid 中,可以利用带区格式设置功能来指定某个Recordset 的显示选项。ADO 分层结构 Recordset 中的每一个 Recordset 都将被创建一个带区。例如,如果将一个

Hierarchical FlexGrid 绑定到一个包含 Customers 和 Orders 的 ADO 分层结构,那么

Hierarchical FlexGrid 在开始的时候将包含两个带区。

通过设置带区的格式,可以定制 Hierarchical FlexGrid 的屏幕外观。这样就可以突出显示多个带区中的重要信息。允许进行格式设置的带区元素包括:列标头、网格线、颜色和缩进。

如果绑定到非分层结构的 Recordset,那么控件中将只有一个带区,而且该带区被称为 Band

0。没有其他带区,因为带区以 Command 分层结构中的Recordsets 为基础。

改变带区的布局

通过改变带区的布局,带区内的字段显示方式将得以改变。在缺省情况下,带区的诸字段将沿水平方向排列,同标准的网格一样。

水平方式的带区显示

垂直显示方式将导致带区在高度方向上进行扩展,以便能够在带区中容纳所有的字段。Hierarchical FlexGrid 中显示的其他带区也将被扩展,确保所有的带区的高度相同。

垂直方式的带区显示

要设置带区的布局

1. 右击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“通用”选项卡中设置“带区显示”。

3. 单击“确定”,将带区的显示属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

显示列标头

如果带区以水平方式显示,那么可以为 Hierarchical FlexGrid 设置标头。标头直接显示在带区之上,并且为 Hierarchical FlexGrid 中的每一个带区分别显示一次。如果在 Hierarchical

FlexGrid 的顶部和左边只需要为每个带区显示一组标头,请使用固定单元格取代标头。关于固定单元格的信息,请参阅“自定义固定外观” (在主题自定义 Hierarchical FlexGrid 区域中)。

1. 右击 Hierarchical FlexGrid,然后从快捷菜单中选择“实现”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“带区”选项卡中,选择“列标头”,然后在”TextStyleHeader”列表框中选择列标头样式。

3. 单击“确定”,将列标头属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

水平的列标头

改变列的顺序

Hierarchical FlexGrid 带区中的各列的顺序是可以改变的。

要改变带区内的列顺序

1. 选定需要移动的列。

2. 使用上下箭头键将列移动到带区内的新位置上。

修改颜色和网格线

设置带区的颜色和网格线信息的方法有两种:全体方式和个别方式。修改颜色和网格线的目的通常是为了突出地显示 Hierarchical FlexGrid 内的某些重要信息,便于用户阅读数据。另外,还可以指定带区内的单元格之间是否需要显示网格线。使用下面的过程可以修改 Hierarchical

FlexGrid 内所有带区的颜色和网格线。

注意 如果需要改变单个带区的颜色信息,必须使用BackColorBand属性以编程方式进行改变。

要改变全局的颜色和网格线

1. 右击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“带区”选项卡中,从“网格线”框中选择一种样式,然后单击“应用”。对于选定的带区,该样式确定了 Hierarchical FlexGrid 中位于标准的填充文本区域之间的线条的类型。

3. 在“样式”选项卡中,从“固定网格线”中选择一种样式。然后从“非置入网格线”中选择一种样式并单击“应用”。这些样式确定了 HierarchicalFlexGrid 中位于固定的与未填充区域之间的线条的类型。

4. 在“颜色”选项卡中,为每一种网格线属性指定一种颜色。为此,请首先选择一个“颜色设置”。然后选择要修改的属性(例如 GridColor),从“调色板”中选择一种颜色,最后单击“应用”。对于需要改变的每一条Hierarchical FlexGrid 网格线都需要重复该操作。

注意 如果使用了 Windows 缺省颜色,那么 Hierarchical FlexGrid 中显示的颜色将是在“显示控制面板”中指定的颜色。除了将Hierarchical FlexGrid 属性的颜色改变为标准的或

Windows 缺省颜色之外,也可以创建自己的颜色定义(单击“编辑自定义颜色”,使用随之弹出的“颜色”对话框)。

5. 单击“确定”,将网格线和颜色属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

缩进带区

如果带区以垂直方式显示,那么可以使带区缩进若干列。这样就可以使用户查看带区信息的时候更加清楚。每个带区前面被缩进的列中包含了空白的、未被使用的单元格。因此,用户不能够将焦点移到这些区域中。这些单元格的格式特点是由若干缩进格式定义属性,如 GridLinesIndent定义的。请参阅前面的“改变带区的布局”中的“垂直方式的带区显示”图片。

要缩进带区

1. 右击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“带区”选项卡中,选择“带区缩进”并指定带区需要缩进的列数。

3. 单击“确定”,将带区属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

对非分层结构的 Recordset 使用带区功能

使用 Hierarchical FlexGrid 的“属性页”对话框,也可以设置非分层结构的Recordset 带区的格式。

非分层结构的 Recordset 中只包含一个带区,即 Band 0。没有其他的带区,因为带区是以

Command 分层结构中的 Recordsets 为基础的。

使用带区的扩展和收缩功能

扩展和收缩功能有助于方便地查看 Recordset 的组织情况,便于滚动查看Hierarchical

FlexGrid。该功能使用户既能够查看大量的数据,也可以查看压缩形式的信息。如果一个带区是可开展的,那么该带区的左上角会显示出一个缺省的扩展 (+) 或收缩 (-) 位图。无论垂直带区还是水平带区都可以使用扩展和收缩功能。

当带区处于扩展状态的时候,出现的将是收缩 (-) 位图。在扩展状态下,带区显示出最大数量的数据。当带区处于收缩状态的时候,出现的将是收缩 (+) 位图。在扩展状态下,带区显示出最少量的数据。

在收缩状态下,带区中可能显示未被填充数据的区域。对未填充区域的格式也有专门的规定。

收缩状态的带区

当一个带区处于收缩状态时,它的任何一个记录都不会显示出来,该带区中的列也不会显示出来。当用户将带区展开时,这些列将显示出来。展开状态的带区具有统一的高度。在必要的情况下,较小的带区将被扩大以便与较大带区保持一致的高度。

扩展状态的带区

带区的扩展和收缩

本节说明如何为 Hierarchical FlexGrid 中的带区添加扩展和收缩功能。它还说明如何使用扩展和收缩功能。

要在带区中添加扩展与收缩功能

1. 右击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“带区”选项卡中,选择“可扩充带区”。其次,从“带区”列表中选择要扩展的带区。

注意 要使一个带区成为可扩展的,它至少要有一个子带区。因此,如果只有 Band 0,那么“可扩充带区”复选框将是不可使用的。

3. 单击“确定”,将带区属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

要使用扩展和收缩功能

1. 在通过“属性页”对话框将带区功能添加到 Hierarchical FlexGrid 之后,请从“运行”菜单中选择“启动”。-或者-按下 F5 键。

2. 单击带区左上角的扩展 (+) 图形,查看最大化的(扩展的) Recordset 信息。

3. 单击带区左上角的收缩 (-) 图形,查看最小化的(收缩的) Recordset 信息。

注意 如果被扩展的带区中包含一个被收缩的子带区,那么在将子带区展开之前它将保持收缩状态。

获取结构信息

Hierarchical FlexGrid 的结构信息中包含了与带区和列的设置有关的详细信息。在缺省设置的情况下,每个带区中的列顺序与对应的 ADO Recordset 中的顺序相同。在获取该信息之后,可以使用它们来控制数据如何显示在Hierarchical FlexGrid 中。

要获取与带区和字段信息有关的信息

右击 Hierarchical FlexGrid,然后从快捷菜单中选择“检索结构”。

-或者-

访问 Hierarchical FlexGrid 的“属性页”对话框并选择“带区”选项卡。该选项卡中包含了 Hierarchical FlexGrid 的结构信息。

在获取了数据的结构之后,信息与 Hierarchical FlexGrid 保存在一起。在获取了结构信息之后,设计时Hierarchical FlexGrid 中将显示出每个带区和字段更新之后的信息。

注意 如果 DataSource 的结构发生了变化,那么只有重新提取结构才能使这些变化在

Hierarchical FlexGrid 中反映出来。

清除带区与列信息

如果清除了带区与列信息,它们将恢复为缺省的设置。

要清除带区与字段信息

右击 Hierarchical FlexGrid,然后选择从快捷菜单中选择“清除结构”。

注意 如果对 Hierarchical FlexGrid 的带区或列属性进行了修改,将会出现一条警告信息。这时,可以单击“确定”,将 Hierarchical FlexGrid 重新设置为缺省状态,取消所有的用户定义设置值。

定制 Hierarchical FlexGrid 中的各个区域

Hierarchical FlexGrid 中包含多个可以定制的区域。要定制这些区域,可以使用

Hierarchical FlexGrid 的“属性页”对话框,也可以使用“代码编辑器”窗口,以编程方式实现。对这些区域的定制将有助于提高 HierarchicalFlexGrid 界面的易读性和实用性。

这些 Hierarchical FlexGrid 区域包括:

1.标准

Hierarchical FlexGrid 的标准区域是那些包含数据绑定信息的单元格。

2.带区

带区区域包含了 Hierarchical FlexGrid 中每个 Recordset 的显示信息。与此有关的详细说明,请参阅带区的格式设置。

3.固定的固定区域中包含固定的或者静态的行与列。

4.标头

列标头区域确定与被绑定到 Hierarchical FlexGrid 的 Recordset 有关的信息。在使用时,Hierarchical FlexGrid 中的每个带区都将重复这些列标头。与此有关的详细信息,请参阅带区的格式设置。

5.缩进

在以垂直方式显示带区时,Hierarchical FlexGrid 的缩进区域就是将一个数据带区缩进若干

列的区域。每个带区前面的缩进列中包含空白的、未使用的单元格。与此有关的详细说明,请参阅带区的格式设置。

6.未填充的Hierarchical FlexGrid 的未填充区域包括 Hierarchical FlexGrid 工作区域的右边和下边的单元格。该区域是空白的,包含未被使用的单元格。

定制标准区域的显示方式

Hierarchical FlexGrid 标准区域的显示方式是可以定制的,这样提供给用户的信息将更加清晰、便于访问。标准区域中包含被绑定到数据的单元格。

要定制 Hierarchical FlexGrid 标准区域的显示方式

1. 单击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“通用”选项卡上,设置下列标准属性:

3. 在 Style 选项卡上,设置下列标准属性:

4. 在 Font 选项卡上,设置下列标准属性:

5. 单击“确定”,将标准属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

定制固定区域的显示方式

可以创建固定显示在 Hierarchical FlexGrid 中的行或者列。为了便于用户阅读,应该使用一个固定的区域来显示一个标头集合,而不是在每个带区中使用重复的列标头。该区域将是静态的,它标识了下面的行或者右边的列。

要定制 Hierarchical FlexGrid 的固定区域的显示方式

1. 单击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“通用”选项卡上,指定“固定行”和“固定列”文本框中各自的行数和列数,然后单击“应用”。

3. 在“样式”选项卡上,从“固定文本样式”框中为固定文本选择显示风格,然后单击“应用”。

4. 在“字体”选项卡中,设置下列标准属性:

5. 从“颜色”选项卡中,为每一个固定属性指定一个颜色。为此,首先需要选择一个“颜色设置”。然后,单击需要改变的属性(例如BackColorFixed),单击“调色板”中的一种颜色,最后单击“应用”。对需要改变的每一个固定区域重复上述操作。

注意 如果使用了“Windows 缺省”颜色,那么 Hierarchical FlexGrid 中显示的颜色将是在“显示控制面板”中指定的颜色。除了将 HierarchicalFlexGrid 属性的颜色改变为标准的或

Windows 缺省颜色之外,也可以创建自己的颜色定义(单击“Edit Custom Color”,使用随之弹出的“颜色”对话框。)关于每个属性的有关信息,请参阅 HierarchicalFlexGrid 的属性主题。

6. 单击“确定”,将固定属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

定制标头的显示方式

在 Hierarchical FlexGrid 中,可以改变带区标头的格式和显示属性。

要定制 Hierarchical FlexGrid 的标头显示方式

1. 右击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。出现Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“带区”选项卡中,从“文本样式标头”框中选择一种标头样式,然后选择“ColumnHeaders”。

注意 为了防止 Hierarchical FlexGrid 显示重复的标头,必须在“通用”选项卡中将 Fixed

Row 文本框设置为 0。此外,如果希望在 HierarchicalFlexGrid 的顶部只显示带区的一组标头,那么必须使用固定行,而不是列标头。

3. 在“列标题”和“列名称”列表框中,指定需要显示的各列。在缺省的情况下,该列表中包含了 Recordset 的所有字段以及它们的字段名。如果需要停止显示某个 Field 对象,或者希望改变其名称,请使用“列标题”列表。如果需要取消某个字段,请单击对应的选择符号。如果希望改变字段的名称,请单击名称将其选定,然后再次单击它,进入编辑模式进行重命名。

4. 单击“确定”,将带区属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

定制未填充数据的区域

在 Hierarchical FlexGrid 中,可以改变带未填充数据区域的格式和显示属性。这种未填充区域是空白的,不包含任何数据。

要定制 Hierarchical FlexGrid 的未填充数据区域的显示方式

1. 右击 Hierarchical FlexGrid,然后从快捷菜单中选择“属性”。显示出Hierarchical

FlexGrid 的“属性页”对话框。

2. 在“样式”选项卡上,改变“非置入网格线”属性。

3. 在“颜色”选项卡上,为每一个固定属性指定一个颜色。为此,首先需要选择一个“颜色设置”。然后,单击需要改变的属性(例如BackColorUnpopulated),单击“调色板”中的一种颜色,最后单击“应用”。对需要改变的每一个未填充区域重复上述操作。 注意 如果使用了“Windows 缺省”颜色,那么 Hierarchical FlexGrid 中显示的颜色将是在“显示控制面板”中指定的颜色。除了将 HierarchicalFlexGrid 属性的颜色改变为标准的或 Windows 缺省颜色之外,也可以创建自己的颜色定义(单击“Edit Custom Color”,使用随之弹出的“颜色”对话框)。

4. 单击“确定”,将固定属性应用于 Hierarchical FlexGrid 并关闭“属性页”对话框。

三、循环结构

循环结构允许重复执行一行或数行代码。Visual Basic 支持的循环结构有:

...Loop

...Next

Next

Do...Loop

用 Do 循环重复执行一语句块,且重复次数不定。Do...Loop 语句有几种演变形式,但每种都计算数值条件以决定是否继续执行。如同 If...Thencondition 必须是一个数值或者值为 True(非零)或 False(零)的表达式。在下面的 Do...Loop 循环中,只要 condition 为 True 就执行

statements。

Do While condition

statements

Loop

当 Visual Basic 执行这个 Do 循环时会首先测试 condition。如果 condition为 False(零),则跳过所有语句。如果 condition 为 True(非零),则 VisualBasic 执行语句,然后退回到 Do While 语句再测试条件。

因此,只要 condition 为 True 或非零,循环可以随意执行多少次。如果condition 一开始便为 False,则不会执行语句。例如,以下过程将计算某一目标字符串在另一字符串中出现的次数,只要发现目标串就执行循环:

Function CountStrings (longstring, target)

Dim position, count

position = 1

Do While InStr (position, longstring, target)

position = InStr(position, longstring, target)_

+ 1

count = count + 1

Loop

CountStrings = count

End Function

如果目标字符串未出现在另一个字符串中,则 InStr 返回 0,而且不再执行循环。

Do...Loop 语句的另一种演变形式是先执行语句,然后在每次执行后测试condition。这种形式保证 statements 至少执行一次:

Do

statements

Loop While condition

其它两种演变形式类似于前两个,所不同的是,只要 condition 为 False 而不是 True,它们就执行循环。

Next000

在不知道循环内需要执行多少次语句时,宜用 Do 循环。但是,在知道要执行多少次时,则最好使用 Next 循环。与 Do 循环不同, For 循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。For 循环的语法如下:

For counter = start To end [Step increment]

statements

Next [counter]

参数 Counter、Start、end 和 increment 都是数值型的。

注意 increment 参数可正可负。如果 increment 为正,则 Start 必须小于等于end,否则不能执行循环内的语句。如果 increment 为负,则 Start 必须大于等于 end,这样才能执行循环体。如果没有设置 Step,则 increment 缺省值为 1。

在执行 For 循环时,Visual Basic

1. 设置 counter 等于 start。

2. 测试 counter 是否大于 end。若是的话,则 Visual Basic 退出循环。 (若 increment 为负,则 Visual Basic 测试 counter 是否小于 end。)

3. 执行语句。

4. counter 增加一,或者增加 increment(如果已指定的话)。

5. 重复步骤 2 到步骤 4。

以下代码打印出所有有效的屏幕字体名:

Private Sub Form_Click ()

Dim I As Integer

For i = 0 To unt

Print (i)

Next

End Sub

在 VCR 示例应用程序中,HighlightButton 过程使用 Next 循环,一步步经过 VCR 窗体的控件集合,并显示适当的 Shape 控件:

Sub HighlightButton (MyControl As Variant)

Dim i As Integer

For i = 0 To - 1

If TypeOf ls (i) Is Shape Then

If ls (i).Name = MyControl Then

ls (i).Visible = True

Else

ls (i).Visible = False

End If

End If

Next

End Sub

Next

Next 循环与 Next 循环类似,但它对数组或对象集合中的每一个元素重复一组语句,而不是重复语句一定的次数。如果不知道一个集合有多少元素, Next 循环非常有用。

Next 循环的语法如下:

For Each element In group

statements

Next elementt

例如,下面的子过程打开 ,把每一个表的名字加到列表框中。

Sub ListTableDefs ()

Dim objDb As Database

Dim MyTableDef as TableDef

Set objDb = OpenDatabase("c:", _

True, False)

For Each MyTableDef In efs ()

m

Next MyTableDef

End Sub

请记住使用 Next 时的几点限制:

1.对集合,element 只能是 Variant 变量,或一般的 Object 变量,或“对象浏览器”中列出的对象。

2.对数组,element 只能是 Variant 变量。

Next 不能与用户自定义类型的数组一起使用,因为 Variant 不可能包含用户自定义类型。

使用控制结构

嵌套控制结构可以把控制结构放入另一个控制结构之内(例如在 Next 循环中的If...Then 块)。一个控制结构内部包含另一个控制结构叫做 nest(嵌套)。在 Visual Basic 中,控制结构的嵌套层数没有限制。按一般习惯,为了使判定结构和循环结构更具可读性,总是用缩排方式书写判定结构或循环的正文部分。

例如,下面的过程要把打印机和屏幕共有的字体名全部打印出来:

Private Sub Form_Click ()

Dim SFont, PFont

For Each SFont In ()

For Each PFont In ()

If SFont = PFont Then

Print SFont

End If

Next PFont

Next SFont

End Sub

注意,第一个 Next 关闭了内层的 For 循环,而最后一个 For 关闭了外层的 For 循环。同样,在嵌套的 If 语句中,End If 语句自动与最靠近的前一个 If 语句配对。嵌套的 Do...Loop 结构的工作方式也是一样的,最内圈的 Loop 语句与最内圈的 Do 语句匹配。

退出控制结构

用 Exit 语句可以直接退出 For 循环、Do 循环、子过程或函数过程。Exit 语句的语法很简单:

Exit For 在 For 循环中出现的次数没有限制,Exit Do 在Do 循环中出现的次数也没有限制。

For counter = start To end

[Step increment]

[statementblock]

[Exit For]

[statementblock]

Next [counter[, counter] [,...]]

Do [{While | Until} condition]

[statementblock]

[Exit Do]

[statementblock]

Loop

Exit Do 语句可以在 Do 循环语法的所有版本中使用。

Exit For 和 Exit Do 非常有用,因为它有时适于立即退出循环,而且不再执行循环中的任何进一步迭代或者语句。例如,在前面的打印屏幕和打印机共有字体的例子中,程序不断将打印机字体和给定的屏幕字体作比较,甚至在已经找到了一个相符的打字机字体后还在继续寻找。对这个函数有一个效率更高的改进版,在此,只要找到相匹配的字体后就立即退出循环:

Private Sub Form_Click ()

Dim SFont, PFont

For Each SFont In ()

For Each PFont In ()

If SFont = PFont Then

Print Sfont

Exit For '退出内圈循环。

End If

Next PFont

Next SFont

End Sub

正如此例所表明的, Exit 语句几乎总是出现在 If 语句或 Select Case 语句内部,而 If 语句或 Select Case 语句在循环内嵌套。

用 Exit 语句中断循环时,计数器变量的值会因退出循环的方式而不同:

1.在完成循环时,计数器的值等于上限值加上步进值。

2.在提前退出循环时,计数器变量保持其值,并遵从有关取值范围的一般规则。

3.在集合之外叠代时,如果计数器变量为 Object 类型,则其值为Nothing;如果计数器变量为 Variant 类型,则其值为 Empty。

退出子过程或函数过程

也可从控制结构内部退出过程。Exit Sub 和 Exit Function 的语法,和上一节“退出控制结构”中的 Exit For 和 Exit Do 相似。Exit Sub 可以出现在子过程主体内的任何地方,出现的次数随需要而定。

当过程已完成每个任务并可直接返回时,Exit Sub 和 Exit Function 是非常有用的。例如,如果想改动前面的例子,使得对查找到的打印机和屏幕的共有字体,只打印其中的第一个,则可用

Exit Sub :

Private Sub Form_Click ()

Dim SFont, PFont

For Each SFont In ()

For Each PFont In ()

If SFont = PFont Then

Print Sfont

Exit Sub '退出过程。

End If

Next PFont

Next SFont

End Sub

使用 DataCombo 和 DataList 控件

DataCombo 和 DataList 控件与标准列表框和组合框控件极为相似,但有一些重要的不同之处,这种不同使这两个控件在数据库应用程序中具有极大的适应性和用武之地。这两个控件都可以被这些控件所绑定的数据库字段自动填充。此外,它们还能有选择地将一个选定的字段传递给第二个数据控件,从而适合用于创建“查找表”应用程序。

可能的用法

1.在一个关系数据库中,使用一个表的数据来提供要输入给第二个(相关的)表值。例如,在一个存货清单数据库中,供应商的名称存储在一个表中,每个供应商都有一个唯一的标识符。另一个显示产品的表则使用这些标识符来表明是哪个供应商供应的该产品。可以使用 DataList 控件来显示供应商的名称,而(不可见地)将供应商的标识符提供给产品表。

2.允许用户通过从一个下拉列表中选择一种标准来缩小搜索范围。例如,一个销售报告的数据库应用程序可以使用一个 DataList 控件让用户选择一个州 (State) 或一个销售区域。一旦作出选择,则该选择项将自动传递给第二个数据控件,这个控件负责查找选定区域的销售记录。

与它们对应的内在控件一样,DataList 和 DataCombo 控件之间的主要不同在于

DataCombo 控件提供了一个可以在其中编辑内容的文本框。

详细信息 有关 DataList 和 DataCombo 控件连接数据库表能力的说明,请参阅“使用

DataCombo 和 DataList 控件连接两个表”。 要创建一个简单的使用链接表的数据库应用程序,请参阅“创建一个简单的 DataCombo 应用程序”。

值得注意的控件属性

DataList 和 DataCombo 控件的一些重要属性包括:

注意 DataCombo 控件的 DataFormat 属性是一个 Extender 属性。因此在属性表上它总是可见的,并且可以在代码中设置。然而,DataCombo 控件仅对其列表中最上端的项格式化。对于看到已格式化的顶端项的最终用户来说,这一点可能不太重要,只要从未格式化的列表中选择即可。已格式化的项可能也会误导最终用户,使他们以为项目要在格式化之后再输入数据库。由于这些原因,建议在使用 DataCombo 控件时不要设置 DataFormat 属性。

详细信息 如果要使用一个演示 BoundText 属性用法的循序渐进教程,请参阅“创建一个连接 DataList 控件的 DataGrid”。关于这些控件的属性和方法的完整列表,请参阅“DataList

控件”和“DataCombo 控件”。

四、使用 DataCombo 和 DataList 控件连接两个表

DataCombo 和 DataList 控件与众不同的特性是具有访问两个不同的表,并且将第一个表的数据链接到第二个表的某个字段的能力。这是通过使用两个数据源完成的(诸如 ADO Data 控件或Data环境)。

关系表和“不友好的”值在一个关系数据库中,对于重复使用的信息并不是在多个地方都保存其全部的信息。大多数这种信息都保存在由多个字段组成的一个记录集中;在这些字段中有一个“标识符”字段来唯一地标识这个记录集。例如,VisualBasic 提供的 Biblio 数据库在一个名为

"Publishers" 的表中存储了若干个出版公司的名称。这个表包括很多字段,诸如地址、城市、邮政编码以及电话号码等。但是为了简单起见,只考虑这个表的两个本质字段 Name 和PubID 字段。Name 字段存储一个出版商的名称,而 PubID 字段则存储一个相对“不友好的”值,如一个数或代码。但这个不友好的值是很重要的,因为这个值唯一地标识该出版商,并且可以作为一种链接整个记录集的手段。此外,这个值会存储在第二个表中的多个记录集中。

第二个表的名称为 "Titles",其每个记录集包含的信息包括标题、出版年份、国际标准书号

ISBN 等。在这些字段中有一个字段的名称就是 "PubID"。这个字段的名称与 Publishers 表中的相应字段的名称相同,因为这个字段存储了将该标题和一个特定的出版商链接在一起的值。

这种可行方案提出了一个小问题:给定一个允许用户插入新标题的数据库应用程序,用户必须用某种方法输入标识出版商的整数。如果用户能记住每个出版商的唯一标识符,那么也还是可行的,不过如果一方面用户能看到出版商的名称,另一方面存入应用程序的又是数据库中相应的值,则会显得更加方便。而 DataList 和 DataCombo 控件就可以轻松地解决这个问题。

两个数据源、三个字段、无编码

DataList 和 DataCombo 控件使用两个数据源来解决这个问题。在只显示出版商的名称(来自

Publishers 表)的同时,DataList 或 DataCombo 控件只将 PubID 字段的值写入到 Titles 表。通过“属性”窗口,将 RowSource设置为提供要写入的数据的数据源(即 Publishers 表)。然后将 DataSource属性设置为要写入数据的数据源(即 Titles 表)。最后,设置 DataField、ListField以及 BoundColumn 属性。下图演示了如何将两个数据源(以两个Data 控件的形式)以及三个字段指定给一个 DataCombo 控件:

简要而言,ListField 属性决定该控件所显示的是哪一个字段。在本例中就是出版商的名称。另一方面,BoundColumn 属性则决定 Publishers 表中由哪一个字段向 Title 表供应实际所需的值。注意 Publishers 表中的 PubID字段不能(也不应该)被编辑。相反,在 PubID 字段中的值将写入到由DataField 属性所指定的字段。在本例中,这个属性就是 Titles 表中的 PubID字段。

下表概要地介绍这些属性及其使用方法。

注意 DataList 和 DataCombo 控件也可以与单个数据控件一起使用。要实现这一点,可以将

DataSource 和 RowSource 属性设置为同一个数据控件,并且将 DataField 和 BoundColumn 属性设置为该数据控件的记录集中的同一个字段。在这种情形下,将使用 ListField 的值来填充该列表,且这些值来自于被更新的同一个记录集。如果指定了一个 ListField 属性,但没有设置

BoundColumn 属性,则 BoundColumn将自动被设置为 ListField 字段。

详细信息 如果想使用 DataCombo 控件循序渐进地创建一个简单的数据库应用程序,请参阅“创建一个简单的 DataCombo 应用程序”。

创建一个简单的 DataCombo 应用程序

下面的示例使用 DataCombo 控件为 示例数据库的 Titles表创建一个数据输入界面。这个输入界面使用户可以输入新的产品,并通过提供一个包括所有供应商名称的查找表

将这些新产品指定到已有的供应商。当用户在输入窗体中要输入供应商字段的值时,他们可以从一个列表框中选择一个供应商。当他们选定一个供应商后,该供应商的 SupplierID 字段值就复制到

Products 表的 SupplierID 字段。

要使用 DataCombo 控件来创建一个查找表

1. 给 Northwind 数据库创建一个OLEDB 数据源。如果还没有创建数据源,请按照“创建

Northwind 的OLEDB 数据源”中的步骤进行。

2. 在Visual Basic 中创建一个新的标准的 EXE 工程。如果DataGrid、DataCombo或ADO Data控件不在“工具箱”中,则右键单击“工具箱”,然后使用“部件”对话框来添加控件。

3. 添加一个 DataCombo 控件、两个 ADO Data 控件以及一个 DataGrid 控件到窗体中。4. 在“属性”窗口中,如下表所示设置第一个数据控件 (Adodc1) 的属性。

4. 在“属性”窗口中,如下表所示设置第一个数据控件 (Adodc1) 的属性。

8. 最后,将下述代码添加到该窗体的代码模块中:

Private Sub Form_Load()

' 在 DataGrid 控件中隐藏 SupplierID 字段,使用户

' 不会混淆到底该更改哪一个值。

s("SupplierID").Visible = False

End Sub

9. 运行该工程。

可以通过单击可视的 ADO Data 控件上的箭头来浏览记录集。如果这样做,DataCombo 控件将更新和显示每一个产品的供应商的名称。如果要编辑SupplierID 字段,则单击 DataCombo 控件的箭头来显示一个下拉列表,然后再单击一个不同的供应商,来改变写入到 SupplierID 字段的值。

五、使用 CommonDialog 控件CommonDialog 控件提供诸如打开和保存文件、设置打印选项、选择颜色和字体等操作的一组标准对话框。运行 Windows 帮助引擎时,控件还能够显示帮助。

CommonDialog 控件在 Visual Basic 和 Microsoft Windows 动态连接库 例程之间提供了接口。为了用该控件创建对话框,必须要求 在 Microsoft Windows

System 目录下。

为了在应用程序中使用 CommonDialog 控件,应将其添加到窗体上并设置属性。控件显示的对话由控件的方法决定。运行时,调用相应方法后将显示对话框或执行帮助引擎;设计时在窗体上将

CommonDialog 控件显示成一个图标。此图标的大小不能改变。

CommonDialog 控件可以显示如下常用对话框:

“打开”

“另存为”

“颜色”

“字体”

“打印”

要使用 CommonDialog 控件

1. 若未添加 CommonDialog 控件,则应从“工程”菜单中选定“部件”,将控件添加到工具箱中。在标记对话的“控件”中找到并选定控件,然后单击“确定”按钮。

2. 单击工具箱中的“CommonDialog”控件并在窗体上绘制该控件。在窗体上绘制

CommonDialog 控件时,控件将自动调整大小。象 Timer控件一样,CommonDialog 控件在运行时不可见。

3. 运行时,请适当使用下表所列方法显示需要的对话。

显示“打开”和“另存为”对话框

有了“打开”对话框就可指定驱动器、目录、文件扩展名和文件名。“另存为”对话框在外观上与“打开”对话框相同,只是对话框的标题和文件名是暗淡的。运行时选定文件并关闭对话框后,可用 FileName 属性获取选定的文件名。

要显示“打开”对话框

1. 指定在“文件类型”列表框中显示的文件过滤器列表。

可用下列格式设置 Filter 属性:

description1 | filter1 | description2 |

Description 是列表框中显示的字符串——例如,"Text Files (*.txt)"。Filter 是实际的文件过滤器─—例如,"*.txt"。每个description | filter 设置间必须用管道符号分隔 (|)。

2. 用 ShowOpen 方法显示对话框。

选定文件后可用 FileName 属性获取选定文件的名称。

对所有公共对话框,当 CancelError 属性为 True,而且用户单击了对话框的“取消”按钮时将生成一个错误。在显示对话框时捕获错误,以此检测是否按了“取消”按钮。

下列代码显示“打开”对话框并以选定的文件名为打开文件过程的参数:

Private Sub mnuFileOpen_Click ()

'CancelError 为 True。

On Error GoTo ErrHandler

'设置过滤器。

= "All Files (*.*)|*.*|Text _

Files (*.txt)|*.txt|Batch Files (*.bat)|*.bat"

'指定缺省过滤器。

Index = 2

'显示“打开”对话框。

en

'调用打开文件的过程。

OpenFile (me)

Exit Sub

ErrHandler:

'用户按“取消”按钮。

Exit Sub

End Sub

使用“颜色”对话框

可用“颜色”对话框在调色板中选择颜色,或者创建并选定自定义颜色。运行时,选定颜色并关闭对话框后可用 Color 属性获取选定的颜色。

要显示“颜色”对话框

1. 将CommonDialog控件的Flags属性设置成Visual Basic常数cdlCCRGBInit。

2. 用 ShowColor 方法显示对话框。

可用 Color 属性获取选定颜色的 RGB 值。单击“Command1”命令按钮时,下列代码将显示“颜色”对话框:

Private Sub Command1_Click ()

'将 Cancel 设置成 True。

Error = True

On Error GoTo ErrHandler

'设置 Flags 属性。

= cdlCCRGBInit

'显示“颜色”对话框。

lor

'将窗体的背景颜色设置成选定的'颜色。

lor =

Exit Sub

ErrHandler:

'用户按了“取消”按钮。

Exit Sub

End Sub

使用“字体”对话框

“字体”对话框根据大小、颜色、样式选择字体。用户一旦在“字体”对话框中选定字体后,下列属性就会包含有关用户选项的信息。

要显示“字体”对话框

1. 将 Flags 属性设置为下述 Visual Basic 常数之一:

cdlCFScreenFonts(屏幕字体)

cdlCFPrinterFonts(打印机字体)

cdlCFBoth(既可以是屏幕字体又可以是打印机字体)

警告 在显示“字体”对话框之前必须将 Flags 属性设置为这些数值之一,否则将发生字体不存在错误。

2. 用 ShowFont 方法显示对话框。

下列代码根据用户在“字体”对话框中的选择来设置文本框的字体属性:

Private Sub Command1_Click ()

'将 Cancel 设置成 True。

Error = True

On Error GoTo ErrHandler

'设置 Flags 属性。

= cdlCFBoth Or cdlCFEffects

'显示“字体”对话框。

nt

'根据用户的选择来设置文本属性。

= me

= ze

= ld

= alic

ine = derline

rikethru = rikethru

lor =

Exit Sub

ErrHandler:

'用户按了“取消”按钮。

Exit Sub

End Sub

使用“打印”对话框

“打印”对话框允许用户指定打印输出的方法。用户可指定打印页数范围、打印质量、复制数目等等。此对话框还显示有当前安装的打印机信息,并允许用户进行配置或重新安装新的缺省打印机。

注意 此对话框并不真正地将数据送到打印机上。它允许用户指定如何打印数据。必须编写代码实现用选定格式打印数据。

详细信息 关于打印数据的信息,请参阅第十二章“使用文本和图形”。运行时,当用户在“打印”对话框作出选择后,下述属性将包含用户选项的信息。

要显示“打印”对话框

1. 通过设置相应的“打印”对话框属性,为对话框设置所需缺省设置值。例如,为在显示对话框时在“份数”框中显示 2,应将 Copies 属性设置为 2:

= 2

2. 用 ShowPrinter 方法显示“打印”对话框。

用户单击“Command1”命令按钮时,下列代码将显示“打印”对话框:

Private Sub Command1_Click ()

Dim BeginPage, EndPage, NumCopies, Orientation. i

'将 Cancel 设置成 True。

Error = True

On Error GoTo ErrHandler

'显示“打印”对话框。

inter

'从对话框中获取用户选定数值。

BeginPage= ge

EndPage =

NumCopies=

Orientation=ation

For i = 1 to NumCopies

'在此放置代码,将数据发送到打印机。

Next

Exit Sub

ErrHandler:

'用户按下了“取消”按钮。

Exit Sub

End Sub

注意 若将 PrinterDefault 属性设置为 True,则可在 Visual Basic Printer 对象上打印。另外,当 PrinterDefault 属性为 True 时,所有在“打印”对话框“设置”部分中作出的变更都将改变用户“打印机”设置中的打印机设置值。

使用 ShowHelp 方法显示帮助文件

可用 CommonDialog 控件的 ShowHelp 方法显示帮助文件。

要使用 ShowHelp 方法显示帮助文件

1. 设置 HelpCommand 和 HelpFile 属性。

2. 用 ShowHelp 方法显示指定的帮助文件。

在单击“Command1”命令按钮时,下列代码将显示指定的帮助文件:

Private Sub Command1_Click()

'将 Cancel 设置为 True。

Error = True

On Error GoTo ErrHandler

'设置 HelpCommand 属性

mmand = cdlHelpForceFile

'指定帮助文件。

le = "c:"

'显示 Windows 帮助引擎。

lp

Exit Sub

ErrHandler:

'用户按下了“取消”按钮。

Exit Sub

End Sub

详细信息 有关显示通用对话框控件的帮助文件的详细信息,请参阅《VisualBasic 6.0语言参考手册》“HelpCommand 属性”、“HelpFile 属性”和“ShowHelp 方法”。

使用Data控件

内在的 Data 控件通过使用 Microsoft 的 Jet 数据库引擎来实现数据访问——与

Microsoft Access 所用的数据库引擎相同。这一技术使用户可以无缝地访问很多标准的数据库格式,而且使用户无需编写任何代码就可以创建数据识别应用程序。这种内在的 Data 控件最适合较

小的(桌面)数据库,诸如 Access 和 ISAM 数据库。

可以使用这种内在的 Data 控件创建应用程序来显示、编辑和更新来自多种已有的数据库的信息。这些数据库包括 Microsoft Access、Btrieve、dBASE、Microsoft FoxPro和Paradox。也可以使用这种控件如同访问真正的数据库一样来访问 Microsoft Excel、Lotus 1-2-3以及标准的

ASCII 文本文件。此外,Data 控件也可以访问和操作远程的开放式数据库连接 (ODBC)数据库,诸如 Microsoft SQL Server 以及 Oracle。

注意 Data 控件和 Remote Data 控件两者都包含在 Visual Basic 中,以提供向后兼容。不过,由于 ActiveX 数据对象 (ADO) 的适应性更广,因此建议使用 ADO Data 控件来创建新的数据库应用程序。详细信息请参阅“使用 ADO Data 控件”。

Data 控件、Remote Data 控件以及 ADO Data 控件在概念上很相似:三者都是将一个数据源连接到一个数据绑定控件的“数据控件”。三者也都共享相同的外观——一组共四个按扭,使用户可以直接到达记录集的开始、记录集的末尾以及在记录集中向前或向后翻卷。

使用 Data 控件创建一个简单的数据库应用程序

1. 在窗体上放置一个 Data 控件。Data 控件是一个内在的控件,因而总是可用的。

2. 单击并选定这个 Data 控件,按 F4 键显示“属性”窗口。

3. 在“属性”窗口中,将“连接”属性设置为想要使用的数据库类型。

4. 在“属性”窗口中,将“DatabaseName”属性设置为想要连接的数据库的文件或目录名称。

5. 在“属性”窗口中,将“记录源”属性设置为想要访问的数据库表的名称。

6. 在该窗体上放置一个文本框控件。

7. 单击并选定这个 TextBox 控件,并在其“属性”窗口中将“数据源”属性设置为该 Data

控件。

8. 在这个“属性”窗口中,将“数据字段”属性设置为在该数据库中想要查看或修改的字段的名称。

9. 对其它的每一个想要访问的字段,重复第 6、7、8 步。

10. 按 F5 键运行这个应用程序。

设置 Data 控件与数据相关的属性

下述与数据相关的属性可以在设计时设置。这个列表给出了设置这些属性的一种逻辑顺序:

注意 数据库技术是一门复杂的科学,下面的这些建议并不意味着要当作规则来使用。

1. RecordsetType—RecordsetType 属性决定记录集是一个表、一个动态集(dynaset)还是一个快照。这个选择将影响哪些记录集属性是可用的。例如,快照类型的记录集与 dynaset 记录集相比具有更多的限制。

2. DefaultType—DefaultType 属性指定所使用的是 JET 工作空间,还是ODBCDirect 工作空间。

3. DefaultCursorType—DefaultCursorType 属性决定光标的位置。可以使用 ODBC 驱动程序来决定光标的位置,或者指定服务器或 ODBC 光标。只有当使用 ODBCDirect 工作空间时,DefaultCursorType 属性才是有效的。

4. Exclusive—决定该数据是用于单用户环境,还是多用户环境。

5. Options—这个属性决定记录集的特征。例如,在一个多用户环境中,可以设置 Options 属

性来禁止他人所做的更改。

6. BOFAction、EOFAction—这两个属性决定当这个控件位于光标的开始或末尾时的行为。可能的选择包括停留在开始或末尾、移动到第一个或最后一个记录、或者添加一个新的记录(只有在末尾时)。

六、水晶报表(Crystal Report 4.6)

水晶报表(Crystal Report 4.6)只支持Access97格式的数据库, 所以,先在Access2000格式中设置好表与表的关系,再把表转换到97格式,在水晶报表中调入97数据库后,在Links中自动会找出表间的关系.

(1)水晶报表在VB的安装盘中已自带了. 路径:

系列号: 1231467890

安装后,运行路径: Program FilesMicrosoft Visual

VB6中运用晶报表的理由是: 它支持图相(Binary型)字段(BLOB二进制大型对象)

(2)运用水晶报表的步骤:

先进入VB的菜单栏: 外接程序--报表设计器 自动进入水晶报表, 设计好报表,存成报表文件,

再在VB工程中引入部件Crystal Report Control 4.6

如果是Access数据库, 激活代码:

dSavedData = True '自动从数据库中刷新数据

FileName = & ""

State = crptMaximized

= 1

如果是SQL Server 2000数据库,激活代码:

t = "ODBC;DNS=SQL_db1;UID=" & & ";PWD=" & &

";DSQ=db1" '连接SQL Server服务器的ODBC

dSavedData = True '自动从数据库中刷新数据

FileName = & ""

State = crptMaximized

= 1

重要:

a.如果需要报表预览时最大化纸张显示, 需在水晶报表设计器中设置: File--Report Options-Preview

Pages Start With --Full Size

b.如果只需要显示Detail部分,则在报表设计器的Design界面下的其它部分的左边按右键,在弹出的快捷

菜单内选定:

Hide Section

c.如果要一页打印一条记录,则在报表设计器的Design界面下的Detail字样上按右键,在Format Section

中选择

New Page After

d.如果Detail部分需要字符型字段自动折行显示, 则双击该字段,选择:

Print on multiple lines

部分数值型的显示格式,双击该字段,可弹出显示格式选项

f.目前还没有发现水晶报表具有分栏打印的功能,BCB的QuickReport则有.正文

VB控件教程大全

本文发布于:2024-02-08 07:47:25,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170734964566969.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:属性   显示   控件   使用
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23