逻辑悖论:学习使用microsoft windows common controls 6.0 (sp6)中几个常用控件
来源:百度文库 编辑:偶看新闻 时间:2024/05/09 04:40:07
这只是本人的学习体会,水平有限,谬误之处一定不少,欢迎斧正。
为确定起见,模仿资源管理器做一个示例。
一、具体有下面一些功能:
1、窗体自带一个用Toolbar生成的菜单
2、左边是Treeview控件,用来显示文件夹,每个节点表示一个文件夹
3、右边是Listview控件,用来显示左边选中节点(文件夹)下一级的文件夹和文件,每个Item表示一个文件夹或者一个文件
4、下面是Strtusbar控件,显示一些系统状态信息,同时第六个窗格显示即时操作的动作
5、左边的Treeview可以进行的操作有
a、添加节点(同级或下级节点)
b、修改节点名称
c、删除节点
d、拖动一个节点使其成为另一个节点的子节点(在合法的条件下)
e、可以把外部的文件夹或者文件拖放到节点下,并保存到数据库
6、右边的Listview可以进行的操作有
a、修改Item的名称
b、删除Item
c、拖动一个Item使其成为另一个节点下的文件夹或者文件
d、可以将外部的文件夹或者文件拖放到Listview里,使其成为当前节点下的子文件夹或者文件
e、可以改变Listview的样式(这里只用了二种样式)
f、可以按第一、第二或第四列排序
先看一下示例的演示
二、本示例涉及内容有:
1、建表,字段,数据类型,表间关系
2、建窗体,窗体式样,在窗体添加控件
3、建模块,自定义函数,事件过程
4、自动化对象:adodb.connection、adodb.recordset、filesystemobject、dictionary
5、sql语句中的select语句,update语句,insert语句,delete语句
6、ado连接,ado记录集,ado读写大字段
7、使用记录集
8、变量、变量类型转换、数组
9、用递归遍历指定的文件夹中的所有文件夹和文件、用递归遍历Treeview控件指定节点下的所有节点
10、Access自带的一些功能
11、自定义快捷菜单
12、imagelist,treeview,listwiew,toolbar,progressbar,statusbar等控件的初始化、加载、卸载等。
1、先新建一个mdb,然后新建一个窗体命名为frmMain,对窗体的式样进行一些设置后保存
2、然后在vba窗体里,引用microsoft windows common controls 6.0 (sp6)
3、按照从简至繁的原则,从Toolbar开始,看名称知道是一个工具栏控件
a、在窗体添加一个Toolbar控件
在窗体的设计视图中,打开工具箱,找到Microsoft Toolbar Control 6.0,将其添加到窗体页眉,适当调整一下大小。
命名为Toolbar0
b、在窗体添加一个Imagelist控件
Toolbar中的Botton是可以带图标的。为此,在窗体上添加一个Imagelist做为图标来源。
在窗体设计视图,从工具箱中找到Microsoft Imagelist Control 6.0 (sp6),将其添加到窗体
命名为Imagelist3,选择属性对话框,为它添加图标
c、设置Toolbar,有二种方法,一种是在Toolbar的属性对话框中直接设置。另一种是用代码设置
这里采用第一种方法设置属性
用第二种方法添加Button和ButtonMenu
添加Button
语法是:Toolbar.Buttons.Add Index, Key, Text, Type, Face
如果这个Button是下拉式的,还可以添加第二层ButtonMenu
语法是:Toolbar.Buttons(Index).ButtonMenus.Add Index, Key, Text
d、因为用的是access,理所当然用数据表来保存Toolbar的各项参数,创建二个表
一个命名为tblTbrBtn,保存Button参数
另一个命名为tblTbrBtnMenu,保存ButtonMenu参数
二个表之间用ID和PID组成一对多关系,并钩选实施参照完整性、级联更新和级联删除
e、在表中输入数据
f、在窗体加载事件中输入代码,加载Toolbar
Private Sub Form_Load()
加载Toolbar Me.Toolbar0
End Sub
g、下面是加载Toolbar过程,新建一个模块,命名为modToolbar,将下面的过程复制到模块
Sub 加载Toolbar(ByVal objTbr As Object, ByVal objImglist As Object)
Dim Rs As Object
With objTbr
.Top = 0
.Left = 0
.Width = Forms("frmMain").InsideWidth
Set Rs = CurrentDb.OpenRecordset("select * from tblTbrBtn order by id")
Do Until Rs.EOF
.Buttons.Add CInt(Rs(0)), CStr(Rs(1)), CStr(Rs(2)), CStr(Rs(3)), CInt(Rs(4))
Rs.movenext
Loop
Set Rs = Nothing
Set Rs = CurrentDb.OpenRecordset("select * from tblTbrBtnMenu order by pid, id")
Do Until Rs.EOF
.Buttons(CInt(Rs(1))).ButtonMenus.Add CInt(Rs(0)), CStr(Rs(2)), CStr(Rs(3))
Rs.movenext
Loop
Set Rs = Nothing
End With
End Sub
h、加载完成后的窗体,图13
i、为所有的Button和ButtonMenu的单击事件指定过程
Private Sub Toolbar0_ButtonClick(ByVal Button As Object)
If Button.Key = "Exit" Then
DoCmd.Close acForm, Me.Name
Else
TbrClick Button.Key
End If
End Sub
Private Sub Toolbar0_ButtonMenuClick(ByVal ButtonMenu As Object)
TbrClick ButtonMenu.Key
End Sub
j、下面的按钮过程放在模块modToolbar中
Sub TbrClick(ByVal strAction As String)
MsgBox "当前调用的过程:" & strAction
End Sub
k、点击后的效果。至于调用的过程,也放在同一个模块中,如何写代码等具体使用时继续。
12.JPG(103.27 KB, 下载次数: 6)
2010-9-9 15:14:50 上传
下载次数: 6
4、Statusbar控件,看名称就知道是状态栏控件。接下来操作与Toolbar类似
a、在窗体页脚添加一个Statusbar控件,命名为Statusbar0,适当调整一下大小
b、创建一个数据表用来保存控件的参数,命名为tblStatusbar,并输入数据2010-9-9 15:12:51 上传下载附件 (32.52 KB)
c、添加Panel
语法:Statusbar.Panels.Add index, key, text, Style
其中style有几个特定的值是用来显示电脑硬件信息的,这时候的text是默认的
d、添加Panel以后,对每一个Panel的属性进行设置
e、在窗体的加载事件中添加一句,成为:
Private Sub Form_Load()
加载Toolbar Me.Toolbar0
加载StatusBar Me.StatusBar0, Me.ImageList3.Object
End Sub
f、下面是加载过程。新建一个模块,命名modStatusbar,把下面的代码复制进去
Sub 加载StatusBar(ByVal objStatusBar As Object, ByVal objImagelist As Object)
Dim Rs As Object
With objStatusBar
.Top = 0
.Left = 0
.Width = Forms("frmMain").InsideWidth
Set Rs = CurrentDb.OpenRecordset("select * from tblStatusbar order by id")
Do Until Rs.EOF
If IsNull(Rs(2)) Then
.Panels.Add CInt(Rs(0)), Rs(1), , CInt(Rs(3))
ElseIf Rs("strtext") = "currentuser" Then
.Panels.Add CInt(Rs(0)), Rs(1), CurrentUser(), CInt(Rs(3))
Else
.Panels.Add CInt(Rs(0)), Rs(1), Rs(2), CInt(Rs(3))
End If
With .Panels(Int(Rs(0)))
If CInt(Rs(4)) <> 0 Then
.Picture = objImagelist.ListImages(CInt(Rs(4))).Picture
End If
.Alignment = Rs(5)
.AutoSize = Rs(6)
.Bevel = Rs(7)
.Width = Rs(8)
.ToolTipText = Rs(9)
End With
Rs.movenext
Loop
Set Rs = Nothing
End With
End Sub
g、其中第六个Panel是用来显示用户的操作信息的,当用户进行不同的操作时,提示简短的文字
过程如下,可以在需要的地方调用
Sub pnlEditText(ByVal strPnltext As String)
Forms("frmMain").Controls("StatusBar2").Panels(6).Text = strPnltext
End Sub
h、然后把原来在modToolbar中的那个点击事件过程中msgbox显示的信息,改到用Ststusbar来显示。
Msgbox "当前调用的过程:" & strAction
改为
pnlEditText "当前调用的过程:" & strAction
i、加载Toolbar和Statusbar以后的窗体,图182010-9-9 14:30:52 上传下载附件 (30.08 KB)
三个比较简单的控件已经ok了。重点是如何设计出合适的数据表并且添加合适的数据,然后创建合适的记录集来对控件进行加载。
接下去是二个相对要复杂一些的控件Treeview和Listview,暂时先到这里。