vb的使用问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb的使用问题?相关的知识,希望对你有一定的参考价值。

应该如何设置才能使用TreeView控件呀?我自己做工程时就提示没有定义这个类型,但当我用一个实例时就可以了,请有经验的朋友指点。

TreeView 控件应用实例:将 TreeView 绑定到 Biblio.mdb 数据库

应用示例:DataTree.vbp
本章的代码示例是从应用示例 DataTree.vbp which is listed in the Samples directory中得到的。

可将数据库中的数据绑定到 TreeView 控件。下面的示例将 TreeView 控件绑定到 Biblio 数据库,该数据库可以在 Visual Basic CD 中找到。该应用实例将 Publishers 表作为树节点的第一层。如果一个出版商对应于一个或多个书名,则这些书名将作为该出版商的子节点加入树中。

图 2.42 与数据绑定的 TreeVew 控件

下面的代码用到了如下对象:

Data Access Object Library(3.5)

名为“frmDataTree”的 Form 对象

名为“tvwDB”的 TreeView 控件

名为“cmdLoad”的 CommandButton 控件
将 Biblio.mdb 数据库绑定到 TreeView 控件

在工程中添加对 数据访问对象(DAO 3.0)的引用。

为 Database 和 Node 对象创建模块级的变量。
在 Form Load 事件中,用 OpenDatabase 语句将 Database 对象变量设置为 Biblio 数据库。

用 Nodes 集合的 Add 方法创建顶层的节点对象。
在 CommandButton 的 Click 事件中,创建两个 Recordset 变量,并将它们设置为 Publishers 和 Titles 表。

用“Do Until”语句为表中的每个出版商创建一个 Node 对象。

对每个出版商,在 Titles 记录集中检查匹配的 PubID 字段;为每个匹配项添加一个子节点。
在工程中添加对数据访问对象(DAO 3.5)的引用
要将数据库绑定到 TreeView 控件,必须先添加对当前版本的数据访问对象(DAO)的引用。

为 Database 对象和 Node 对象创建模块级的变量
由于需要在一个会话中多次访问 Biblio.mdb 数据库,如果创建一个模块级的 Database 对象,保持一个打开数据库,将有助于提高效率。此后,不需要打开数据库即可访问它。在窗体的声明部分,键入如下内容:

Private mDbBiblio As Database

如果希望该数据库还可被其它模块使用,可以用 Public 语句,并重命名该变量,以表明它是全局的,例如 gDbBiblio。

在创建 Node 对象时,在 Set 语句中(如下所示)使用 Node 类型的变量。

Dim TempNode As Node
Set TempNode = tvwDB.Nodes.Add()

虽然可以在添加 Node 对象时创建变量,更有效的方式是声明一个模块级的 Node 对象变量,并用它创建所有的 Node 对象。在上述声明部分再键入:

Private mNode As Node

用 OpenDatabase 语句将 Database 对象变量设置为 Biblio 数据库
Form 对象的 Load 事件中可以初始化 Database 变量。代码如下:

Set mDbBiblio = DBEngine.OpenDatabase("BIBLIO.MDB")

在成功地初始化 Database 对象变量后,就可以在该模块的代码中的任何位置自由地访问它了。

Form Load 事件:用 Nodes 集合的 Add 方法创建顶层的 Node 对象
至此,Database 对象变量已经被初始化为 Biblio 数据库,现在可以创建树中的第一个节点,并将打开的数据库的名称赋予它。首先必须用 Node 集合的 Add 方法创建第一个 Node 对象。还要使用 Set 语句将其赋给 mNode 对象变量,如下所示:

Set mNode = tvwDB.Nodes.Add() ' 创建第一个节点。
mNode.Text = mDbBiblio.Name

注意,在上面的代码中,在创建 Node 的同时用 Set 语句将其赋给了 mNode 对象变量。由于 mNode 变量现在包含了新创建的 Node 对象,可以对该 Node 对象的属性进行赋值。在上述情况下,Database 的名称(即 Database 对象的 Name 属性)已经被赋给了新节点的 Text 属性。

