Работа с диалоговыми окнами

Автор Тема: Работа с диалоговыми окнами  (Прочитано 8772 раз)

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

Оффлайн Андрей ЛаврентьевАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Добрый день!
Прошу сильно не ругать, за возможно примитивные вопросы, я новичок в net, да и в C#.
Но на форуме не нашел, подобную тему, возможно не там искал.
Как в AutoCAD сделать запрет повторного вызова диалогового окна?
В C# есть класс Mutex, но он не работает под AutoCAD.
Или может использовать обработчик событий? Если да, то поделитесь кусочком кода.
Пример
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using System.Windows.Forms;
  5.  
  6. namespace _65_Пример
  7. {
  8.     public class Class1
  9.     {
  10.         [CommandMethod("techno_trub")]
  11.         public void rashet()
  12.         {
  13.             DBConnect connect = new DBConnect();
  14.             if (connect.con_flag)
  15.             {
  16.                 Form1 MForm = new Form1();
  17.                 MForm.Show();
  18.             }
  19.  
  20.             else
  21.             {
  22.                 MessageBox.Show("Нет связи с сервером БД");
  23.             }
  24.         }
  25.     }
  26. }

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

  • Administrator
  • *****
  • Сообщений: 13894
  • Карма: 1789
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с диалоговыми окнами
« Ответ #1 : 01-11-2017, 16:36:20 »
Не понятно о чем речь. Можешь сделать статическую переменную и проверять её. Можешь сделать диалог модальным  и тогда пока ты его не закроешь второй раз ты его открыть не сможешь. Вообще непонятно что ты хочешь получить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Работа с диалоговыми окнами
« Ответ #2 : 01-11-2017, 16:41:48 »
Не понятно о чем речь.
Мне, честно говоря, тоже. Но попробую угадать:
Код - C# [Выбрать]
  1. MForm.Show();
Не используйте в AutoCAD. Есть специальный метод у Application: ShowModalDialog. Если его использовать, то проблема отпадёт сама собой, скорее всего.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Работа с диалоговыми окнами
« Ответ #3 : 01-11-2017, 18:14:10 »
То, что хочет ТС делается вот так:
Код - C# [Выбрать]
  1. public class MpTotalsFunction
  2.     {
  3.         // Вызов функции
  4.         MpTotalsWindow _mpTotals;
  5.         [CommandMethod("ModPlus", "mpTotals", CommandFlags.Modal)]
  6.         public void Main()
  7.         {
  8.             if (_mpTotals == null)
  9.             {
  10.                 _mpTotals = new MpTotalsWindow();
  11.                 _mpTotals.Closed += win_Closed;
  12.             }
  13.  
  14.             if (_mpTotals.IsLoaded)
  15.                 _mpTotals.Activate();
  16.             else
  17.                 //AcApp.ShowModelessWindow(AcApp.MainWindow.Handle, _mpTotals);
  18.                 _mpTotals.Show();
  19.         }
  20.         void win_Closed(object sender, EventArgs e)
  21.         {
  22.             _mpTotals = null;
  23.             Utils.SetFocusToDwgView();
  24.         }
  25.     }
Использовать _mpTotals.Show(); или AcApp.ShowModelessWindow(AcApp.MainWindow.Handle, _mpTotals); - я так и не увидел особой разницы ))
Использование Mutex - это для приложений под Windows. Всякие там события и прочее - это излишки и усложнения. В контексте автокад все решается просто

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Работа с диалоговыми окнами
« Ответ #4 : 01-11-2017, 18:16:33 »
namespace _65_Пример
А вот этого не стоит делать ) Кириллицу не стоит использовать в коде

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Работа с диалоговыми окнами
« Ответ #5 : 01-11-2017, 18:34:51 »
Использовать _mpTotals.Show(); или AcApp.ShowModelessWindow(AcApp.MainWindow.Handle, _mpTotals); - я так и не увидел особой разницы ))
Однако, она есть.В первом случае, AutoCAD ничего не знает об этом окошке, что может вызывать различные проблемы. Ну и красивой иконки в уголочке у него не будет ;)

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Работа с диалоговыми окнами
« Ответ #6 : 01-11-2017, 18:38:41 »
В первом случае, AutoCAD ничего не знает об этом окошке, что может вызывать различные проблемы
Ни одной проблемы за годы я так и не словил))
Ну и красивой иконки в уголочке у него не будет
Благо, в моих окошках нет иконок в углу вообще  ;)


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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Работа с диалоговыми окнами
« Ответ #7 : 01-11-2017, 18:40:25 »
Благо, в моих окошках нет иконок в углу вообще
А это не WPF?
У автора темы речь идёт про WinForms, поэтому, я на автомате писал про его поведение. А тут-то WPF. Возможно, что там и нет проблем. Я после того, как в WinForms их словил, в WPF уже не экспериментировал.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Работа с диалоговыми окнами
« Ответ #8 : 01-11-2017, 18:45:46 »

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Работа с диалоговыми окнами
« Ответ #9 : 01-11-2017, 19:22:35 »
Благо, в моих окошках нет иконок в углу вообще
А это не WPF?
У автора темы речь идёт про WinForms, поэтому, я на автомате писал про его поведение. А тут-то WPF. Возможно, что там и нет проблем. Я после того, как в WinForms их словил, в WPF уже не экспериментировал.
Тут я спорить не буду. При переходе на .Net я сразу миновал win forms. Возможно с ними и есть проблемы в автокаде, но с WPF, повторюсь - не встречал. А вот что забавно - при «правильном» использовании как раз были какие-то проблемы, поэтому я наоборот перешёл на Show()

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Работа с диалоговыми окнами
« Ответ #10 : 01-11-2017, 19:38:15 »
А вот что забавно - при «правильном» использовании как раз были какие-то проблемы
С большой долей вероятности - из-за использования метода в таком виде:
Код - C# [Выбрать]
  1. AcApp.ShowModelessWindow(AcApp.MainWindow.Handle, _mpTotals);
Вроде бы, я на этом тоже спотыкался.
У меня сейчас везде либо так:
Код - C# [Выбрать]
  1. AcApp.ShowModelessWindow(_mpTotals);
либо так:
Код - C# [Выбрать]
  1. AcApp.ShowModelessWindow(null, _mpTotals, false);

Оффлайн Андрей ЛаврентьевАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Работа с диалоговыми окнами
« Ответ #11 : 02-11-2017, 14:28:30 »
Всем огромное спасибо за подсказки, грех при такой поддержке не развиваться.   :)
Я ведь искал слово Form на форуме, а надо было ShowModelessWindow.  ???
Сегодня наткнулся на видео Дмитрия "Использование диалогов Windows Forms",
хочется сказать ему огромное спасибо за такой бесценный материал для начинающих.
С помощью него сформировал модальную форму диалога, далее буду причесывать ее.