CommonDialog怎么选择目录?诚信结贴不食言
CommonDialog怎么选择目录?不想要其他的对话框,因为现在的用户不熟悉别的对话框,只熟悉CommonDialog,但CommonDialog只能选择文件,想只选择目录,点里面的“确定”就可以
Private Type BROWSEINFO前面说了"现在的用户不熟悉别的对话框,只熟悉CommonDialog"
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Const BIF_RETURNONLYFSDIRS = &H1
Private pidl As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Private Sub cmdSearch_Click()
Dim bi As BROWSEINFO
Dim r As Long
Dim pidl As Long
Dim path As String
Dim pos As Integer
'句柄
bi.hOwner = Me.hwnd
'展开根目录
bi.pidlRoot = 0&
'列表框标题
bi.lpszTitle = "请选择文件导出目录:"
'规定只能选择文件夹,其他无效
bi.ulFlags = BIF_RETURNONLYFSDIRS
'调用API函数显示列表框
pidl = SHBrowseForFolder(bi)
'利用API函数获取返回的路径
path = Space$(512)
r = SHGetPathFromIDList(ByVal pidl&, ByVal path)
If r Then
pos = InStr(path, Chr$(0))
txtcFilePath.Text = Left(path, pos - 1)
Else
txtcFilePath.Text = ""
End If
End Sub
你这个代码随便一搜索哪都有
与CommonDialog没什么关系吧
Private Sub Command1_Click()
CommonDialog1.FileName = ""
CommonDialog1.InitDir = "c:\windows"
CommonDialog1.ShowOpen
End Sub
Private Sub Command2_Click()
CommonDialog1.FileName = ""
CommonDialog1.InitDir = "c:\program files"
CommonDialog1.ShowOpen
End Sub
+1 楼主需要的是保存选择的目录吧
Option Explicit
Private Sub Command1_Click()
Dim strFileName As String
CommonDialog1.FileName = ""
CommonDialog1.ShowOpen
strFileName = CommonDialog1.FileName
End Sub
Private Sub Form_Load()
With CommonDialog1
.Filter = "文本文件|*.txt"
.InitDir = App.Path
.DialogTitle = "打开文本文件"
End With
End Sub
'添加一个命令按钮Command1
Private Sub Command1_Click()
On Error GoTo errCancel
Dim DirPath As String
With CommonDialog1
.CancelError = True
.InitDir = App.Path
.DialogTitle = "选择目录"
.Filter = "选择目录|:"
.FileName = "选择目录"
.ShowSave
DirPath = CurDir()
MsgBox DirPath
End With
errCancel:
End Sub
有一个BUG就是不能把文件名“选择目录”删除,否则怎么也不能进行下去。
实在不会设置CommonDialog1.Flags属性了,找不到禁止更改文件名的方法...
应该是有办法的。以前见过有这么做的。
但是ls的回答都不是官方的办法。
挂钩CommonDialog应该可以做到。
但是推荐 BrowseForFolder 的办法。 用DriverListBox和DirListBox控件自己搭一个也蛮简单的. 都VB默认控件 "不想要其他的对话框"....
路过帮顶 我给你一个暂时的方法先:
下载 http://download.csdn.net/source/1601550
里面有 ShellCombo ShellListView,配合 Toolbar,可以比较像的模仿出 OpenFileDialg。 Option Explicit
Dim SelPath$, spShell, spFolder, spFolderItem
Private Sub Command1_Click()
On Error GoTo errhandler '有错误或选择取消返回32755的错误代号,执行错误处理副程序
Set spShell = CreateObject("Shell.Application") '创建对像
Set spFolder = spShell.BrowseForFolder(0, "选择目录:", 0, "") '定义spFolder=定义对像展开目录
Set spFolderItem = spFolder.Self '定义spFolderItem
SelPath = spFolderItem.Path 'SelPath=选中的spFolderItem文件夹路径
If Right(SelPath, 1) <> "\" Then SelPath = SelPath & "\" '选择的路径最后面加上\
MsgBox SelPath
errhandler: '错误处理副程序
If Err > 0 Then Exit Sub '有错误或按了取消即退出这个sub
End Sub 我顶上去 画个form模拟下吧 标题写得很清楚,CommonDialog。。。
呵呵....我相信我看得懂中文.
Commondialog原始设计的主要目的是用来 "选择文件" 不是用来 "选择目录夹", 虽然可以用另种方式来达到目的, 当然也可行, 就如被单 原来是睡觉用的, 但是不反对你用被单来当 窗帘
12F 的代码只是告诉你另种更方便的思路 这个代码只要见过CommonDialog 只要用过Windows系统的人, 这个代码的界面 也是大家所熟悉的 用户不熟悉别的对话框 用户应该不会如你所想的那么笨吧? “只要用过Windows系统的人, 这个代码的界面 也是大家所熟悉的”
这结论下得太武断了吧?
“用户不熟悉别的对话框 用户应该不会如你所想的那么笨吧?”
用户如果都如你那样不笨,还需要别人做软件么?
用户可以在QQ,Word,Excel这些常用的软件中熟悉CommonDialog,这些常用软件中没有你的代码出现那个界面吧?
你这段代码的界面网上到处都是。
LZ应该不会如你所想的那么笨吧?
呵呵。。。看来最笨的人还是我
多此一举 当我没来过吧 人家迅雷的保存地址 不也是用的 那个对话框么 BrowseForFolder 用迅雷的人必然会用QQ,反之未必
见#18楼
补充:VB , API