CommandButton Click 事件:创建两个 Recordset 变量,并将它们分别设置为 Publishers 和 Titles 表
本应用实例假定存在名为“cmdLoad”的按钮,并且当用户单击它时,置入 Biblio 数据库中的两个表到 TreeView 控件中。为此,必须首先在该按钮的 Click 事件中声明两个 DAO 对象变量。第一个变量 rsPublishers 用来包含 Publishers 表。第二个变量 rsTitles 用来包含 Titles 表。下面的代码声明了这两个变量,并用 OpenRecordSet 方法将表赋给变量:

Dim rsPublishers As Recordset
Dim rsTitles As Recordset

Set rsPublishers = mDbBiblio. _
OpenRecordset("Publishers", dbOpenDynaset)
Set rsTitles = mDbBiblio. _
OpenRecordset("titles", dbOpenDynaset)

用 Do Until 语句为表中的每个出版商创建一个 Node 对象
现在有两个打开的记录集,可以遍历每个记录集,创建 Node 对象,并为该对象的 Text 属性赋予合适的值。首先,必须遍历 Publishers 表,并为该表中的每个出版商创建一个 Node 对象。

下列简化了的代码可以用一句话概括为,“逐个处理每个记录,直到记录集的末尾:创建 Node 变量,并将 Title 字段的值赋给其 Text 属性,移到下一记录并重复”:

Do Until rsPublishers.EOF
Set mNode = tvwDB.Nodes.Add(1, tvwChild)
mNode.Text = rsPublishers!Name
rsPublishers.MoveNext
Loop

注意,在上面的 Add 方法中用了两个参数。第一个参数(1)是我们希望添加入节点的 Node 的 Index 属性。也就是说,希望所有的出版商节点成为第一个(根)节点(在 Form 的 Load 事件中创建的)的子节点。第二个参数使用了常数 (tvwChild),该常数指定新的 Node 将成为编号为“1”的 Node 的子节点。

对每个出版商,在 Titles 记录集中检查匹配的 PubID 字段;为每个匹配项添加一个子节点
上面的代码将 Publishers 表的内容作为第一层填入 TreeView 中。然而,我们还希望能够进入更深一层,为每个出版商节点增加子节点。每个子节点代表该出版商印刷的一本书。

为了做到这一点,如果有了对新创建的出版商节点 (mNode) 的引用,只要遍历 Titles 记录集,并检查每条记录的 PubID 字段即可。如果该字段与 Publishers 记录集中的 PubID 字段相匹配,则该书是由当前的出版商出版的。但是,在能够为 mNode 添加节点之前,还必须先将 mNode 的 Index 属性赋给一个变量 (intIndex),如下所示:

intIndex = mNode.Index

然后就可以在 Add 方法中使用该变量了,Add 方法需要用来加入子节点的 Node 对象的 Index 属性:

Set mNode = tvwDB.Nodes.Add(intIndex, tvwChild)

如下简化的代码可被表述为“直到 Recordset 的结尾:创建子 Node 对象,并将 Title 字段的值赋给它的 Text 属性;移动到下一记录并重复上述操作”:

Do Until rsTitles.EOF
If rsPublishers!PubID = rsTitles!PubID Then
Set mNode = tvwDB.Nodes.Add(intIndex, tvwChild)
mNode.Text = rsTitles!Title 'Text 属性。
End If
Loop

完成代码
上面的代码显示了用两个相关的表填成一个表的基本策略。全部代码如下:

'必须设置对 DAO 3.5 的引用。
'在声明部分,声明模块级的对象变量:
Private mDbBiblio As Database
Private mNode As Node

Private Sub Form_Load()
'在 Form_Load 事件中,设置对象变量,
'并创建 TreeView 控件的第一个 Node 对象。

Set mDbBiblio = DBEngine.Workspaces(0). _
OpenDatabase("BIBLIO.MDB")

tvwDB.Sorted = True
Set mNode = tvwDB.Nodes.Add()
mNode.Text = "Publishers"
mNode.Tag = mDbBiblio.Name '设置 Tag 属性。
mNode.Image = "closed" '设置 Image
'属性
End Sub

