Как закрыть .Net форму из ее PreFilterMessage ()? - PullRequest
0 голосов
/ 22 октября 2008

Я фильтрую сообщения, которые приходят в форму с PreFilterMessage, как это:

print("code sample");

 public bool PreFilterMessage(ref Message m) 
 {
     if (m.Msg == WM_KEYDOWN && (int)m.WParam == VK_ESCAPE)
     {
         this.Close();
         return true;
     }
     return false;
 }

print("code sample");

но дело в том, что форма закрывается только в первый раз. После повторного открытия формы она больше не будет закрываться нажатием ESC.

Как мне это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 22 октября 2008

Я не знаю, соответствует ли это тому, что вы делаете. Я обычно устанавливаю Form.CancelButton на кнопку закрытия или отмены в моей форме, и она автоматически вызывает кнопку OnClick, когда пользователь нажимает клавишу Esc на клавиатуре.

0 голосов
/ 24 октября 2008

По MSDN

Два условия, когда форма не расположена при закрытии, это когда (1) она является частью приложения с интерфейсом с несколькими документами (MDI), а форма не отображается; и (2) вы отобразили форму, используя ShowDialog. В этих случаях вам нужно будет вызвать Dispose вручную, чтобы пометить все элементы управления формы для сбора мусора.

Если вы действительно показали свою форму, используя ShowDialog(), то вызов Close() не удалит вашу форму. Вы все еще могли бы открыть его позже, и, вероятно, это то, что вы делаете. Я подозреваю, что вы могли прервать PreFilterMessage(), когда впервые закрыли его. Вы проверили, работает ли цикл обработки сообщений? Или вы должны на самом деле сделать this.Visible = false; или Control.Hide,

Когда метод Close вызывается в форме, отображаемой как немодальное окно, вы не можете вызвать метод Show, чтобы сделать форму видимой, поскольку ресурсы формы уже были освобождены. Чтобы скрыть форму, а затем сделать ее видимой, используйте метод Control .. ::. Hide.

так как вам нужно «открыть» это позже. Если вы действительно ожидаете, что форма будет удалена, а потом покажете новый экземпляр, то вручную закройте команду dispose после закрытия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...