C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Открытие формы из модального окна, Cannot change Visible in OnShow or OnHid
** Pan-SQL
Отправлено: 06.10.2005, 10:56


Не зарегистрирован







Здравствуйте коллеги! Очень необходима ваша помощь в решении следующей задачи: Например, приложение имеет 3 формы (Form1, Form2 и Form3). Форма Form2 является модальным окном (открывается методом ShowModal()), Главная форма (Form1) содержит кнопку (Button1). При нажатии на эту кнопку открывается 3 форма (Form3), а первая (Form1) скрывается, вот ее код:

Form3->Show();
Form1->Hide();

Также форма Form1 содержит еще одну кнопку (Button2), которая открывает модальную форму. Модальная форма (Form2) тоже содержит кнопку (ButtonModal1). При нажатии на нее модальная форма должна закрываться, должна открыться 3 форма (Form3), а первая (Form1) должна скрыться, вот ее код:

Form2->Close()
Form3->Show();
Form1->Hide();

Проблема в следующем: если форму Form2 открывать немодальным способом, то все работает нормально, когда она открыта модально, при нажатии на кнопку ButtonModal1 форма Form3 открывается и возникает исключение: Cannot change Visible in OnShow or OnHide. Кто когда-либо сталкивался с подобной проблемой, поделитесь опытом. Заранее благодарен.

AVC
Отправлено: 06.10.2005, 11:35


Ветеран

Группа: Модератор
Сообщений: 1583



Заблуждаетесь. Ошибка у вас проекте. Прикладываю реализацию описанных вами форм — все работает.

Замечания
- закрыв Form3 — теряете контроль над приложением
- судя по все возрастающему числу проблем, с которыми вы сталкиваетесь у вас ошибка в логике построения приложения (плохо определены правила что чем и как управляет). Уж если так хочется — сделайте централизованный диспетчер форм и работайте через него.


User Attached Image Скачать файл
pansql.rar


** Pan-SQL
Отправлено: 06.10.2005, 11:56


Не зарегистрирован







При открытии формы Form2 методом Show() проблем как таковых не ваозникает. Но при открытии этой формы мтодом ShowModal() возникает вышеописаное исключение В чем дело. sad.gif
avc*
Отправлено: 06.10.2005, 12:11


Не зарегистрирован







Наверное хоризма такая smile.gif
В приложенном проекте при нажатиии кнопки Button2 вызывается Form2->ShowModal(); Видели ?
Повторюсь — у меня на компьютере в этом проекте ни каких исключений не возникает

В конце концов пройдитесь отладтчиком. Переменные под экземпляры форм создаются правильно? Сами обработчики не пытаются поставить фокус на скрытые компоненты?
** Pan-SQL
Отправлено: 06.10.2005, 12:47


Не зарегистрирован







Добавьте к вашему проекту Form3. Напишите обработчик для кнопки в Form2:
Form2->Close();
Form3->Show();
Form1->Hide()
Guest
Отправлено: 06.10.2005, 13:17


Не зарегистрирован







Вы поленились даже посмотреть то что я прикрепил. sad.gif
Там есть и Form3 и Close, Show, Hide. Я же писал, что смоделировал задачу в постановке первого поста.
Зачем вы спрашиваете если ответ вас не интересеут?

Вернуться в Вопросы программирования в C++Builder