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

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

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

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

Класс Microsoft.Win32.OpenFileDialog пробовали? Надо сделать ссылку на библиотеку PresentationFramework.dll.
...
Рейтинг: 0 / 0
29.11.2015, 19:38
    #39115778
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
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
29.11.2015, 19:45
    #39115781
MrVoid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
nataxa23,

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

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

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

Windows API CodePack на официальных страницах микрософта нет. На stackoverflow я выкладывал ссылки с оригиналами ( ссылка1 , ссылка2 ).
Надо самому создать библиотеку. Если не получится, то могу скинуть готовые DLL'ки. :)
...
Рейтинг: 0 / 0
08.01.2016, 17:41
    #39143459
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
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
09.01.2016, 00:35
    #39143691
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
nataxa23Но стандартное диалог.окно тупое (уродское), неудобное и вообще никчемное на мой взгляд.
Мои желания удовлетворяет. В чем проблема?
...
Рейтинг: 0 / 0
09.01.2016, 10:42
    #39143733
IvanVetrov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
nataxa23,
настройте поведение стандартного компонента .Forms.OpenFileDialog, чтобы он работал, как вам нужно. Я так и сделал. И этот диалог прекрасно справляется.
...
Рейтинг: 0 / 0
09.01.2016, 12:23
    #39143750
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
IvanVetrovnataxa23,
настройте поведение стандартного компонента .Forms.OpenFileDialog, чтобы он работал, как вам нужно. Я так и сделал. И этот диалог прекрасно справляется.
Вы можете дать пример. Мне не совсем понятно, что значит настроить поведение стандартного компонента.
...
Рейтинг: 0 / 0
09.01.2016, 21:33
    #39143927
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
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
09.01.2016, 22:43
    #39143946
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
VSVLAD,

Выдает ошибку: "Адресат вызова создал исключение"
в строке:
Код: vbnet
1.
Dim iFileDialog = s_createVistaDialogMethodInfo.Invoke(openFileDialog, New Object() {})
...
Рейтинг: 0 / 0
11.01.2016, 08:17
    #39144221
IvanVetrov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диалоговое окно выбора папок - FolderBrowserDialog
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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Диалоговое окно выбора папок - FolderBrowserDialog / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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