Обработчик событий при нажатии кнопки «Закрыть» в форме окна - PullRequest
3 голосов
/ 26 марта 2012

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

public void newWindow(){

      NewForm nw = new NewForm();
      nw.ShowDialog();
      if(nw.isClosed){
       do something
   }

}

это возможно?

Ответы [ 3 ]

5 голосов
/ 26 марта 2012

Если вы используете .ShowDialog (), вы можете получить результат через свойство DialogResult.

public void newWindow()
{
    Form1 nw = new Form1();
    DialogResult result = nw.ShowDialog();
    //do something after the dialog closed...
}

Тогда в ваших обработчиках кликов в Form1:

private void buttonOk_Click(object sender, EventArgs e)
{
     this.DialogResult = DialogResult.OK;
}

private void buttonCancel_Click(object sender, EventArgs e)
{
     this.DialogResult = DialogResult.Cancel;
}

Если вы не хотите открывать новую форму в виде диалога, вы можете сделать это:

public void newWindow()
{
    Form2 nw = new Form2();
    nw.FormClosed += nw_FormClosed;
    nw.Show();
}

void nw_FormClosed(object sender, FormClosedEventArgs e)
{
    var form = sender as Form2;

    form.FormClosed -= nw_FormClosed; //unhook the event handler

    //you can still retrieve the DialogResult if you want it...
    DialogResult result = form.DialogResult;
    //do something
}
1 голос
/ 26 марта 2012

Вам следует взглянуть на событие FormClosing или, так как вы используете ShowDialog, вы можете сделать что-то подобное. Вы также можете изменить DialogResult, который возвращается в событии FormClosing.

DialogResult dr = nw.ShowDialog();
if (dr == DialogResult.Cancel)
{
    //Do Stuff
}
0 голосов
/ 26 марта 2012

Вы почти у цели!

Вам не нужно if(nw.isClosed), строка do something будет выполнена только тогда, когда nw закроется

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

NewForm nw = new NewForm();
nw.ShowDialog();
var x = nw.Property1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...