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

Vb6:通过浏览按钮选择稍后要使用的文件,vb6,Vb6,这是我的代码(请注意,这是一位朋友给出的): 基本上以后我会编辑所选的文本文件,所以稍后我会在函数中使用textfile调用它。但是我找到了一条没有找到的路,所以我觉得我做错了什么。 提前谢谢 编辑:我所要做的就是选择一个文本文件,然后稍后可以调用并使用它。可能sSave包含路径名,但textfile包含255个空格。VB6中的“公共对话框控件”不提供此功能吗 我的VB6有点陈旧,但已经提供了选择文件的基本对话框。 工具->控件->Microsoft通用对话框控件v 此外,对GetFileNam

这是我的代码(请注意,这是一位朋友给出的):

基本上以后我会编辑所选的文本文件,所以稍后我会在函数中使用textfile调用它。但是我找到了一条没有找到的路,所以我觉得我做错了什么。 提前谢谢


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

可能sSave包含路径名,但textfile包含255个空格。

VB6中的“公共对话框控件”不提供此功能吗

我的VB6有点陈旧,但已经提供了选择文件的基本对话框。
工具->控件->Microsoft通用对话框控件v


此外,对GetFileNameFromBrowseW的调用不包括引用变量-textfile

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

如shahkalpesh所述,您可以使用标准COM库访问此功能

在VB6中,添加组件:

  • 项目>组件
  • 在“控件”选项卡上,选择Microsoft Common Dialog Control 6.0(SP6)
现在,在窗体上,从工具箱中添加新的公共对话框控件

在代码中,您需要:

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

我找到了这个代码并运行了它

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获得预期结果,您试图实现什么?这个代码完整吗?我可以通过将其复制到VB6应用程序中来运行它吗?在末尾添加了一行,这还不完整,它需要在开始时声明一些函数。我99%确定您应该使用公共对话框OCX。您几乎不可能在VBA环境中进行编程,因为VBA环境不可用。几乎没有。在这种情况下,RS Conley的答案可能就是您所需要的。建议您在答案顶部使用通用对话框,好吗?这将避免您的答案被否决:)可能Jackie Brown正在使用某些VBA环境,您无法使用公共对话框,在这种情况下,您的答案当然是正确的。涉及公共对话OCX的建议并不是解决问题所需的最低要求,因为它引入了依赖关系,并且需要更改程序的设置。我错过的是他正在传递sSave而不是文本文件。但我展示了如何诊断它,并给出了一个已知的好例子。
MsgBox "(" & Text1 & ")-(" & textfile & ")"