Vb6:通过浏览按钮选择稍后使用的文件

Posted

技术标签:

【中文标题】Vb6:通过浏览按钮选择稍后使用的文件【英文标题】:Vb6: Selecting a file to later be used via a browse button 【发布时间】:2008-11-14 04:53:09 【问题描述】:

这是我的代码(注意这是朋友给的):

Private Sub Browse_Click()
   Dim textfile As String
   textfile = Space(255)
   GetFileNameFromBrowseW Me.hWnd, StrPtr(sSave), 255, StrPtr("c:\"), 
      StrPtr("txt"), StrPtr("Apps (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) +
      "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0)), StrPtr("Select File")
      Text1 = Left$(textfile, lstrlen(textfile))
End Sub

基本上稍后我会编辑所选的文本文件,因此稍后我只需在函数中使用文本文件即可调用它。但是我找不到一条路径,所以我觉得我做错了什么。 提前致谢。

编辑:我要做的就是选择一个文本文件,然后可以调用它并使用它。

【问题讨论】:

你想达到什么目的?这段代码完整吗?我可以通过将其复制到 VB6 应用程序中来运行它吗? 在末尾加了一行,这不完整,需要在开头声明一些函数。 我 99% 确定您应该使用通用对话框 OCX。您几乎不可能在不可用的 VBA 环境中进行编程。只是勉强。在这种情况下,RS Conley 的答案可能就是您所需要的。 【参考方案1】:

正如 shahkalpesh 所说,您只需使用标准 COM 库即可访问此功能。

在VB6中,添加组件:

项目 > 组件 在“控件”选项卡上,选择“Microsoft Common Dialog Control 6.0 (SP6)”

现在在您的表单上,从工具箱中添加新的 Common Dialog 控件

在代码中,你需要:

CommonDialog.Filter = "Apps (*.txt)|*.txt|All files (*.*)|*.*"
CommonDialog.DefaultExt = "txt"
CommonDialog.DialogTitle = "Select File"
CommonDialog.ShowOpen

'The FileName property gives you the variable you need to use
MsgBox CommonDialog.FileName

【讨论】:

【参考方案2】:

这个功能不是VB6中的“通用对话框控件”提供的吗?

我的 VB6 有点生锈,但已经提供了选择文件的基本对话框。 工具 -> 控件 -> Microsoft Common Dialog Controls v....

此外,您对 GetFileNameFromBrowseW 的调用不包括引用变量 - 文本文件

【讨论】:

【参考方案3】:

来自here

我找到了这段代码并运行了它。

Private Const VER_PLATFORM_WIN32_NT = 2
Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetFileNameFromBrowseW Lib "shell32" Alias "#63" (ByVal hwndOwner As Long, ByVal lpstrFile As Long, ByVal nMaxFile As Long, ByVal lpstrInitialDir As Long, ByVal lpstrDefExt As Long, ByVal lpstrFilter As Long, ByVal lpstrTitle As Long) As Long
Private Declare Function GetFileNameFromBrowseA Lib "shell32" Alias "#63" (ByVal hwndOwner As Long, ByVal lpstrFile As String, ByVal nMaxFile As Long, ByVal lpstrInitialDir As String, ByVal lpstrDefExt As String, ByVal lpstrFilter As String, ByVal lpstrTitle As String) As Long
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim sSave As String
    sSave = Space(255)
    'If we're on WinNT, call the unicode version of the function
    If IsWinNT Then
        GetFileNameFromBrowseW Me.hWnd, StrPtr(sSave), 255, StrPtr("c:\"), StrPtr("txt"), StrPtr("Text files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0)), StrPtr("The Title")
    'If we're not on WinNT, call the ANSI version of the function
    Else
        GetFileNameFromBrowseA Me.hWnd, sSave, 255, "c:\", "txt", "Text files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0), "The Title"
    End If
    'Show the result
    MsgBox sSave
End Sub
Public Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function

据我所知,GetFileName 函数看起来不错,所以我猜问题出在这个

Text1 = Left$(textfile, lstrlen(textfile))

用这个来检查

MsgBox "(" & Text1 & ")-(" & textfile & ")"

确保您从 Left$ 和 lstrlen 获得预期结果

【讨论】:

建议使用答案顶部的通用对话框可能是一个想法?无论如何,这将避免您的答案被否决:) Jackie-Brown 可能正在使用一些您无法使用通用对话框的 VBA 环境,在这种情况下,您的答案当然是正确的。 涉及通用对话框 OCX 的建议并不是解决问题所需的最低要求,因为它引入了依赖关系并需要更改程序的设置。我错过的是他传递的是 sSave 而不是文本文件。但我展示了如何诊断它并举了一个众所周知的好例子。【参考方案4】:

也许 sSave 包含路径名,但 textfile 包含 255 个空格。

【讨论】:

【参考方案5】:

sSave 替换为textfile。当您稍后需要引用选择的文件时,请使用Text1(可能是一个VB文本框控件,因此Text1单独隐式调用Text1.Text.Text是VB.Textbox的默认成员)。

【讨论】:

以上是关于Vb6:通过浏览按钮选择稍后使用的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用通过文件对话框选择的文件?

VB6广播网络摄像头的解决方案

如何在不通过 COM 的情况下从 VB6 调用 C++ DLL?

使用vb6通过MSFlexigrid将XML数据导入SQL表

如何在每个 Qlabel PyQt5 中显示两个图像

vb6如何实现上传http站点呢?