powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Диалоговое окно выбора папок - FolderBrowserDialog
19 сообщений из 19, страница 1 из 1
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115608
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Пытаюсь реализовать в VB.NET удобное для пользователя диалоговое окно выбрать папку для указания директории. Но стандартное диалог.окно тупое (уродское), неудобное и вообще никчемное на мой взгляд.
Для сравнения в VBA для вывода диалог.окна выбора папки можно использовать Application.FileDialog(msoFileDialogFolderPicker)
Не могу никак реализовать подобное в VB.NET. Не ужели кроме стандартного окна "Обзор папок" больше нельзя ничего сделать?
Нужно вот такое окно:

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115682
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23, это диалог выбора папок из самого Office. Его можно вызвать используя COM Interop: http://stackoverflow.com/a/28449277
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115723
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

Используйте класс Microsoft.Win32.OpenFileDialog.
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115746
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazilenataxa23, это диалог выбора папок из самого Office. Его можно вызвать используя COM Interop: http://stackoverflow.com/a/28449277
Не получается использовать. Как только объявляю прописав строки на верху:
Imports Microsoft.Office
Imports Word = Microsoft.Office.Interop.Word

они моментально подчеркиваются.
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115748
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23, ссылки на Microsoft.Office.Core (Microsoft Office 14.0 Object Library) and Microsoft.Office.Interop.Excel (Microsoft Excel 14.0 Object Library) ты добавила?
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115761
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

Класс Microsoft.Win32.OpenFileDialog пробовали? Надо сделать ссылку на библиотеку PresentationFramework.dll.
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115778
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile nataxa23, ссылки на Microsoft.Office.Core (Microsoft Office 14.0 Object Library) and Microsoft.Office.Interop.Excel (Microsoft Excel 14.0 Object Library) ты добавила?
даааа.... процес торможения виден на лицо!!! + еще ворд запускается....

MrVoidnataxa23,

Класс Microsoft.Win32.OpenFileDialog пробовали? Надо сделать ссылку на библиотеку PresentationFramework.dll.
ссылку на библиотеку сделала. Но вот дальше то с кодом как?
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115781
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

Сорри, не заметил, что нужно выбрать папку, а не файл. Тогда этот класс не подходит. А какой класс вы используете??
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115799
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrVoidnataxa23,

Сорри, не заметил, что нужно выбрать папку, а не файл. Тогда этот класс не подходит. А какой класс вы используете??
то то и оно, что мне нужно окно диалога папок, а не файлов.
Пока пробую подключенные ссылки на Microsoft.Office. Но если что то и получается, то с таким процессом торможения и + запуска экземпляра word, что можно смело идти кофе пить... пока окно выбора папок появится.
Я не знаю конечно..., но может я что то делаю не правильно.
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115808
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

Может, стоит посмотреть в сторону Windows API? :)
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115809
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39115847
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser, nataxa23

Windows API CodePack на официальных страницах микрософта нет. На stackoverflow я выкладывал ссылки с оригиналами ( ссылка1 , ссылка2 ).
Надо самому создать библиотеку. Если не получится, то могу скинуть готовые DLL'ки. :)
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39143459
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrVoidbuser, nataxa23

Windows API CodePack на официальных страницах микрософта нет. На stackoverflow я выкладывал ссылки с оригиналами ( ссылка1 , ссылка2 ).
Надо самому создать библиотеку. Если не получится, то могу скинуть готовые DLL'ки. :)

Пробовала подключать библиотеки:
Microsoft.WindowsAPICodePack.dll
Microsoft.WindowsAPICodePack.Shell.dll
по ссылкам, что вы дали, но если я правильно понимаю, это будет работать только для Vista и более позних версий, потому как VS жалуется на строку:
Код: vbnet
1.
Dim dialog As CommonOpenFileDialog = new CommonOpenFileDialog



Самому создать библиотеку мощно сказано, особенно для новичка как я
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39143691
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
nataxa23Но стандартное диалог.окно тупое (уродское), неудобное и вообще никчемное на мой взгляд.
Мои желания удовлетворяет. В чем проблема?
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39143733
IvanVetrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nataxa23,
настройте поведение стандартного компонента .Forms.OpenFileDialog, чтобы он работал, как вам нужно. Я так и сделал. И этот диалог прекрасно справляется.
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39143750
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IvanVetrovnataxa23,
настройте поведение стандартного компонента .Forms.OpenFileDialog, чтобы он работал, как вам нужно. Я так и сделал. И этот диалог прекрасно справляется.
Вы можете дать пример. Мне не совсем понятно, что значит настроить поведение стандартного компонента.
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39143927
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

Рабочий пример в http://stackoverflow.com/questions/15368771/show-detailed-folder-browser-from-a-propertygrid/15386992#15386992

