Cannot focus a disabled or invisible windows

I’m getting an error when running my compiled program. I’ve taken every precaution I can think of to prevent the error such as enabling forms before I hide or focus them. The application shows a DimmerForm (grey fade overlay) and then a NewFileForm on top of the overlay. The NewFileForm does its stuff and determines the file that is to be made and creates a new tabsheet in the page control on the MainForm and shows the newly created tab sheet. All this works so far (I can break before the NewFileForm closes and any error occurs and see that the tab sheet has been created and shown successfully). The NewFileForm then closes, which is again working fine.

The error happens when anything then tries to set the focus back to the MainForm . Hiding the DimmerForm , or clicking on the MainForm , or setting focus to the MainForm through code all cause the error message to occur. Placing the code in a < try , except , end >doesn’t prevent the error message either. I’ve searched every other method in the code that could possibly be triggered by the focusing of the MainForm and none are entered before the error occurs (so can’t be causing it).

I wrote pretty much the exact same code in a previous version of my application and then decided to restructure it all from the ground up. The previous version of the application worked without a hitch with the form focusing.

Here is the code to open up the NewFileForm :

Доброго времени суток, коллеги.
Замечен такой баг: при открытии закладки "Расписание" в разделе задач иногда вываливается ошибка "Cannot focus a disbled or invisible window". При этом открыто еще окно напоминаний, которое обновляется по таймеру раз в несколько минут и если оно было закрыто, то открывает. Однозначно воспроизвести последовательность действий, приводящих к ошибке, не удалось — ошибка возникает далеко не всегда.
Я думаю, что ошибка связана с окном напоминаний, потому как заметил, что при открытии расписания за месяц Террасофт подвисает, загружая одно ядро. Возможно в это время срабатывает обработчик события таймера, в котором обновляется содержимое окна.
Кто-нибудь сталкивался с подобным?

Читайте также:  Asus p7h55 m оперативная память

У меня такой же вопрос

Riptor, какая версия бинарных файлов?
Подобная ошибка ранее устранялось в версии 3.4.1 и выше.

  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Цитировать

"Бондарь Наталия" написал: Riptor, какая версия бинарных файлов?

Можете рассказать, почему такая ошибка возникает и возможно ли обойти ее появление? Переход с ветки 3.3 на 3.4 не тривиален.

  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Цитировать

Riptor,

напишите, пожалуйста, на support@terrasoft.ru — мы предоставим последнюю версию бинарных файлов 3.3.2.

Необходимо проверить, воспроизведется ли ошибка на последней версии.

У меня следующая проблема. Есть окно, в котором две компоненты FrameGroup. В первом — все необходимые визуальные компоненты (в том числе DataGrid, к которому привязан Dataset). Во втором — ProgressBar. После нажатия пользователем любой кнопки (например, Печать), первый FrameGroup прячется и показывается второй, на котором показывается прогресс выполнения. Проблема появляется при вызове Dataset.GoToFirst(). Появляется ошибка "Cannot focus a disabled or invisible window". Самое интересное, что на тестовой системе всё работает, но после переноса на живую показывается вышеописанная ошибка. Кто-нибудь знает в чём может быть проблема?

У меня такой же вопрос

Наверное грид пытается "отрисоваться", когда Вы программно переходите на первую запись.
Может лучше не прятать первый FrameGroup, а просто сделать ему IsEnabled = false ?

Если все-таки требуется прятать, попробуйте отключить события датасате:

  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Цитировать

Для этих целей лучше использовать отдельное окно wnd_ProcessingProgress.

  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Цитировать

Спасибо! DisableEvents помогло. wnd_ProcessingProgress не всегда можно использовать. Есть случаи, когда на окне все дёргаетьса (например большая функция Prepare). Я не хочу ето показывать пользователю, так как ето его роздражает. Вместо етого я показываю прогресс.