Private Sub cmdLoad_Click()
'声明 DAO 对象变量,
'并将记录集赋予它们。
Dim rsPublishers As Recordset
Dim rsTitles As Recordset
Set rsPublishers = mDbBiblio. _
OpenRecordset("Publishers", dbOpenDynaset)
Set rsTitles = mDbBiblio. _
OpenRecordset("titles", dbOpenDynaset)

'移到第一条记录。
rsPublishers.MoveFirst

Dim intIndex As Integer '用于索引的变量。

'直到最后一条记录 (EOF):添加一个 Node 对象,
'并用 Name 字段作为新
'Node 对象的文本。
Do Until rsPublishers.EOF
Set mNode = tvwDB.Nodes.Add(1, tvwChild)
mNode.Text = rsPublishers!Name
mNode.Tag = "Publisher" 'Tag 标识该表。
'为 Key 赋予唯一的 ID
mNode.Key = CInt(rsPublishers!PubID) & " ID"
'将变量 intIndex 设置为新创建 Node 的 Index 属性。
'用该变量将子 Node 对象加入当前 Node。
intIndex = mNode.Index
'对这条记录,在 Title 表中查找与 Titles 记录集
'中出现相同 PubID 的记录。如果找到这样的记录,
'则在 TreeView 控件中加入 Node 对象,并将用所
'找到记录的 Title、 ISBN 和 Author 字段为新
'Node 对象的属性赋值。
Do Until rsTitles.EOF
If rsPublishers!PubID = rsTitles!PubID Then
Set mNode = tvwDB.Nodes. _
Add(intIndex, tvwChild)
mNode.Text = rsTitles!Title '文本。
mNode.Key = rsTitles!ISBN '唯一的 ID。
mNode.Tag = "Authors" '表名。
mNode.Image = "leaf" '图象。
End If
rsTitles.MoveNext 'Titles 中 的下一条记录。
Loop
'将 rsTitles 重新设置为 Titles 的第一条记录。
rsTitles.MoveFirst
'移动到下一条 Publisher 记录。
rsPublishers.MoveNext
Loop
End Sub

增加代码
使用 SQL 语句创建较小的“Titles”记录集,可以对这个示例加以改进。下面的代码创建只包含相同 PubID 值的记录的记录集:

Set rsTitles = mDbBiblio.OpenRecordset _
("select * from Titles Where PubID = " & _
rsPublishers!PubID)

然后该代码就只需对较小的记录集进行循环,因而效率比较高。修改后的代码如下:

Private Sub cmdLoad_Click()
Dim rsPublishers As Recordset
Dim rsTitles As Recordset
Set rsPublishers = mDbBiblio. _
OpenRecordset("Publishers", dbOpenDynaset)
Dim intIndex
Do Until rsPublishers.EOF
Set mNode = tvwDB.Nodes.Add(1, tvwChild)
mNode.Text = rsPublishers!Name
mNode.Tag = "Publisher" '标识表。
mNode.Key = rsPublishers!PubID & " ID"
mNode.Image = "closed"
intIndex = mNode.Index
'对这条记录,使用查询创建 Title 表的记录集,
'查询条件是所有包含相同 PubID 的记录。对结果记录集中
'的每一条记录,在 TreeView 控件中加入一个 Node 对象,
'并用记录的 Title、 ISBN 和 Author 字段为新
'Node 对象的属性赋值。
Set rsTitles = mDbBiblio.OpenRecordset _
("select * from Titles Where PubID = " & _
rsPublishers!PubID)
Do Until rsTitles.EOF
Set mNode = tvwDB.Nodes. _
Add(intIndex, tvwChild)
mNode.Text = rsTitles!TITLE '文本。
mNode.Key = rsTitles!ISBN '唯一的 ID。
mNode.Tag = "Authors" '表名。
mNode.Image = "smlBook" '图象。
'移动到 rsTitles 中的下一个记录。
rsTitles.MoveNext
Loop
'移动到下一个 Publishers 记录。
rsPublishers.MoveNext
Loop
End Sub
参考技术A 首先在 VB 中建立一个新工程,单击“工程/部件”,在控件列表中选中“Microsoft Windows command controls6.0(sp4)”,按下“确定”按钮返回主界面,在左侧控件窗体中选中 Treeview 控件置于窗体上,再放置一个 Imagelist 控件、两个 Label 控件、两个Textbox 控件、六个 commandbutton 控件,其属性分别如下:

Treeview 控件:名称 Treeview1;

Imagelist 控件:名称 Imagelist1,并在该控件中放置三张个性图片(32×32),建立索引1、2、3;(方法:在Imagelist 控件上单击鼠标右键选择属性)

Label 控件:名称分别为Lab(0)、Lab(1),Caption分别为“父节点:”、“子节点:”;

Textbox 控件:名称分别为Txt(0)、Txt(1),text都为“”;

commandbutton 控件:名称为系统默认,Caption分别为“添加”、“展开”、“收起”、“排序”、“删除”、“退出”;

将下列代码加入到代码框:

Option Explicit

Dim I As Integer
Dim J As Integer
Dim nodx As Node
Dim CunZai As Boolean '定义变量

Private Sub Command1_Click()
If Txt(0).Text <> "" And Txt(1).Text <> "" Then '不允许建立零字节的父节点和子节点
CunZai = False
J = TreeView1.Nodes.Count
For I = 1 To TreeView1.Nodes.Count '检查新输入的父节点名称是否存在
If TreeView1.SelectedItem.Children > 0 Then
If Txt(0).Text = TreeView1.Nodes(I).Text Then CunZai = True
End If
Next I
If CunZai = True Then '若存在, 则在父节点下建立子节点
Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J,
Txt(1).Text, 3)
Else ,若不存在,则建立父节点和子节点
Set nodx = TreeView1.Nodes.Add(, , Txt(0).Text, Txt(0).Text, 1)
Set nodx = TreeView1.Nodes.Add(Txt(0).Text, tvwChild, "child" & J,_
Txt(1).Text, 3)
End If
TreeView1.Refresh
ElseIf Txt(0).Text = "" Then MsgBox "请输入父节点名称!", vbInformation, "警告!"
'系统提示
ElseIf Txt(1).Text = "" Then MsgBox "请输入子节点名称!", vbInformation, "警告!"
End If
End Sub

Private Sub Command2_Click()
For I = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(I).Expanded = True '展开所有节点
Next I
End Sub

Private Sub Command3_Click()
For I = 1 To TreeView1.Nodes.Count
TreeView1.Nodes(I).Expanded = False '收起所有节点
Next I
End Sub

Private Sub Command4_Click()
TreeView1.Sorted = True '排列顺序
End Sub

Private Sub Command5_Click()
If TreeView1.SelectedItem.Index <> 1 Then
TreeView1.Nodes.Remove TreeView1.SelectedItem.Index '删除选定的节点
End If
End Sub

Private Sub Command6_Click()
End '退出程序
End Sub

Private Sub Form_Load()
TreeView1.LineStyle =TvwTreeLines '在兄弟节点和父节点之间显示线
TreeView1.ImageList = ImageList1 '链接图像列
TreeView1.Style = tvwTreelinesPlusMinusPictureText
'树状外观包含全部元素
Set nodx = TreeView1.Nodes.Add(, , "蒲子明", "蒲子明", 1)
'建立名称为"蒲子明"的父节点,选择索引为1的图像
Set nodx = TreeView1.Nodes.Add("蒲子明", tvwChild, "child01", "收件箱", 3)
'在"蒲子明"父节点下建立"收件箱"子节点,选择索引为3的图像
Set nodx = TreeView1.Nodes.Add("蒲子明", tvwChild, "child02", "发件箱", 3)
'在"蒲子明"父节点下建立"发件箱"子节点,选择索引为3的图像
CunZai = False
End Sub

Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
Node.ExpandedImage = 2 '节点被展开时,选择索引为2的图像
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
If TreeView1.SelectedItem.Children = 0 Then '检查是否有子节点,0为无
For I = 1 To TreeView1.Nodes.Count
If TreeView1.Nodes(I).Selected Then
MsgBox "您选择的是:“" & TreeView1.Nodes(I).FullPath & "”子节点!"
'系统提示
End If
Next I
End If
End Sub

