Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Закрытие родительского модального окна


Автор: BENJ 21.7.2014, 14:01
Уважаемые спецы в vb.net
Возникла глупая проблема.
1. Открывается главное окно программы.
2. Из него вызывается диалоговое модальное окно. Все ОК.
3. Из этого окна вызывается еще одно диалоговое модальное окно. Все ОК.
4. Закрываю последнее окно в обработчике кнопки ОК:
         Me.DialogResult=System.Windows.Forms.DialogResult.OK
         Me.Close()
5. Окно закрывается и одновременно закрывает родителя из которого,
    оно и вызвано было. 
 Вопрос: Почему это происходит и как избежать этого.

Спасибо

Автор: diadiavova 21.7.2014, 14:44
Me.Close здесь лишнее

Автор: BENJ 21.7.2014, 16:13
ничего не помогает. Уже просто тупо попеременно убираю
каждую строчку, ничего не меняется. Дело наверное не в этом.
Проделал эксперимент. Вместо вызова последнего окна, 
вызвал MsgBox("o'k"). Эффект тот же.

Автор: diadiavova 21.7.2014, 18:27
BENJ, мне не приходилось вызывать модальный диалог из  модального диалога, так ч о точно не скажу, но могу предположи ь, что когда  ты пр сваиваешь значение диалогрезульту, то закрываются все модальные окна и присвоенное значение возвращает первое окно. Видимо так задумано, проверь.

Автор: baldina 21.7.2014, 18:42
Цитата(BENJ @  21.7.2014,  14:01 Найти цитируемый пост)
Окно закрывается и одновременно закрывает родителя

а как выглядит код родителя, вызывающий второе окно?

Автор: BENJ 21.7.2014, 21:42
очень просто
dim dlg as new dialog1
if dlg.ShowDialog = Windows.Forms.DialogResult.OK then
............................
end if

Добавлено через 7 минут и 4 секунды
Нашел подобную ситуацию в другой части проекта.
Все работает как часы. Никакой разницы в свойствах форм и настройках
не нашел. Только имена, естественно, другие. Проект разр.
в VS2005. Может быть есть глюки какие-то?

Автор: baldina 21.7.2014, 21:59
т.е. код на месте "............................" не выполняется? и (если, скажем, поставить точку останова) мимо отладчика проскакивает?

Добавлено через 56 секунд
Цитата(BENJ @  21.7.2014,  21:42 Найти цитируемый пост)
глюки

можно попробовать пересоздать код/диалог заново в проекте. но это бубен..

Автор: diadiavova 21.7.2014, 22:34
Цитата(BENJ @  21.7.2014,  22:42 Найти цитируемый пост)
Нашел подобную ситуацию в другой части проекта.
Все работает как часы. Никакой разницы в свойствах форм и настройках
не нашел. Только имена, естественно, другие. Проект разр.
в VS2005. Может быть есть глюки какие-то? 

Не видя кода, чисто умозрительно, вряд ли можно сказать что-то конкретное.

Автор: BENJ 22.7.2014, 13:00
конечно, есть где-то заковыка, причем как всегда, самая примитивная.
Решил создать род. диалог с чистого листа. Скопировал все контролы
со старого и вставил в новый. И.. ничего не изменилось! 
Код выложить по понятным причинам не могу, но организация интерфейса
в принципе стандартная и код тоже.

Спасибо

Автор: BENJ 22.7.2014, 13:45
Нашел!!!
Прежде чем поделиться, хочу добавить что
я программер в с++ и MFC.(чтобы не подумали 
куку-чуку). А теперь что произошло.
Когда было создано новое род. окно и вставлены
контролы со старого, ситуация не изменилась. Но стало ясно,
что, возможно, дело в настройках контролов. Проверил почти все (34!).
Но то что увидел в последних двух чуть со стула не спрыгнул. Кнопка
Cancel выглядела вполне нормально, а следующая кнопка (которая и вызывала
дополнительный диалог для ввода данных) оказалась копией кнопки Cancel.
Т.е. чтобы сохранить размеры и цвет в новой кнопке, я просто скопировал
кнопку Cancel, поменял текст и имя соответственно, НО DialogResult остался
Cancel !!!. Не обратил внимание! Поэтому кнопка срабатывала как Cancel , и
закрывала род. диалог!!. Для себя сделал вывод что при копировании надо внимательно просматривать все настройки нового контрола!

Я благодарю всех участников обсуждения, Вы мне очень помогли!


Спасибо большое!


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)