Диалоговое окно из СБ не закрывается

 

Обнаружил такую проблему. При работе с панелями из стандартной библиотеки после смены входных параметров пропадает реакция на кнопку закрытие (крестик верхней панели).

Взял отсюда пример создания. Добавил только одну строку с input параметром, как будто магик-номер.

Порядок действий. Цепляю советник на график. Через F7 вызываю окно свойств и меняю магик, жму Ок. Все.

Реакция на "крестик" пропала, хотя сворачивание диалогового окна происходит.
Еще один неприятный момент, если теперь удалить советник через контекстное меню, происходит удаление текущего графика. Есть минутное видео демонстрирующее проблему.

В СД уже два месяца молчок по этой проблеме. Может кто-то уже обнаружил и поборол проблему своими силами, подскажите в чем может быть причина.


Файлы:
 

При изменении параметров советника, по новой срабатывает OnInit хотя панель уже создана, она не удаляется в DeInit при изменении параметров, так и при изменении таймфрейма, проверяйте данный момент.

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

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---
   static bool START=true;
//---
   if(START)
   {
      if(!dialog.Create(...........))return(INIT_FAILED);
      START=false;
   }
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
   if(reason!=REASON_CHARTCHANGE && reason!=REASON_PARAMETERS)
   {
      dialog.IniFileSave();
      dialog.Destroy(reason);
   }
   Comment("");
}
 
Alexey Valeev:

При изменении параметров советника, по новой срабатывает OnInit хотя панель уже создана, она не удаляется в DeInit при изменении параметров, так и при изменении таймфрейма, проверяйте данный момент.

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

В МТ5 все работает нормально, без этих проверок, поэтому подумал, что проблема в самой СБ.

Спасибо за подсказку.

 
Vasiliy Pushkaryov:

В МТ5 все работает нормально, без этих проверок, поэтому подумал, что проблема в самой СБ.

Спасибо за подсказку.

Хотя, видимо, все-таки напортачили в СБ. Ваше решение подойдет, если какие-то статичные данные на панели. У меня отображается некоторая информация из свойств советника, поэтому такой обход не отобразит измененные данные на панели. Тут, конечно, хорошо бы, чтобы метод Destroy() полностью корректно удалил панель, и в OnInit() произошла опять по новой инициализация. Скорее всего, ошибка в методе Destroy().
 
Vasiliy Pushkaryov:
Хотя, видимо, все-таки напортачили в СБ. Ваше решение подойдет, если какие-то статичные данные на панели. У меня отображается некоторая информация из свойств советника, поэтому такой обход не отобразит измененные данные на панели. Тут, конечно, хорошо бы, чтобы метод Destroy() полностью корректно удалил панель, и в OnInit() произошла опять по новой инициализация. Скорее всего, ошибка в методе Destroy().

Посмотрите данный комментарий

 
Alexey Valeev:

Посмотрите данный комментарий

О-о. Это оно ). Спасибо Вам и Карпутову.
Причина обращения: