С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
wish

Как в CommonDialog открыть папку?

20.02.2010, 22:52. Показов 2238. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу узнать как можно в CommonDialog открыть папку (Указать её путь).
Я оттолкнулся от CommonDialog.FileName программно отбросил имя открывамого файла и таким образом получил путь к папке.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub Command3_Click()
 
Dim prob As String: otbras As Integer: nach_schet As Integer
Dim prob1 As String: probila As String
Dim prob2 As String
Dim chisla As Integer: Dim vseti As String
prob = ':'
probila = ' ': vseti = '\ '
nach_schet = 0: chisla = 1
 
On Error GoTo ErrorHandler
CommonDialog1.ShowOpen
If ShowOpen = 0 Then prob1 = CommonDialog1.FileName
 
Do Until prob = Left(prob2, 1) ' Ищет значёк :
If probila = Left(prob2, 1) Then nach_schet = 1 ' Ищет значёк   (длину файла)
If vseti = Left(prob2, 2) Then otbras = otbras - 1: Exit Do 'Исли открываем по сети то опрашиваем \
otbras = otbras + nach_schet
prob2 = Right(prob1, chisla)
chisla = chisla + 1
Loop
 
Text1 = Left(prob1, otbras + 1) 'Отбрасывает в пути ******** те. имя файла
Exit Sub
ErrorHandler:
End Sub
Но это всё реальный геморрой. Подскажите как сократить код. Или какую-то функцию.
А может заменить CommonDialog чем либо другим.
p.s.Воспользовался CommonDialog потому что есть доступ к сети. А к примеру DriveListBox видит только ситевые диски, а не рабочую группу.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2010, 22:52
Ответы с готовыми решениями:

Как открыть файлы через CommonDialog
Привет товарищи нужда привела все же! Подскажите пожалуйста, есть компонент CommonDialog, работать с ним могу, только 1 файл открыть, а мне...

Как открыть папку?
Часто задают вопросы типа 'Как открыть папку?' так вот shell explorer.exe c:windows'

Как открыть папку из VB?
Подскаjите Плиззз, как открить папку из VB? Папка создаетса FileSystemObject'om Зараннее благодарен!

2
Messir
20.02.2010, 23:08
Вот пример кода
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Private Type BrowseInfo
    hWndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type
Const BIF_RETURNONLYFSDIRS = 1
Const MAX_PATH = 260
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
 
Private Sub Form_Load()
    Dim iNull As Integer, lpIDList As Long, lResult As Long
    Dim sPath As String, udtBI As BrowseInfo
    With udtBI
        .hWndOwner = Me.hWnd
        .lpszTitle = lstrcat("C: ", "")
        .ulFlags = BIF_RETURNONLYFSDIRS
    End With
    'Show the 'Browse for folder' dialog
    lpIDList = SHBrowseForFolder(udtBI)
    If lpIDList Then
        sPath = String$(MAX_PATH, 0)
        SHGetPathFromIDList lpIDList, sPath
        CoTaskMemFree lpIDList
        iNull = InStr(sPath, vbNullChar)
        If iNull Then
            sPath = Left$(sPath, iNull - 1)
        End If
    End If
 
    MsgBox sPath
End Sub
wish
21.02.2010, 14:59
Я вот сам уже нашёл вот такой очень великолепный код.
Но серавно спасибо. Твой тоже посмотрю.

Данный пример является дополнением к 'Открытие стандартного окна выбора папок/файлов', но обеспечивает дополнительную возможность выбора только 'Сетевого Окружения', а также папок ПРОГРАММЫ и ГЛАВНОЕ МЕНЮ

Вам понадобится элемент CommandButton

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Private Type BrowseInfo 
hWndOwner As Long 
pIDLRoot As Long 
pszDisplayName As Long 
lpszTitle As Long 
ulFlags As Long 
lpfnCallback As Long 
lParam As Long 
iImage As Long 
End Type 
 
Public Enum BrowseType 
BrowseForFolders = &H1 
BrowseForComputers = &H1000 
BrowseForPrinters = &H2000 
BrowseForEverything = &H4000 
End Enum 
 
