nanoCAD и выбор каталога на NET
Понадобилось тут мне как-то выбрать каталог под наником. "Чего тут может быть проблемного" - подумал я и как же я ошибся!
Начал-то я с использования встроенных средств - ну не изобретать же велосипед!
1 2 3 4 5 6 7 8 9 10 11 | using (FolderBrowserDialog dlg = new FolderBrowserDialog()) { dlg.Description = "Выберите каталог"; // Остальные настройки dlg.ShowDialog(); if (!string.IsNullOrWhiteSpace(dlg.SelectedPath)) { return dlg.SelectedPath; } } |
Угу, ага, щщас. В Windows все отрабатывает вполне корректно, а вот под AstraLinux выбрать каталог невозможно! Только выбрать файл внутри каталога - и тогда код возвращает путь к выбранному файлу, как будто это реально каталог.
Короче, а) не работает правильно и б) если оставить "как есть", это ж каждому придется по несколько раз объяснять!
Обращение на официальный форум разработчиков привел к стандартному отсутствию какой-либо реакции (по крайней мере на момент написания статьи).
Вспомнил я про старый лисповый код по выбору каталога и сделал по аналогии. Пока вроде бы работает (правда, без COM не обошлось, поскольку напрямую WinAPI я дергать не умею):
1 2 3 4 5 6 7 8 9 10 11 12 | Document doc = Application.DocumentManager.MdiActiveDocument; nanoCAD.Document comDoc = doc.AcadDocument as nanoCAD.Document; nanoCAD.Application comApp = comDoc.Application; dynamic shell = comApp.GetInterfaceObject("Shell.Application"); dynamic folder = shell.BrowseForFolder(comApp.HWND, "Выбрать каталог", 512 + 16); if (folder != null) { return folder.Self.Path; } return string.Empty; |
Понятно, что вместо магических чисел по идее надо прописывать перечисление, но мне пока лень. В реальном проекте, конечно же, пропишу.