灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3449回复:0

文件系统控件的使用

楼主#
更多 发布于:2012-09-08 11:51

使用文件系统控件(Directory List Box、Drive List Box 和 File ListBox)

    许多应用程序必须显示关于磁盘驱动器、目录和文件的信息。为使用户能够利用文件系统,Visual Basic 提供了两种选择。可以使用由 CommonDialog控件提供的标准对话框,或者使用 DirListBox、DriveListBox 和 FileListBox这三种特殊的控件的组合创建自定义对话。
    文件系统控件使用户能在应用程序中检查可用的磁盘文件并从中选择。若只需要标准的“打开文件”或“保存”对话框,则应考虑使用 CommonDialog控件。
    详细信息 请参阅本章前面的“使用 CommonDialog 控件”。

    示例应用程序:Winseek.vbp
    许多代码示例都来自 WinSeek 示例应用程序(Winseek.vbp),该程序列在Samples目录中。

    检查文件系统
    每个文件系统控件都经过精心设计,将灵活、复杂的文件系统检查功能与简易的编程方法结合起来。每个控件都自动执行文件数据获取任务,但也可编写代码自定义控件外观并指定显示的信息。

50_3710_8043005e0f3320e.gif[删除]
    可单独使用文件系统控件,也可组合起来使用。组合使用时,可在各控件的事件过程中编写代码来判断它们之间的交互方式。也可让它们独立操作。图 7.17 显示了一起使用的三个控件。
    文件系统控件自动从操作系统获取一切信息;可访问此信息或判断每个控件通过其属性显示的信息。例如,在缺省时显示当前工作目录的内容(即启动应用程序的目录,或者由 ChDir 语句改变的当前目录) 。
    应用程序也可显示文件列表,这些文件的名字匹配一种模式,例如 *.frm。只需在窗体上绘制一个文件列表,设置其 Pattern 属性为 *.frm。运行时,可用下列代码指定 Pattern 属性:
    File1.Pattern = "*.FRM"

50_3710_e254ae7810a7c40.gif[删除]
    文件系统控件使操作非常灵活,这是 CommonDialog 控件无法做到的。可以用多种方法混合、匹配它们,并可控制它们的外观和交互方式。
    如果目的就是要让用户能够打开和保存文件,则 CommonDialog 控件为这些操作提供了现成的一组对话框。这些对话框也为许多其它基于 MicrosoftWindows 的应用程序所使用,因此具有标准化的外观。这些控件也能识别可用的网络驱动器。
    详细信息 请参阅本章前面的“使用 CommonDialog 控件”。

    驱动器列表框
    驱动器列表框是下拉式列表框。在缺省时在用户系统上显示当前驱动器。当该控件获得焦点时,用户可输入任何有效的驱动器标识符,或者单击驱动器列表框右侧的箭头。用户单击箭头时将列表框下拉以列举所有的有效驱动器。若用户从中选定新驱动器,则这个驱动器将出现在列表框的顶端。可用代码检查 Drive 属性来判断当前选择的驱动器。应用程序也可通过下述简单赋值语句指定出现在列表框顶端的驱动器:
    Drive1.Drive = "c:"
驱动器列表框显示可用的有效驱动器。从列表框中选择驱动器并不能自动地变更当前的工作驱动器;然而可用 Drive 属性在操作系统级变更驱动器,这只需将它作为 ChDrive 语句的参数:
ChDrive Drive1.Drive

    目录列表框
    目录列表框从最高层目录开始显示用户系统上的当前驱动器目录结构。起初,当前目录名被突出显示,而且当前目录和在目录层次结构中比它更高层的目录一起向根目录方向缩进。在目录列表框中当前目录下的子目录也缩进显示。在列表中上下移动时将依次突出显示每个目录项。

    标识单个目录
    列表框中的每个目录关联一个整型标识符,可用它来标识单个目录。CommonDialog 控件没有提供这个功能。Path 属性 (Dir1.Path) 指定的目录总是有 ListIndex 值-1。紧邻其上的目录具有 ListIndex 值- 2,再上一个为ListIndex- 3,依次类推。Dir1.Path 的第一个子目录具有 ListIndex 值 0。如图 7.18 所示,若第一级子目录有多个目录,则每个目录的 ListIndex 值按 1、2、3……的顺序依次排列。

50_3710_a712a38e2c5736d.gif[删除]