Тот же класс, но вырезано немного лишнего
Код: vbnet
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.
Imports System.Reflection

Public Class FolderSelectDialog

    Public Class DialogResult
        Public ReturnCode As Integer
        Public FileName As String
    End Class

    Public Shared Function Show(ownerHandle As IntPtr, initialDirectory As String, title As String) As DialogResult
        Dim c_flags As BindingFlags = BindingFlags.Instance Or BindingFlags.[Public] Or BindingFlags.NonPublic
        Dim s_windowsFormsAssembly As Assembly = GetType(FileDialog).Assembly
        Dim s_iFileDialogType As Type = s_windowsFormsAssembly.[GetType]("System.Windows.Forms.FileDialogNative+IFileDialog")
        Dim s_createVistaDialogMethodInfo As MethodInfo = GetType(OpenFileDialog).GetMethod("CreateVistaDialog", c_flags)
        Dim s_onBeforeVistaDialogMethodInfo As MethodInfo = GetType(OpenFileDialog).GetMethod("OnBeforeVistaDialog", c_flags)
        Dim s_getOptionsMethodInfo As MethodInfo = GetType(FileDialog).GetMethod("GetOptions", c_flags)
        Dim s_setOptionsMethodInfo As MethodInfo = s_iFileDialogType.GetMethod("SetOptions", c_flags)
        Dim s_fosPickFoldersBitFlag As UInteger = CUInt(s_windowsFormsAssembly.[GetType]("System.Windows.Forms.FileDialogNative+FOS").GetField("FOS_PICKFOLDERS").GetValue(Nothing))
        Dim s_vistaDialogEventsConstructorInfo As ConstructorInfo = s_windowsFormsAssembly.[GetType]("System.Windows.Forms.FileDialog+VistaDialogEvents").GetConstructor(c_flags, Nothing, New Type() {GetType(FileDialog)}, Nothing)
        Dim s_adviseMethodInfo As MethodInfo = s_iFileDialogType.GetMethod("Advise")
        Dim s_unAdviseMethodInfo As MethodInfo = s_iFileDialogType.GetMethod("Unadvise")
        Dim s_showMethodInfo As MethodInfo = s_iFileDialogType.GetMethod("Show")

        Dim openFileDialog = New OpenFileDialog() With {
                    .AddExtension = False,
                    .CheckFileExists = False,
                    .DereferenceLinks = True,
                    .Filter = "Folders|",
                    .InitialDirectory = initialDirectory,
                    .Multiselect = False,
                    .Title = title
                }

        Dim iFileDialog = s_createVistaDialogMethodInfo.Invoke(openFileDialog, New Object() {})
        s_onBeforeVistaDialogMethodInfo.Invoke(openFileDialog, New Object() {iFileDialog})
        s_setOptionsMethodInfo.Invoke(iFileDialog, New Object() {CUInt(s_getOptionsMethodInfo.Invoke(openFileDialog, New Object() {})) Or s_fosPickFoldersBitFlag})

        Dim adviseParametersWithOutputConnectionToken = New Object() {s_vistaDialogEventsConstructorInfo.Invoke(New Object() {openFileDialog}), 0UI}
        s_adviseMethodInfo.Invoke(iFileDialog, adviseParametersWithOutputConnectionToken)

        Try
            Dim retVal As Integer = CInt(s_showMethodInfo.Invoke(iFileDialog, New Object() {ownerHandle}))

            Return New DialogResult() With {.ReturnCode = retVal, .FileName = openFileDialog.FileName}
        Finally
            s_unAdviseMethodInfo.Invoke(iFileDialog, New Object() {adviseParametersWithOutputConnectionToken(1)})
        End Try
    End Function

End Class



Использование:
Код: vbnet
1.
2.
3.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    MsgBox(FolderSelectDialog.Show(Me.Handle, "C:\", "Выберите папку").FileName)
End Sub
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39143946
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

Выдает ошибку: "Адресат вызова создал исключение"
в строке:
Код: vbnet
1.
Dim iFileDialog = s_createVistaDialogMethodInfo.Invoke(openFileDialog, New Object() {})
...
Рейтинг: 0 / 0
Диалоговое окно выбора папок - FolderBrowserDialog
    #39144221
IvanVetrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nataxa23,

Можно, конечно, создать класс новый... Но зачем заморачиваться, когда уже всё и так есть.
Правда не на бейсике, но какая разница - дот нет.

Код: c#
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.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace folderSelect
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (ofdDir.ShowDialog() == DialogResult.OK)
            {
                FileInfo fi = new FileInfo(ofdDir.FileName);
                textBox1.Text = fi.DirectoryName;
            }
        }
    }
}
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Диалоговое окно выбора папок - FolderBrowserDialog
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]