通过改变图像信息,增加存储信息则能编写出更倩的程序。本程序在WIN98、VB6.0下调试通过。本回答被提问者采纳

VB控件问题

请问这是一个什么控件图片链接为http://hiphotos.baidu.com/qqnumber463228803/pic/item/2cbc6b083d2737820a7b8292.jpg
在迅雷里面好像也有,VB 6.0如何添加这个控件,还有这个控件的基本使用方法

使用 ListView 控件

ListView 控件以 ListItem 对象的形式显示数据。每个 ListItem 对象都可有一个可选的图标与其标签相关联。该控件擅长于表示数据的子集(比如数据库的成员)或分布式对象(比如文档模板)。

可能的用途
显示对数据库查询的结果。

显示数据库表中的所有记录。

与 Treeview 控件联合使用,给出 TreeView 控件节点的扩展视图。
可用的四种视图
ListView 控件可以以四种不同的视图模式显示数据(如以下所示参数)。如何对控件编程取决于想让用户看到(或选择)何种视图。

这些视图每种都有其优于其它视图的地方。下表中列出了一些:

视图 优点
图标 可用鼠标操作,使用户能够拖放该对象,并重新排列它们。
小图标 同时能够显示更多的 ListItem。与图标视图相似,可由用户重新排列对象。
列表 提供排序的 ListItems 对象视图。
报表 提供排序的视图,通过 SubItems 能够显示更多的信息。

图标视图的 ListView

用 View 属性改变视图
要改变视图,可以使用 View 属性。下面的代码将 View 属性设置为报表视图 (3),代码中使用了内部常数 lvwReport:

'该控件的名称为“ListView1”
ListView1.View = lvwReport

用 View 属性,可使最终用户动态地改变视图。在窗体的 Load 事件中,ComboBox 被View属性所选择的视图来充填View所选择:

Private Sub Form_Load()
'充填到 ComboBox 控件。
'ComboBox 控件的名称是“cmbChooseView”。
With cmbChooseView
. AddItem "Icon" ' 0
. AddItem "Small Icon" ' 1
. AddItem "List" ' 2
. AddItem "Report" ' 3
End With
End Sub

在 ComboBox 控件的 Click 事件中,该控件的视图可被重新设置,如下所示:

Private Sub cmbChooseView_Click()
'ListView 控件的名称是“lvwDB”
lvwDB.View = cmbChooseView.ListIndex
End Sub

用于图标视图和小图标视图的两个 ImageList 控件
ListItem 对象由标签(Text 属性)和由 ImageList 控件提供的可选图象构成。然而,ListView 控件和其它控件不同,可以具有两个 ImageList 控件,它们分别有 Icons 和 SmallIcons 属性设置。是否使用一个或两个 ImageList 控件取决于想用的视图,它由 View 属性决定。

在列表、小图标和报表视图中,可用小图标代表 ListItem 对象。在这三种视图下,都由一个 ImageList 控件(由 SmallIcons 属性指定)提供图象。在设计时或运行时,将 SmallIcons 属性设置为 ImageList 控件即可提供这些图象。在设计时,用 ListView 控件的“属性页”对话框,可将 SmallIcons 设置为 ImageList。在运行时,可使用下面的代码:

ListView1.SmallIcons = imlSmallIcons

但是在图标视图下,该控件使用第二个 ImageList 控件提供一套不同的图象。在设计时用“属性页”对话框,可将 Icons 属性设置为这第二个 ImageList 控件,或在运行时使用下面的代码:

ListView1.Icons = imlIcons

注意 所用图标的大小由 ImageList 控件决定。可用的大小为 16 x 16、32 x 32、48 x 48 和自定义大小。要得到有关 ImageList 控件的详细说明,请参阅 “ImageList 控件”。

