По MSDN
Два условия, когда форма не расположена при закрытии, это когда (1) она является частью приложения с интерфейсом с несколькими документами (MDI), а форма не отображается; и (2) вы отобразили форму, используя ShowDialog. В этих случаях вам нужно будет вызвать Dispose вручную, чтобы пометить все элементы управления формы для сбора мусора.
Если вы действительно показали свою форму, используя ShowDialog()
, то вызов Close()
не удалит вашу форму. Вы все еще могли бы открыть его позже, и, вероятно, это то, что вы делаете. Я подозреваю, что вы могли прервать PreFilterMessage()
, когда впервые закрыли его. Вы проверили, работает ли цикл обработки сообщений? Или вы должны на самом деле сделать this.Visible = false;
или Control.Hide
,
Когда метод Close вызывается в форме, отображаемой как немодальное окно, вы не можете вызвать метод Show, чтобы сделать форму видимой, поскольку ресурсы формы уже были освобождены. Чтобы скрыть форму, а затем сделать ее видимой, используйте метод Control .. ::. Hide.
так как вам нужно «открыть» это позже. Если вы действительно ожидаете, что форма будет удалена, а потом покажете новый экземпляр, то вручную закройте команду dispose после закрытия