| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Скрытие формы вместо удаления |
| Автор: XavierElf 9.4.2007, 09:33 |
| Проблема состоит в следующем: у меня есть некая форма содержащая лист-бокс, который отображает сообщения обмена с сервером. Она(эта форма) создаётся с началом работы приложения и должна заканчивать свою работу с завершением работы приложения. Большую часть времени она скрыта, однако в лист-бокс постоянно передаётся вся информация об обмене с сервером. Периодически её можно вызывать из меню приложения, однако, после того, как необходимость в ней пропадает, её необходимо не удалить, а скрыть, чтобы не терять всю информацию из лист-бокса. Хранить эту информацию в массиве я не хочу, так как она может вырасти до довольно большого размера... Мне нужно, чтобы по нажатию "креста" в системном меню или комбинации <Alt>+<F4>, форма скрывалась. Как это можно реализовать? |
| Автор: Naum 9.4.2007, 09:55 |
| Пишешь в событии Closing этой формы пишешь e.Cancel = true; this.Hide(); |
| Автор: XavierElf 9.4.2007, 10:27 | ||
| Так, теперь не получается закрыть приложение... Сделал так:
Однако после этого программа начала закрываться только после второго клика по "кресту". |
| Автор: enginer 9.4.2007, 14:59 | ||||
| не очень красиво но 100% работает Главная форма
Дочерняя форма
|
| Автор: XavierElf 9.4.2007, 16:50 |
| Это я в самом начале пробовал - не катит... У меня кстати сообщением выше твоего написан практически аналогичный код, если учесть, что вместо "глобальной переменной" я использую свойство типа "get". Впрочем проблему я всё-таки решил, использовав вместо Show() метод ShowDialog()... Только не устраивает, что диалог модальный... Если кто-нибудь знает, как всё-таки можно решить мою проблему без модального диалога - напишите плз... А пока вопрос решён... |
| Автор: Hurricane 10.4.2007, 07:59 | ||||
А если вот так?
Во второй форме - просто прячем ее вместо закрытия:
Чтобы было совсем красиво - было бы хорошо передавать FormClosing событие из второй формы в первую (основную), а та уже бы решала, что нужно сделать, например - form2.Hide(); Еще красивее - делается отдельный класс-менеджер, который управляет Hide/Show второй формы. Но это уже к вопросам дизайна. В C++ часто так и делается - где-то есть auto_ptr<CMyDialog> m_pDialog, в конструкторе (или по первому обращению, или когда надо) - создается объект немодального диалога, и дальше он прячется/показывается когда надо. В деструкторе родительского класса он уничтожается, с соответствующим закрытием окна. |
| Автор: enginer 10.4.2007, 12:58 |
| не могу понять, что именно "не катит". код проверен, свое отрабатывает как надо. безусловно общие черты с твоим кодом есть, но я просто состряпал примитив для проверки. короч все работает. |