Public Enum FolderType 
CSIDL_BITBUCKET = 10 
CSIDL_CONTROLS = 3 
CSIDL_DESKTOP = 0 
CSIDL_DRIVES = 17 
CSIDL_FONTS = 20 
CSIDL_NETHOOD = 18 
CSIDL_NETWORK = 19 
CSIDL_PERSONAL = 5 
CSIDL_PRINTERS = 4 
CSIDL_PROGRAMS = 2 
CSIDL_RECENT = 8 
CSIDL_SENDTO = 9 
CSIDL_STARTMENU = 11 
End Enum 
 
Private Const MAX_PATH = 260 
 
Private Declare Sub CoTaskMemFree Lib 'ole32.dll' (ByVal hMem As Long) 
Private Declare Function lstrcat Lib 'kernel32.dll' Alias 'lstrcatA' (ByVal lpString1 As String, ByVal lpString2 As String) As Long 
Private Declare Function SHBrowseForFolder Lib 'shell32.dll' (lpbi As BrowseInfo) As Long 
Private Declare Function SHGetPathFromIDList Lib 'shell32.dll' (ByVal pidList As Long, ByVal lpBuffer As String) As Long 
Private Declare Function SHGetSpecialFolderLocation Lib 'shell32.dll' (ByVal hWndOwner As Long, ByVal nFolder As Long, ListId As Long) As Long 
 
Public Function BrowseFolders(hWndOwner As Long, sMessage As String, Browse As BrowseType, ByVal RootFolder As FolderType) As String 
Dim Nullpos As Integer 
Dim lpIDList As Long 
Dim res As Long 
Dim sPath As String 
Dim BInfo As BrowseInfo 
Dim RootID As Long 
SHGetSpecialFolderLocation hWndOwner, RootFolder, RootID 
BInfo.hWndOwner = hWndOwner 
BInfo.lpszTitle = lstrcat(sMessage, '') 
BInfo.ulFlags = Browse 
If RootID <> 0 Then BInfo.pIDLRoot = RootID 
lpIDList = SHBrowseForFolder(BInfo) 
If lpIDList <> 0 Then 
sPath = String(MAX_PATH, 0) 
res = SHGetPathFromIDList(lpIDList, sPath) 
Call CoTaskMemFree(lpIDList) 
Nullpos = InStr(sPath, vbNullChar) 
If Nullpos <> 0 Then 
sPath = Left(sPath, Nullpos - 1) 
End If 
End If 
BrowseFolders = sPath 
End Function 
 
Private Sub Command1_Click() 
'следующие вызовы функции сработали нормально 
MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_DESKTOP) '+весь компьютер 
'MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_DRIVES) '+только устройства 
'MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_NETHOOD) '+только сеть 
'MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_PROGRAMS) '+папка Программы 
'MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_STARTMENU) '+Главное меню 
 
'результат действия следующих кодов вызвал недоумение... 
'MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_BITBUCKET) '-корзина 
'MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_CONTROLS) '-панель управления 
'MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_FONTS) '-папка со шрифтами 
'MsgBox BrowseFolders(hWnd, 'Select a Folder', BrowseForFolders, CSIDL_NETWORK) '-NetHood
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2010, 14:59
Помогаю со студенческими работами здесь

Как программно открыть папку Администрирование?
Как её открыть програмно ? Shell &quot;????????&quot;

Как открыть папку Appdata/Roaming
If nasDirExists(&quot;C:\Users\111\AppData\Roaming\Папка\&quot;) Then MsgBox &quot;бла бла бла&quot;, vbInformation Else MkDir...

Как открыть сетевую папку на пароле?
как програмнно открыть папку через сеть на которую установлено пароль

Как открыть сетевую папку на пароле?
Плиз! как прог откр сетевую папку где устан пароль

Как запустить программу или открыть папку
Какой код для этого используется? пробовал один из методов: Dim s As New Shell s.Open (&quot;C:\Windows\notepad.exe&quot;) Это я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru