Обработка кнопки «Отмена» в окне «Да / нет» / «Отмена» в методе FormClosing - PullRequest
3 голосов
/ 10 августа 2009

Я положил Да / Нет / Отмена окна сообщения в FormClosing Метод моей формы. и теперь это текстовое сообщение: Хотите сохранить данные?

Я не профессионал и не знаю, как поступить, если пользователь нажал Отмена Кнопка? Результат нажатия кнопки «Отмена» должен быть следующим: Форма должна оставаться открытой.
Как предотвратить закрытие формы в методе FormClosing ?

Пока что написал:;)

DialogResult dr = MessageBoxFarsi.Show("Do You Want to Save Data?","",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning);

//...
else if (dr == DialogResult.Cancel)
{
    ???
}

Пожалуйста, помогите мне завершить мой код!
Спасибо

Ответы [ 5 ]

11 голосов
/ 10 августа 2009

FormClosing имеет логический параметр, который при значении True при возврате функции отменяет закрытие формы, IIRC.

РЕДАКТИРОВАТЬ: Например,

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) {
    // Set e.Cancel to Boolean true to cancel closing the form
}

Смотрите здесь .

9 голосов
/ 14 июля 2011

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

private void myform_Closing(object sender, FormClosingEventArgs e) 
{
    DialogResult dr = MessageBoxFarsi.Show("Do You Want to Save Data?","",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning)

    if (dr == DialogResult.Cancel) 
    {
        e.Cancel = true;
        return;
    }
    else if (dr == DialogResult.Yes)
    {
        //TODO: Save
    }
}

//now add a default constructor 
public myform()  // here use your form name.
{
    this.FormClosing += new FormClosingEventHandler(myform_Closing); 
}

Простите, если в этом коде есть некоторые ошибки в написании, потому что я не написал его на c # и скопировал сюда вставку. Я просто написал это здесь. :)

7 голосов
/ 10 августа 2009

Вы можете получить что-то вроде следующего:

if(dr == DialogResult.Cancel)
{
    e.Cancel = true;
}
else if(dr == DialogResult.Yes)
{
    //Save the data
}

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

0 голосов
/ 22 августа 2018

Вы можете попробовать это:

if (MessageBox.Show("Are you sure you want to quit?", "Attention!!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) == DialogResult.Yes)
{
   //this block will be executed only when Yes is selected
   MessageBox.Show("Data Deleted", "Done", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
else
{
  //this block will be executed when No/Cancel is selected
  //the effect of selecting No/Cancel is same in MessageBox (particularly in this event)
}

При необходимости то же самое можно сделать для нажатия кнопок No и Cancel, используя DialogResult class

0 голосов
/ 31 июля 2017

вы должны попробовать эту функцию

public DialogResult msgClose(string msg)
{
     return MessageBox.Show(msg, "Close", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
}

и используется вот так.

private void frm_FormClosing(object sender, FormClosingEventArgs e)
{
     if (conn.msgClose("Application close?") == DialogResult.No)
         e.Cancel = true;
     else
     {
         this.Close();
     }
}
...