Как мне ShowDialog на основе выбора MessageBox - PullRequest
1 голос
/ 27 июля 2011

Я использую C # здесь. У меня есть форма, в которой пользователь может выбрать «Да» или «Нет», и если он выберет «Нет», появится окно сообщения с вопросом, уверены ли они. Если они нажимают Нет, я хочу снова показать форму. Вот мой код:

public void function()
{
    MyForm form = new MyForm();
    if (form.ShowDialog() == DialogResult.No)
    {
        if (MessageBox.Show("Are you sure?",
                            MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            runFinished.Dispose();
            return;
        }
        else
        {
            //Show form again. How??
        }
    }
}

Спасибо всем за помощь!

Ответы [ 4 ]

3 голосов
/ 27 июля 2011

Сделайте так, чтобы кнопка No MyForm выполняла вызов MessageBox. Только если пользователь уверен, вы затем продолжаете закрывать диалоговое окно. Ваш текущий подход к задаче вопроса после закрытия диалога неверен.

Вы можете осуществить изменение, убедившись, что в коде установлено DialogResult, а не свойство DialogResult кнопки Нет. Затем в обработчике кликов для кнопки вы запускаете окно сообщения. Если пользователь подтверждает действие, установите для форм DialogResult значение DialogResult.No.

2 голосов
/ 27 июля 2011

Вызов двух событий в зависимости от того, выбрано ли «нет» или «да» (в MyForm).Например,

void OnNoEvent(object sender, EventArgs e)
{
   if (MessageBox.Show("Are you sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
   {
      this.DialogResult = DialogResult.No;
      this.Close();
   }
}

void OnYesEvent(object sender, EventArgs e)
{
   this.DialogResult = DialogResult.Yes;
   this.Close();
}

Это, вероятно, лучше, чем многократно открывать диалоговое окно.

Тогда код для открытия диалогового окна будет простым.

1 голос
/ 27 июля 2011

Существует стандартное средство: Form.FormClosing .

См. Пример: пример

0 голосов
/ 27 июля 2011

Может быть, я что-то здесь упускаю, но почему бы не использовать цикл while?

public void function()
{
    MyForm form = new MyForm();

    while(form.ShowDialog() == DialogResult.No)
    {
        if (MessageBox.Show("Are you sure?",
                             MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            runFinished.Dispose();
            return;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...