2013-03-19 3 views
0

Согласно документу MSDN, операция закрытия в форме, показанной с ShowDialog(), должна приводить к скрытию формы. Последующие вызовы ShowDialog() будут отображать форму.Диалоговое окно делает больше, чем просто скрывается при закрытии

Это, похоже, не так. У меня есть форма с древовидным надзором. Статусы проверки сохраняются между вызовами ShowDialog(), но любое расширение узла, которое пользователь выполнил, возвращается к состоянию по умолчанию. Кроме того, событие Load также выполняется каждый раз. Поэтому кажется, что он делает больше, чем просто «скрывает» форму. Кто-нибудь знает, что случилось?

Thanks

+2

Посмотрим, пожалуйста, код! Бьюсь об заклад, вы воссоздаете форму вместо повторного использования экземпляра. –

+0

Похоже, что вы неправильно связали мероприятие, можете ли вы показать, какой у вас код в отношении проблем, о которых вы сообщаете? – MethodMan

+0

Это нормальное поведение. Winforms способен повторно создавать собственные окна из сохраненного состояния в элементах управления. Но TreeView сложно, у него слишком много состояний, связанных с ним. Winforms не пытается сохранить состояние узлов. Таким образом, он восстановится, когда все узлы снова рухнут, когда он снова создаст собственное окно. –

ответ

1

Я сам испытал эту проблему. По какой-то причине вызов Form.Hide или установка visible = false в модной форме вызовет Form.Close хотя бы в некоторых случаях. Чтобы обойти это, я устанавливаю непрозрачность на ноль. Вместо этого вы также можете использовать Form.Show.

Это несколько интуитивно, если вы представляете себе поведение модального диалога. Он блокирует родительское окно. Поэтому, если вы спрячете его, не будет активного окна для взаимодействия с пользователем. FWIW, я думаю, что поведение должно было состоять в том, чтобы родитель снова стал активным. Это не всегда так.

+0

Если вы установите непрозрачность на 0, не будет ли форма «быть там» и все еще захватывать события и прочее, так как вы не сможете щелкнуть по ней? (это интересная вещь ... Я действительно не знаю, что происходит) –

+0

@nekizalb Да, действительно. В моем конкретном случае у меня было несколько окон, поэтому это не было проблемой. Однако в зависимости от того, что именно делает OP, это может быть проблемой, которая требует от них большей работы (например, использование альтернативного решения). –

Смежные вопросы