Почему автокад не завершается

Автор Тема: Почему автокад не завершается  (Прочитано 9104 раз)

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

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Добрый день!
В плагине создаю форму.
form = new Form1();
form.Show();
Нажимаю на крестик автокада. Форма уходит на задний план, а автокад не закрывается.
Только после закрытия формы автокад закрывается при нажатии на крестик.
В чем тут дело?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #1 : 22-12-2020, 18:08:30 »
Начнём с того, что вызывать форму нужно не через form.Show(), а через Application.ShowModelessDialog(form)
Ну и форму нужно закрывать самому - кто открыл, тот и закрывает.
 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #2 : 22-12-2020, 18:18:47 »
Открыл форму через Application.ShowModelessDialog(form). Теперь форма и приложение закрываются при 2-ом нажатии на крестик.
Кстати, не очень понимаю, почему нельзя пользоваться методом form.Show(). Везде написано, что это корректный метод.
А по поводу закрытия формы пользователем. Ему это не нужно. Ему удобнее сразу все закрыть, нажав на крестик автокада.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #3 : 22-12-2020, 18:20:41 »
Кстати, не очень понимаю, почему нельзя пользоваться методом form.Show(). Везде написано, что это корректный метод.
Везде - это где? В AutoCAD - это не так.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #4 : 22-12-2020, 18:21:24 »
И еще. При нажатии на крестик автокада программа не попадает в событие Application.BeginQuit

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #5 : 22-12-2020, 18:23:35 »
А по поводу закрытия формы пользователем.
Я ничего не говорил по поводу закрытия формы пользователем. Не он открывал форму - форму открыла ваша программа. Вот она и должна закрыть форму. Например, отследить запуск команды "_QUIT" или Application.BeginQuit и закрыться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #6 : 22-12-2020, 18:24:17 »
И еще. При нажатии на крестик автокада программа не попадает в событие Application.BeginQuit
Это что-то ваша форма напортачила - с ней разбирайтесь. Так быть не должно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #7 : 22-12-2020, 18:26:32 »
Форму я взял самую примитивную (пустую Windows Form). Там негде наврать.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #9 : 22-12-2020, 18:49:50 »
Kean Walmsley пишет: When you run the application you may experience issues with the dialog getting/retaining focus - this is generally a problem with modeless dialogs that has been addressed automatically by the Palette class, something we'll take a look at in a future post.
Так что, похоже, проблема решается только через Palette class.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #10 : 22-12-2020, 21:19:43 »
Так что, похоже, проблема решается только через Palette class.
Это проблема с потерей/получением фокуса. Но к проблеме с "незавершением AutoCAD" это отношения не имеет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #11 : 22-12-2020, 21:26:19 »
Дело в том, что при первом нажатии на крестик, фокус переходит из формы в автокад, а при втором - все завершается. Так что это именно проблема с потерей/получением фокуса.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #12 : 22-12-2020, 21:38:20 »
Борис_С,
Убедись, что в методе Terminate ты закрываешь свою форму:
Код - C# [Выбрать]
  1. public void Terminate()
  2. {
  3.     if (form != null)
  4.     {
  5.         if (!form.IsDisposed) form.Dispose();
  6.     }
  7. }
И вообще поищи готовые примеры немодальных форм в AutoCAD. Например,
https://drive-cad-with-code.blogspot.com/2014/02/showing-and-closing-modeless-formdialog.html
Проверь как с этим кодом закрывается AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Почему автокад не завершается
« Ответ #13 : 23-12-2020, 08:55:24 »
Так что, похоже, проблема решается только через Palette class.
Мне думается, что это неплохой вариант. В самом автокаде практически все немодальные инструменты реализованы через палитры. Это привычный для пользователя вид диалога, с ним удобно работать:
  • прикрепляется к сторонам окна,
  • комбинируется с другими палитрами,
  • есть автоматическое скрытие,
  • автоматически открывается при запуске автокада в том же состоянии, в котором была на момент закрытия.
Ну и нет таких проблем с блокировкой закрытия AutoCAD.
Я, например, всегда делаю палитру, если мне нужен немодальный диалог.

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #14 : 23-12-2020, 10:58:10 »
if (form != null)
    {
        if (!form.IsDisposed) form.Dispose();
    }
Это ничего не изменило. Для того, чтобы закрыть автокад, нужно перевести фокус на автокад и нажать крестик.