Выбор файлового фильтра по умолчанию для метода GetFileForSave

Автор Тема: Выбор файлового фильтра по умолчанию для метода GetFileForSave  (Прочитано 6718 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн PhilАвтор темы

  • ADN OPEN
  • Сообщений: 47
  • Карма: 0
Доброго времени суток! Использую метод GetFileForSave для запроса имени сохраняемого файла. Предлагаю сохранение в двух форматах: dwg и dxf. Мне нужно что бы по умолчанию диалоговое окно, вызываемое методом использовало всегда формат dwg. Однако оно запоминает последний выбранный фильтр и при следующем вызове использует его. Установка индекса фильтра перед вызовом метода игнорируется. Как побороть такое поведение метода?

Код - vb.net [Выбрать]
  1.         '' Определение локальных постоянных и переменных
  2.         Const acACAD2000 As String = "AutoCAD 2000/LT2000"
  3.         Const acDwgFilter As String = "Чертеж " & acACAD2000 & " (*.dwg)|*.dwg"
  4.         Const acDxfFilter As String = acACAD2000 & " DXF (*.dxf)|*.dxf"
  5.  
  6.         '' Определение параметров запроса ИМЕНИ ФАЙЛА
  7.         Dim prmtFileNameRes As PromptFileNameResult
  8.         Dim prmtFileNameOpt As PromptSaveFileOptions = New PromptSaveFileOptions("")
  9.  
  10.         prmtFileNameOpt.AllowUrls = False
  11.         prmtFileNameOpt.Message = "Укажите имя экспортного файла"
  12.         prmtFileNameOpt.Filter = acDwgFilter & "|" & acDxfFilter
  13.         prmtFileNameOpt.FilterIndex = 0
  14.         prmtFileNameOpt.InitialFileName = acExportFullName
  15.  
  16.         '' Запрос имени файла
  17.         prmtFileNameRes = acEditor.GetFileNameForSave(prmtFileNameOpt)

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Это такая особенность данного инструмента. В "родных" командах AutoCAD оно ведёт себя точно так же. Как кардинальное решение - можно использовать другой диалог получения файла для сохранения, например из Windows Forms.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А вообще, подозреваю, что можно этим управлять, если изменять значение в реестре. Думаю, что это где-то тут:
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-XXXX:XXX\Profiles\<<[PROFILENAME]>>\Dialogs\Сохранение чертежа

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Установка индекса фильтра перед вызовом метода игнорируется. Как побороть такое поведение метода?
Ради эксперимента попробуй:
1. сначала установить InitialFileName, а затем Filter и FilterIndex. Иногда порядок свойств и методов имеет значение.
2. в InitialFileName передай имя с расширением файла "xxx.dwg" вдруг реагирует.
3. попробуй вариант строки фильтра, без FilterIndex с https://www.keanw.com/2009/10/implementing-a-quick-saveas-command-in-autocad-using-net.html
 opts.Filter = "Drawing (*.dwg)|*.dwg"
 может (*.dwg) указывает на значение по умолчанию


Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
opts.Filter = "Drawing (*.dwg)|*.dwg"
Вот еще пример.  http://www.arch-pub.com/QSAVE_10624689.html

PromptSaveFileOptions opts = new PromptSaveFileOptions("Save Drawing As");
opts.Filter = "Drawing (*.dwg)";
PromptFileNameResult pr = ed.GetFileNameForSave(opts);

Возможно "Drawing (*.dwg)" указывает значение по умолчанию, а "|*.dwg|*.dxf" добавляет выбор расширений.

Оффлайн PhilАвтор темы

  • ADN OPEN
  • Сообщений: 47
  • Карма: 0
1. сначала установить InitialFileName, а затем Filter и FilterIndex. Иногда порядок свойств и методов имеет значение.
2. в InitialFileName передай имя с расширением файла "xxx.dwg" вдруг реагирует.
В данном случае, к сожалению, порядок значения не имеет...

Возможно "Drawing (*.dwg)" указывает значение по умолчанию, а "|*.dwg|*.dxf" добавляет выбор расширений.
В том то и дело, что выскакивает последний использованный фильтр. Причем, он запоминает не использованное расширение, а именно индекс последнего использованного расширения в списке фильтров (а не само расширение).
Строка "Drawing (*.dwg)" задает лишь название фильтра в списке фильтров, сам фильтр идет следующей позицией через разделитель "|". Значение по умолчанию здесь не задается. В Windows.Forms оно задается специальным свойством DefaultExt. В данном же методе, к сожалению, такое свойство недоступно.