设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 18258|回复: 36
打印 上一主题 下一主题

[ActiveX] 学习使用microsoft windows common controls 6.0 (sp6)中几个常用控件

[复制链接]
跳转到指定楼层
1#
发表于 2010-9-9 14:25:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这几个控件是:Toolbar、Imagelist、Statusbar、Treeview、Listview

这只是本人的学习体会,水平有限,谬误之处一定不少,欢迎斧正。

为确定起见,模仿资源管理器做一个示例。

一、具体有下面一些功能:

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、可以按第一、第二或第四列排序

先看一下示例的演示



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 2经验 +20 收起 理由
roych + 10 (其它)优秀教程、原创内容、以资鼓励、其.
todaynew + 10 精品文章

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2010-9-9 14:26:32 | 只看该作者
本帖最后由 sgrshh29 于 2011-8-29 09:31 编辑

二、本示例涉及内容有:
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等控件的初始化、加载、卸载等。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2010-9-9 14:29:13 | 只看该作者
本帖最后由 sgrshh29 于 2010-9-9 15:15 编辑

回复 sgrshh29 的帖子

三、下面来一步步编写这个示例

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、点击后的效果。至于调用的过程,也放在同一个模块中,如何写代码等具体使用时继续。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
 楼主| 发表于 2010-9-9 14:31:05 | 只看该作者
本帖最后由 sgrshh29 于 2010-9-9 15:13 编辑

回复 sgrshh29 的帖子
4、Statusbar控件,看名称就知道是状态栏控件。接下来操作与Toolbar类似
a、在窗体页脚添加一个Statusbar控件,命名为Statusbar0,适当调整一下大小

b、创建一个数据表用来保存控件的参数,命名为tblStatusbar,并输入数据

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以后的窗体,图18



三个比较简单的控件已经ok了。重点是如何设计出合适的数据表并且添加合适的数据,然后创建合适的记录集来对控件进行加载。
接下去是二个相对要复杂一些的控件Treeview和Listview,暂时先到这里。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
发表于 2010-9-9 14:46:34 | 只看该作者
如果能把它压缩上传就更好了

点击这里给我发消息

6#
发表于 2010-9-9 15:02:02 | 只看该作者
谢谢分享!!
7#
 楼主| 发表于 2010-9-9 15:11:18 | 只看该作者
前面漏传了几个图片,正在编辑中。另外,到最后会有一个完整的示例附件上传的。
8#
发表于 2010-9-9 15:16:26 | 只看该作者
前面漏传了几个图片,正在编辑中。另外,到最后会有一个完整的示例附件上传的。
sgrshh29 发表于 2010-9-9 15:11

期待实例


9#
发表于 2010-9-9 15:56:40 | 只看该作者
非常好,很详细,多谢了。希望能多发些这样的例子.
10#
发表于 2010-9-9 15:58:53 | 只看该作者
不要光看结果,过程同样很重要,也是非常精采,谢谢
楼主精益求精的精神值得大家学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 02:58 , Processed in 0.090773 second(s), 39 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表