Как вы получаете клавишу ESC, чтобы закрыть диалог в Winforms? - PullRequest
19 голосов
/ 15 мая 2009

Часто при использовании программного обеспечения в наши дни клавиша ESC закрывает диалоговое окно без сохранения изменений, которые я внес. Мне это особенно нравится, потому что, хотя в диалоговом окне может быть кнопка отмены, я не хочу тянуться к кнопке отмены мыши или вкладки. Это хороший чистый способ сказать "Ой, не хотел этого делать!" к программному обеспечению. На самом деле, я нахожусь раздраженным программным обеспечением, которое не реализует эту функцию, и я не могу поверить, что это еще не сделано под капотом Winforms - мне кажется интуитивно понятным ...

Я смотрел на подключение к событию Form KeyPress или на попытку симулировать «Отмена» DialogResult и т. Д. Похоже, есть несколько способов сделать это ...

Итак, вопрос в том, как лучше всего связать клавишу ESC, чтобы закрыть диалоговое окно без сохранения каких-либо изменений?

Любая помощь от тех, кто имеет опыт в этом, очень ценится!

Ответы [ 6 ]

27 голосов
/ 15 мая 2009

Установите свойство CancelButton формы для ссылки на кнопку Отмена.

10 голосов
/ 09 декабря 2011

Для этого, когда у вас нет кнопки отмены, вы можете переопределить processcmdkey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  if (keyData == Keys.Escape)
  {
    this.Close();
    return true;
  }
  return base.ProcessCmdKey(ref msg, keyData);
}
6 голосов
/ 15 мая 2009

Вы также можете установить свойство CancelButton формы для кнопки отмены:

this.CancelButton = this.cancelButton;

В Visual Studio вы можете установить это через Свойства формы, и код будет добавлен в файл Form.Designer.cs

2 голосов
/ 30 апреля 2011

Вы можете сделать это:

button b = new button();
b.click = button_click;
this.cancelbutton = b;


protected void button_click(object sender,eventargs e)
{
    this.close();
}
1 голос
/ 15 мая 2009

В определенной степени это зависит от вашей среды разработки - в .NET встроено (как это было в vb.old), формы имеют свойство «Кнопка отмены» «всякий раз, когда пользователь нажимает клавишу« ESC »."

Для клавиши «ВВОД» имеется соответствующее свойство «AcceptButton».

Из памяти стандартные сообщения и диалоговые окна будут следовать вышеупомянутой логике по умолчанию - хотя, конечно, можно указать кнопку по умолчанию для окна сообщения, где вы не хотите, чтобы что-то происходило, если пользователь не утверждает, что это то, что он хочу сделать.

0 голосов
/ 11 июля 2017
    If e.KeyCode = Keys.Escape Then
        If MsgBox("Are you sure to exit system (Y/N) ?", MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.No Then Exit Sub
        dashboard.Close()

    ElseIf e.KeyCode = Keys.F5 Then
        MessageBox.Show("F5")
    End If

Попробуйте это, ребята. Это для Показывать блок сообщений для подтверждения «да» или «нет» перед закрытием форм. Вы можете добавить этот код в форму внутри формы Event, названной Keydown. Здесь «приборная панель» - это название нашей формы, которая будет закрыта. Этот код показывает вам окно сообщения с кнопками Да или Нет. Если вы выберете «Да», это означает, что он закроет вашу форму. Если вы выберите «Нет», действие будет отменено. Форма остается прежней

...