设置当前目录
    可用目录列表框的 Path 属性设置或返回列表框中的当前目录 (ListIndex = -1)。例如,若为图 7.18 中的 Drive1.Path 赋以 "c:payroll",则目录 Pagroll将成为当前工作目录。
    同样,可把驱动器列表框的 Drive 属性赋予目录列表框的 Path 属性:
    Dir1.Path = Drive1.Drive
    执行赋值语句时,目录列表框将显示此驱动器上所有有效的目录和子目录。缺省时,目录列表框将显示驱动器的当前目录的所有上级目录以及下一级子目录,而驱动器是被指定给 Dir1.Path 属性的。目录列表框并不在操作系统级设置当前目录;它只是突出显示目录并将其 ListIndex 值设置为 -1。
    为设置当前工作目录应使用 ChDir 语句。例如,下列语句将当前目录变成目录列表框中显示的一个目录:
    ChDir Dir1.Path在使用文件控件的应用程序中,可用 Application 对象将当前目录设置成应用程序的可执行 (.exe) 文件所在目录:
    ChDrive App.Path   '设置驱动器。
    ChDir App.Path    '设置目录。
    注意 Path 属性只在运行时可用,在设计时不可用。  
    详细信息 关于 Application 对象的详细信息,请参阅《Visual Basic 6.0语言参考》中“App 对象”。

    单击目录项
    目单击目录列表框中的某个项目时将突出显示该项目。而双击项目时则把它赋予 Path 属性并把其 ListIndex 属性设置为-1,然后重绘目录列表框以显示直接相邻的下级子目录。

    查找目录的相对位置
    ListCount 属性返回当前扩展目录下的目录数目,而不是目录列表框中的目录总数。因为当前扩展目录的 ListIndex 值总为 - 1,所以可以编程来判断在目录层次结构中,当前扩展目录与根目录有多大距离。例如:
     '初始化当前扩展目录。
     GoHigher = 0
     '若目录不存在,
     '则 Dir1.List(x) 返回空字符串。
     Do Until Dir1.List(GoHigher) = ""
       GoHigher = GoHigher - 1
     Loop
     '如有必要可转换成正数。
     LevelsAbove = Abs(GoHigher)

    文件列表框
    文件列表框在运行时显示由 Path 属性指定的包含在目录中的文件。可用下列语句在当前驱动器上显示当前目录中的所有文件:
    File1.Path = Dir1.Path
    然后,可设置 Pattern 属性来显示这些文件的子集—─例如,设置为 *.frm后将只显示这种扩展名的文件。Pattern 属性也接受由分号分隔的列表。例如,下列代码行将显示所有扩展名为 .frm 和 .bas 的文件:
    File1.Pattern = "*.frm; *.bas"Visual Basic 支持 ? 通配符。例如,???.txt 将显示所有文件名包含三个字符且扩展名为 .txt 的文件。

    使用文件属性
    文件列表框的属性也提供当前选定文件的属性(Archive、Normal、System、Hidden 和 ReadOnly)。可在文件列表框中用这些属性指定要显示的文件类型。System 和 Hidden 属性的缺省值为 False。Normal、Archive 和 ReadOnly属性的缺省值为 True。
    例如,为了在列表框中只显示只读文件,直接将 ReadOnly 属性设置为 True并把其它属性设置为 False:
    File1.ReadOnly = True
    File1.Archive = False
    File1.Normal = False
    File1.System = False
    File1.Hidden = False
    当 Normal = True 时将显示无 System 或 Hidden 属性的文件。当 Normal =False 时也仍然可显示具有 ReadOnly 和/或 Archive 属性的文件,只需将这些属性设置为 True。
    注意 不使用 attribute 属性设置文件属性。应使用 SetAttr 语句设置文件属性。缺省时,在文件列表框中只突出显示单个选定文件项。要选定多个文件,应使用 MultiSelect 属性。
    详细信息 关于 SetAttr 语句的详细信息,请参阅《Visual Basic 6.0语言参考》的“SetAttr 语句”和“MultiSelect 属性”。

    使用文件系统控件的组合
    如果使用文件系统控件的组合,则可同步显示信息。例如,若有缺省名为Drive1、Dir1 和 File1 的驱动器列表框、目录列表框和文件列表框,则事件可能按如下顺序发生:
    1. 用户选定 Drive1 列表框中的驱动器。
    2. 生成 Drive1_Change 事件,更新 Drive1 的显示以反映新驱动器。
    3. Drive1_Change 事件过程的代码使用下述语句,将新选定项目(Drive1.Drive 属性)赋予 Dir1 列表框的 Path 属性:     Private Sub Drive1_Change ()
      Dir1.Path = Drive1.Drive
     End Sub
    4. Path 属性赋值语句生成 Dir1_Change 事件并更新 Dir1 的显示以反映新驱动器的当前目录。
    5. Dir1_Change 事件过程的代码将新路径(Dir1.Path 属性)赋予 File1 列表框的 File1.Path 属性:
     Private Sub Dir1_Change ()
      File1.Path = Dir1.Path
     End Sub
    6. File1.Path 属性赋值语句更新 File1 列表框中的显示以反映 Dir1 路径指定。
    用到的事件过程及修改过的属性与应用程序使用文件系统控件组合的方式有关。下节“文件系统控件方案:文件搜索器应用程序”演示了这里描述的控件同步。





喜欢0 评分0
游客

返回顶部