如果计划使用多种视图,并且显示图象,就必须为每个 ListItem 对象设置 SmallIcon 和 Icon 属性。下面的代码首先声明了 ListItem 类型的对象变量,然后将该对象变量设置为用 Add 方法添加到集合的一个 ListItem 对象。最后用对象变量引用设置 SmallIcon 和 Icon 图象:

Dim itmX as ListItem
Set itmX = ListView1.ListItems.Add()
'假设在设置给 SmallIcons 属性的 ImageList 中
'存在一幅名为“smallBook”的图象。
itmX.SmallIcon = "smallBook"
'假设在设置给 Icons 属性的 ImageList 中
'存在一幅名为“BigBook”的图象。
itmX.Icon = "BigBook"

将图象设置到 SmallIcon 和 Icon 属性之后,在用 View 属性切换视图时,就能够自动显示正确的图象了。

在报表视图中显示 ColumnHeaders
报表视图的一个特色是它的 ColumnHeader 对象。ListView 控件在 ColumnHeaders 集合中包含了一个 ColumnHeader 对象的集合。

ColumnHeader

ColumnHeader 对象有 Text 属性,该属性在该控件处于报表视图时显示文本。还可设置每个 ColumnHeader 的 Width 属性,以及 Alignment 属性(它设置了 ColumnHeader 对象中显示文本的对齐方式)。在下面的示例代码中创建了四个 ColumnHeader 对象,并设置了它们的 Text 和 Width 属性:

Dim colX As ColumnHeader '声明变量。
Dim intX as Integer '计数器变量。
For intX = 1 to 4
Set colX = ListView1.ColumnHeaders.Add()
colX.Text = "Field " & intX
colX.Width = ListView1.Width / 4
Next intX

用ListSubItems 集合设置列文本
请注意在除报表视图以外的其它视图中,ListItem 对象只显示一个标签,即 Text 属性。但在报表视图下,每个 ListItem 对象可以有多个其它的文本项。例如,除了书名《Hitchhiker's Guide to Visual Basic...》以外,还有一个作者 ("Vaughn, William R.")、年代 (1996),以及 ISBN 号与其相关。所有这些文本项都是 ListSubItems 集合的成员。为创建 ListSubItem 对象,对 ListSubItems 集合使用 Add 方法这样,要设置 ListItem 对象的作者、年代和 ISBN 号,代码可能应如下面所示那样:

'该控件的名称为 lvwAuthors。
lvwAuthor.ListItems(23).ListSubItems.Add , , _
"Hitchhiker's Guide to Visual Basic and SQL Server"
lvwAuthor.ListItems(23).ListSubItems.Add , , _
"Vaughn, William R."
lvwAuthor.ListItems(23).ListSubItems.Add , , "1996"
lvwAuthor.ListItems(23).ListSubItems.Add , , " 1-55615-906-4"
注意 Visual Basic versions 4.0 和 5.0 中使用的 ListItems 字符串数组已经被ListSubItems 集合取代了。

SubItems 取决于 ColumnHeaders 的出现
ListSubItem 是否存在,以及其数目都取决于 ColumnHeader 对象是否存在、及其数目。也就是说,如果没有 ColumnHeader 对象,就不能创建任何 ListSubItem 对象。进一步说,ColumnHeader 对象的数目,决定了可为 ListItem 对象设置的 ListSubItem 对象的数目。ListSubItem 的数目总是比 ColumnHeader 对象的数目少。这是因为第一个 ColumnHeader 对象总是与 ListItem 对象的 Text 属性相关联,以下所示:

第一个 ColumnHeader 和 SubItems

这样如果上例中 ColumnHeader 对象的数目为 4,则可设置的 ListSubItems 集合的至多为 3。
参考技术A listview

部件——microsoft windows common controls 6.0

可以到网上搜索一下关于他的教程!
参考技术B 第一个 ColumnHeader 和 SubItems

以上是关于vb的使用问题?的主要内容,如果未能解决你的问题,请参考以下文章

VB如何使用PNG图片

VB6使用密码加密文本

使用 AJAX 从 VB 文件请求 webmethod 信息时出现问题

使用 VB.NET 打印 MS Access 报告

如何使用 ATL 创建 VB6 集合对象

vb中的timer\多线程有关问题