设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: tmtony
打印 上一主题 下一主题

竞赛[高8]最好和最简洁的文件打开对话框功能

[复制链接]
11#
发表于 2008-3-5 09:28:21 | 只看该作者
调用一个打开对话框容易,写一个特色对话框就非得用API
见过别人的对话框可加上SKIN的, 很漂亮 还找不到思路
回复

使用道具 举报

12#
发表于 2008-3-5 10:17:57 | 只看该作者
如果要完全量身定做的,还得自己写.
不过,怎么都是用微软的
回复

使用道具 举报

点击这里给我发消息

13#
 楼主| 发表于 2008-3-5 15:54:15 | 只看该作者
不错不错,更具体了!!
回复

使用道具 举报

14#
发表于 2008-3-6 15:18:43 | 只看该作者
我也做了一个,并不算很完善,凑合先发上来
按要求是做一个调用最方便的对话框,首先想到的是把常用的类型先定义起来,同时也能支持自定义模式
  1. Public Enum DialogType '定义对话框类型
  2. Fileopen = 1
  3. FileSaveAs = 2
  4. FilePicker = 3
  5. FolderPicker = 4
  6. End Enum

  7. Public Enum FilterType '定义筛选类型
  8. All = 0 '所有文件
  9. MsAccess = 1
  10. MsWord = 2
  11. MsExcel = 3
  12. Txt = 4
  13. HTML = 5
  14. Photo = 6
  15. Cust = 7 '自定义类型
  16. End Enum

  17. Public Const MsAllType As String = "*.*"
  18. Public Const MsALLTitle As String = "所有文件"
  19. Public Const MsAccessType As String = "*.mdb;*.adp;*.mda;*.mde;*.ade"
  20. Public Const MsAccessTitle As String = "Microsoft Office Access"
  21. Public Const HtmType As String = "*.html;*.htm;*.hta;*.asp"
  22. Public Const HtmTitle As String = "网页"
  23. Public Const TxtType As String = "*.txt"
  24. Public Const TxtTitle As String = "文本文档"
  25. Public Const MsExcelType As String = "*.xl;*.xls;*.xla;*.xlm;*.xlc;*.xlw"
  26. Public Const MsExcelTitle As String = "Microsoft Office Excel"
  27. Public Const MsWordType As String = "*.doc;*.dot"
  28. Public Const MsWordTitle As String = "Microsoft Office Word"
  29. Public Const PhotoType As String = "*.JPG;*.JPEG;*.JPE;*.JFIF;*.GIF;*.bmp,*.PNG,*.ico"
  30. Public Const PhotoTitle As String = "图片文件"


  31. Public Function GetFileName(DType As DialogType, txtFilter As FilterType, Optional txtFilterName As String, Optional ByVal strPath, Optional StrTitle As String) As String

  32. '须引用 Micosoft Office 11.0 Object Library

  33. '用途: 自定义对话框
  34. '参数: DType 定义对话框类型 必选: Fileopen 打开 对话框;FileSaveAs 另存为 对话框;FilePicker 文件选取器 对话框;FolderPicker 文件夹选取器 对话框
  35. ' txtFilter 定义几种常用类型 支持自定义类型 必选;
  36. ' txtFilterName 可选,当txtFilter类型为Cust自定义,则txtFilterName表示自定义的筛选条件和名称,筛选条件和筛选名称用","分隔:亦表示保存的文件名
  37. ' strPath 文件路径 可选
  38. ' StrTitle 自定义对话框名称,可选;缺省为系统自带的
  39. '用法: GetFileName Fileopen, MsAccess
  40. ' GetFileName FileSaveAs, MsExcel, "Tes.xls"
  41. ' GetFileName Fileopen, Cust, "*.doc;*.xls;*.mdb"
  42. ' GetFileName Fileopen, Cust, "*.doc;*.xls;*.mdb,My Dialog"
  43. ' GetFileName Fileopen, Cust, "*.doc;*.xls;*.mdb,My Dialog", , "自定义标题"
  44. ' GetFileName Fileopen, MsAccess, , , "自定义标题"
  45. ' GetFileName Fileopen, Photo, , "D:"



  46. Dim StrFilter As String
  47. Dim StrFilterTitle As String
  48. Dim fDialog As Office.FileDialog


  49. Select Case txtFilter

  50. Case All

  51. StrFilter = MsAllType
  52. StrFilterTitle = MsALLTitle

  53. Case MsAccess

  54. StrFilter = MsAccessType
  55. StrFilterTitle = MsAccessTitle

  56. Case MsWord

  57. StrFilter = MsWordType
  58. StrFilterTitle = MsWordTitle

  59. Case MsExcel

  60. StrFilter = MsExcelType
  61. StrFilterTitle = MsExcelTitle

  62. Case Txt

  63. StrFilter = TxtType
  64. StrFilterTitle = TxtTitle

  65. Case HTML

  66. StrFilter = HtmType
  67. StrFilterTitle = HtmTitle

  68. Case Photo

  69. StrFilter = PhotoType
  70. StrFilterTitle = PhotoTitle

  71. Case Cust

  72. Dim Mypos

  73. If IsMissing(txtFilterName) Then

  74. MsgBox "你选择了自定义类型,请在txtFilterName选项中填写筛选数据"

  75. Exit Function
  76. Else

  77. Mypos = InStr(1, txtFilterName, ",")


  78. If Mypos > 0 Then

  79. StrFilter = Mid(txtFilterName, 1, Mypos - 1)
  80. StrFilterTitle = Mid(txtFilterName, Mypos + 1, Len(txtFilterName) - Mypos)
  81. Else
  82. StrFilter = txtFilterName
  83. StrFilterTitle = "自定义类型"

  84. End If

  85. End If

  86. End Select

  87. Set fDialog = Application.FileDialog(DType)

  88. With fDialog

  89. .AllowMultiSelect = False

  90. If IsMissing(strPath) Then
  91. .InitialFileName = CurrentProject.Path
  92. Else
  93. .InitialFileName = strPath
  94. End If

  95. If Not IsMissing(StrTitle) Then
  96. .Title = StrTitle
  97. End If


  98. If DType <> FileSaveAs Then

  99. .Filters.Clear
  100. .Filters.Add StrFilterTitle, StrFilter

  101. Else

  102. .InitialFileName = txtFilterName
  103. End If

  104. .Show
  105. End With

  106. If fDialog.SelectedItems.Count > 0 Then

  107. GetFileName = fDialog.SelectedItems(1)

  108. Else

  109. GetFileName = ""

  110. End If

  111. Set fDialog = Nothing


  112. End Function
复制代码
回复

使用道具 举报

15#
发表于 2008-3-6 16:27:07 | 只看该作者
这么多代码,学习学习
回复

使用道具 举报

16#
发表于 2008-3-6 16:33:36 | 只看该作者
呵呵, 这个还没考虑多选的问题呢
回复

使用道具 举报

点击这里给我发消息

17#
 楼主| 发表于 2008-3-7 11:16:01 | 只看该作者
原帖由 andymark 于 2008-3-6 16:33 发表
呵呵, 这个还没考虑多选的问题呢

一考虑多选,代码又多了
回复

使用道具 举报

18#
发表于 2008-3-8 16:13:21 | 只看该作者
不用先期绑定的方式,可以不引用Micosoft Office 1X.0 Object Library
回复

使用道具 举报

19#
发表于 2008-3-8 16:16:32 | 只看该作者
andymark:
其实可以不用定义:Public Enum DialogType '定义对话框类型,因为引用了Micosoft Office 1X.0 Object Library后是可以使用枚举:MsoFileDialogType
回复

使用道具 举报

20#
发表于 2008-3-8 16:26:23 | 只看该作者
这个我知道,微软那个东东有点长
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-29 18:46 , Processed in 0.084920 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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