Отключить ALT + F4, но разрешить закрытую форму Code, Breaure Code.UserClosing не помогает

StackOverflow https://stackoverflow.com/questions/2643712

Вопрос

Я хочу, чтобы форма не будет закрыта, делая Alt. + F4. но если Application.Exit() или this.Close называется из той же форме, его следует закрыть.

Я старался CloseReason.UserClosing Но до сих пор не помогите.

Это было полезно?

Решение

Если вам нужно отфильтровывать Alt. + F4. Только событие (уходя нажав закрывающую коробку, this.Close() а также Application.Exit() вести себя как обычно), тогда я могу предложить следующее:

  1. Установить форму KeyPreviewимущество true;
  2. Проводная форма FormClosing а также KeyDown Мероприятия:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (_altF4Pressed)
        {
            if (e.CloseReason == CloseReason.UserClosing)
                e.Cancel = true;
            _altF4Pressed = false;
        }
    }
    
    private bool _altF4Pressed;
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Alt && e.KeyCode == Keys.F4)
            _altF4Pressed = true;
    }
    

Другие советы

Это очень легко сделать это по установлению SupperkeyPress. имущество в соответствии с Form_keydown. EventHandler, как показано ниже.

        if (e.KeyCode == Keys.F4 && e.Alt)
        {
            e.SuppressKeyPress = true;

        }

С этим вы также можете закрыть свою активную форму, установив свойство SuppresskeyPress в False на тот же EventHandller или любой другой путь.

Capture Alt + F4 Hotkey, настроив кнопку KeyPreview Form к True и переопределении метода OnProcessCMDKEY.

Как вы использовали добрую кожуцию?

Смотрите пример код здесь:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclostion.aspx.

Вам необходимо установить свойство отмены пропущенного объекта FormClizeEventargs, чтобы остановить закрытие формы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top