简单问题请教,怎么打开文件返回文件名?在线等待.

Vangie 2003-08-25 02:53:45
就象调用普通应用程序菜单中的的"文件","打开",然后选取一些文件,然后返回这些文件的列表?
...全文
77 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gelim 2003-08-25
  • 打赏
  • 举报
回复
使用commondialog可以实现楼主的要求,但lihonggen0(李洪根,用.NET,标准答案来了) 的方法不全面,因为楼主需要选取一些文件,我的代码如下:

Private Sub Command1_Click()
On Error Resume Next
With CommonDialog1
.CancelError = True
.Filter = "TextFile(*.txt)|*.txt|AllFile(*.*)|*.*"
.Flags = cdlOFNAllowMultiselect Or cdlOFNLongNames Or cdlOFNHideReadOnly
.ShowOpen
MsgBox "Your selection are " + .FileName, 64, "Select Files"
End With
End Sub

对于flags可参考一下说明进行设置:

常数 值 描述
1、cdlOFNAllowMultiselect &H200 它指定文件名列表框允许多重选择。 运行时,通过按 SHIFT 键以及使用 UP ARROW 和 DOWN ARROW 键可选择多个文件。作完此操作后,FileName 属性就返回一个包含全部所选文件名的字符串。串中各文件名用空格隔开。

2、cdlOFNCreatePrompt &H2000 当文件不存在时对话框要提示创建文件。该标志自动设置 cdlOFNPathMustExist 和 cdlOFNFileMustExist 标志。

3、cdlOFNExplorer &H80000 它使用类似资源管理器的打开一个文件的对话框模板。适用于 Windows 95 和 Windows NT 4.0。

4、CdlOFNExtensionDifferent &H400 它指示返回的文件扩展名与 DefaultExt 属性指定的扩展名不一致。如果 DefaultExt 属性是 Null,或者扩展相匹配,或者没有扩展时,此标志不设置。当关闭对话框时,可以检查这个标志的值。

5、cdlOFNFileMustExist &H1000 它指定只能输入文件名文本框已经存在的文件名。如果该标志被设置,则当用户输入非法的文件名时,要显示一个警告。该标志自动设置cdlOFNPathMustExist 标志。

6、cdlOFNHelpButton &H10 使对话框显示帮助按钮。

7、cdlOFNHideReadOnly &H4 隐藏只读复选框。

8、cdlOFNLongNames &H200000 使用长文件名。

9、cdlOFNNoChangeDir &H8 强制对话框将对话框打开时的目录置成当前目录。

10、CdlOFNNoDereferenceLinks &H100000 不要间接引用外壳链接(也称作快捷方式)。缺省时,选取外壳链接会引起它被外壳间接引用。

11、cdlOFNNoLongNames &H40000 无长文件名。

12、CdlOFNNoReadOnlyReturn &H8000 它指定返回的文件不能具有只读属性,也不能在写保护目录下面。

13、cdlOFNNoValidate &H100 它指定公共对话框允许返回的文件名中含有非法字符。

14、cdlOFNOverwritePrompt &H2 使“另存为”对话框当选择的文件已经存在时应产生一个信息框,用户必须确认是否覆盖该文件。

15、cdlOFNPathMustExist &H800 它指定只能输入有效路径。如果设置该标志,输入非法路径时,应显示一个警告信息。

16、cdlOFNReadOnly &H1 建立对话框时,只读复选框初始化为选定。该标志也指示对话框关闭时只读复选框的状态。

17、cdlOFNShareAware &H4000 它指定忽略共享冲突错误。
Vangie 2003-08-25
  • 打赏
  • 举报
回复
多谢
射天狼 2003-08-25
  • 打赏
  • 举报
回复
这是可以选多个文件的例子,并且不用控件,打印的时候不用带上控件包~~
射天狼 2003-08-25
  • 打赏
  • 举报
回复
Option Explicit

Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

'系统全局常量========================================================================
Private Const OFN_LONGNAMES = &H200000
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_EXPLORER = &H80000
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_ALLOWMULTISELECT = &H200

Private Const CB_FINDSTRING = &H14C
Private Const CB_FINDSTRINGEXACT = &H158
Private Const LB_FINDSTRING = &H18F
Private Const EM_SETREADONLY = &HCF
Private Const SND_RESOURCE = &H40004
Private Const SND_ASYNC = &H1 ' play asynchronously
Private Const SND_MEMORY = &H4 ' lpszSoundName points to a memory file
Private Const SND_NODEFAULT = &H2 ' silence not default, if sound not found

'系统全局函数========================================================================
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Sub Command1_Click()
Dim fName As String, OfName As OPENFILENAME

OfName.lStructSize = Len(OfName)
OfName.hwndOwner = Me.hWnd
OfName.hInstance = App.hInstance
OfName.lpstrFilter = "*.*" & Chr(0) & "*.*"
OfName.lpstrFile = Space(255) & Chr(0)
OfName.nMaxFile = 256
OfName.lpstrFileTitle = Space(255) & Chr(0)
OfName.nMaxFileTitle = 256
OfName.lpstrTitle = "打开"
OfName.flags = OFN_LONGNAMES + OFN_PATHMUSTEXIST + OFN_HIDEREADONLY + OFN_OVERWRITEPROMPT + OFN_ALLOWMULTISELECT + OFN_EXPLORER

If GetOpenFileName(OfName) Then
fName = OfName.lpstrFile

While fName <> ""
MsgBox Left(fName, InStr(fName, Chr(0)))
fName = Mid(fName, InStr(fName, Chr(0)) + 1)
Wend
End If
End Sub
viena 2003-08-25
  • 打赏
  • 举报
回复
CommonDialog.ShowOpen
lihonggen0 2003-08-25
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
On Error GoTo Err
CommonDialog1.CancelError = True

CommonDialog1.ShowOpen
If CommonDialog1.filename <> "" Then
msgbox CommonDialog1.FileTitle
msgbox CommonDialog1.filename
End If

Err:
If Err.Number = 32755 Then
MsgBox "你按了取消!", vbCritical, "系统提示"
End If
End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