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;

Понятно, что вместо магических чисел по идее надо прописывать перечисление, но мне пока лень. В реальном проекте, конечно же, пропишу.

Размещено в .NET, nanoCAD, Разное · Метки: , ,



Поделитесь своим мнением


Я не робот.