странное поведениt WinForm

Автор Тема: странное поведениt WinForm  (Прочитано 9065 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
странное поведениt WinForm
« : 11-10-2018, 18:09:09 »
Добрый вечер!
Такая проблема: вызываю я форму модально
Код - C# [Выбрать]
  1. Application.ShowModalDialog(form);
затем на время выполнения кода (по нажатию кнопки ОК) скрываю
Код - C# [Выбрать]
  1. this.Hide();
(внеочередной вопрос: нужно ли ее по завершению кода дополнительно закрывать? )

так вот, как только начинает выполняться код форма то скрывается, но еще и всплывает предыдущее активное окно виндоус (например проводник, visual studio и тд) поверх собственно автокада, а затем снова возвращается автокад.
в чем дело?
при чем если вызвать просто
Код - C# [Выбрать]
  1. form.Show();
то такого не происходит
а если
Код - C# [Выбрать]
  1. form.ShowDialog();
то происходит та же ситуация

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: странное поведениt WinForm
« Ответ #1 : 11-10-2018, 18:14:08 »
внеочередной вопрос: нужно ли ее по завершению кода дополнительно закрывать?
метод Hide() - это тоже самое, что Visibility.Hide. Так что да - закрывать нужно.

И если у вас форма скрывается и больше не появляется, то может стоит её просто закрыть перед выполнением кода? Тогда и проблем не будет =)

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: странное поведениt WinForm
« Ответ #2 : 11-10-2018, 18:16:12 »
да тоже об этом подумал и проверил. но тогда при нажатии форма почему то висит открытой до окончания выполнения кода.. тоже неприятно.
просто она разве сама не закрывает когда код завершен?

Отмечено как Решение simson43 11-10-2018, 18:25:29

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: странное поведениt WinForm
« Ответ #3 : 11-10-2018, 18:18:36 »
да тоже об этом подумал и проверил. но тогда при нажатии форма почему то висит открытой до окончания выполнения кода.. тоже неприятно.
просто она разве сама не закрывает когда код завершен?
Просто код, выполняемый в автокаде, не должен находится в классе окна!

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: странное поведениt WinForm
« Ответ #4 : 11-10-2018, 18:20:00 »
а я всегда так делал. чем это чревато? какие на то причины?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: странное поведениt WinForm
« Ответ #5 : 11-10-2018, 18:23:29 »
а я всегда так делал. чем это чревато? какие на то причины?
Это нарушение принципов SOLID, а в особенности принципа единой ответственности.
Самый простой пример - если вы будете работать над кодом, выполняющимся в автокаде, а другой человек будет работать над GUI (вашим окном) - как вы будете работать?

Ну или другой пример - какие-то моргания окна при работе кода  :D

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: странное поведениt WinForm
« Ответ #6 : 11-10-2018, 18:25:21 »
Хорошо. Так и читабельнее будет, думаю. не надо залазить в окно чтоб увидеть код.
Спасибо

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: странное поведениt WinForm
« Ответ #7 : 11-10-2018, 18:26:03 »
Попробуйте после скрытия окна вызвать метод
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView();

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: странное поведениt WinForm
« Ответ #8 : 11-10-2018, 18:29:09 »
меня устроит вариант с закрытием окна и перенесением кода

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: странное поведениt WinForm
« Ответ #9 : 11-10-2018, 19:19:53 »
Просто код, выполняемый в автокаде, не должен находится в классе окна!
вынес код из формы в отдельный метод. закрываю окно вызываю этот метод и все равно окно висит пока не выполнится код

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: странное поведениt WinForm
« Ответ #10 : 11-10-2018, 19:25:58 »
Метод вызываете либо в обработчике нажатия кнопки?)))

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: странное поведениt WinForm
« Ответ #11 : 11-10-2018, 19:27:10 »
Просто код, выполняемый в автокаде, не должен находится в классе окна!
вынес код из формы в отдельный метод. закрываю окно вызываю этот метод и все равно окно висит пока не выполнится код
Какое окно висит? Запиши видеоролик, как у меня написано в подписи - тогда будет понятно о чем идёт речь. И вообще ты запускаешь код из под отладчика?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: странное поведениt WinForm
« Ответ #12 : 11-10-2018, 19:27:47 »
Ну конечно. Это ничего не изменило по факту? А как я ещё вызову его?

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: странное поведениt WinForm
« Ответ #13 : 11-10-2018, 19:31:04 »
окно формы. нажимаю на кнопку ОК в форме и оно не исчезает до тех пор пока не выполнится полностью код
Какое окно висит?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: странное поведениt WinForm
« Ответ #14 : 11-10-2018, 19:33:34 »
Конечно ничего не изменило! Окно-то закроется только после завершения кода! Должно быть типа того:
Код - C# [Выбрать]
  1. public class MySuperClass {
  2. var win = new MySuperWindow();
  3. win.ShowDialog();
  4. MySuperClass2.StartWorkInCad();
  5. }
P.s. Писал с телефона...