Проблемы с onFormClosing в c # - PullRequest
       4

Проблемы с onFormClosing в c #

2 голосов
/ 24 августа 2011

Я пытаюсь реализовать некоторый код, который спрашивает, хочет ли пользователь выйти из приложения, которое я создал.

Это на c # и является приложением формы Windows.

На этой неделе у меня было очень мало сна, и я никак не могу разобраться с событием onFormClosing. Могут ли некоторые дать мне точный код, который я должен использовать, чтобы код выполнялся, когда пользователь нажимает кнопку закрытия («х» в правом верхнем углу).

Пожалуйста, найдите в своем сердце помощь, придурок, лишенный сна.

Ответы [ 6 ]

3 голосов
/ 24 августа 2011

Дважды щелкните событие формы FormClosed на вкладке событий окна Свойства в конструкторе.

Событие FormClos<b>ing</b> позволяет предотвратить закрытие формы, установив e.Cancel = true.

3 голосов
/ 24 августа 2011

Ну, событие называется FormClosing и его можно отменить. Подпишитесь на него, делайте свои вещи и дайте пользователю закрыть свою форму. Это событие вызывается, если используется кнопка «x» или вы закрываете форму самостоятельно.

Вы можете подписаться на нее в конструкторе, выделив форму и посмотрев на вкладке событий окна свойств, как говорит SLaks, затем дважды щелкните по ней. Вам не нужно делать ничего особенного, чтобы справиться с кнопкой «x».

1 голос
/ 24 августа 2011

Самый простой способ - активировать форму в конструкторе и найти событие FormClosing в окнах свойств, а затем просто дважды щелкнуть событие.

Тогда просто сделайте следующее:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (e.CloseReason == CloseReason.UserClosing)
        {
            var result = MessageBox.Show("Are you sure you want to exit?", "Exit", MessageBoxButtons.YesNo);
            if (result != System.Windows.Forms.DialogResult.Yes)
            {
                e.Cancel = true;
            }
        }
    }

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

0 голосов
/ 24 августа 2011

Вы можете добавить обработчик событий вручную.Пример добавления обработчика событий в конструктор:

public frmMain()
{
   InitializeComponent();
   FormClosing += frmMain_FormClosing;
}

private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
    //your code
}
0 голосов
/ 24 августа 2011
public Form1()
    {
        InitializeComponent();
        this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
    }

    void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (MessageBox.Show("Are you sure that you wan't to close this app", "Question", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
            e.Cancel = true;
    }

Надеюсь, это поможет

0 голосов
/ 24 августа 2011

Сделайте, извлеките вашу форму из System.Windows.Forms.Form и поместите это переопределение:

protected override void OnFormClosing(CancelEventArgs e)
{
    if (bWrongClose)
    {
        bWrongClose = false;
        e.Cancel = true; // this blocks the `Form` from closing
    }
    base.OnFormClosing(e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...