Как сделать что-то после нажатия кнопки MessageBox, но до того, как этот MessageBox закроется? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть список «проектов» с некоторой информацией в текстовых окнах для каждого проекта.Пользователь может выбрать проект, затем изменить информацию и после этого нажать кнопку «Сохранить».

Если я изменяю выбранный проект без сохранения изменений, появляется окно сообщений Да / Нет:

DialogResult dialogResult = MessageBox.Show(
            "Do you want to save changes ?",
            "Title",
            MessageBoxButtons.YesNo);

if (dialogResult == DialogResult.Yes)
{
    //Click Yes
}
else
{
    //Click No
}    

Я бы обновил весь список проектов (используя свой собственный метод Refresh ()) после нажатия кнопки «Да / Нет», но оставался в MessageBox до тех пор, пока обновление не будет выполнено.

Возможно ли это?

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

Вы можете изменить то, что происходит, в зависимости от того, какая кнопка нажата, с помощью DialogResult

DialogResult dialogResult = MessageBox.Show(@"Some body", @"Title", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
   // do stuff
}
0 голосов
/ 08 февраля 2019

Встроенный класс MessageBox не допускает такого сложного поведения.

Один из способов сделать это - создать собственное окно сообщения.Создайте подкласс Form, добавьте несколько ярлыков и кнопок.Предоставьте доступ к некоторым событиям, таким как YesClicked и NoClicked.

. В основной форме создайте экземпляр своего настраиваемого окна сообщения, подпишитесь на события и вызовите на нем ShowDialog.

После завершения обновления вы можете вызвать Close или Dispose в своем окне сообщений, чтобы закрыть его.

0 голосов
/ 08 февраля 2019

Попробуйте создать собственное окно сообщения.Я прокомментировал код, дайте мне знать, если вам нужно разъяснение

public static class MessageBoxResult
{
    public static int dialogResult;  // <== i use this value to determine what button was pressed
}

// your custom message box form code
public partial class CustomMsgBox : Form
{
    public CustomMsgBox()
    {
        InitializeComponent();
    }


    public void show(string pos0, string pos1, string pos2, string message)  //<=== initializing the message box with the values from your main code
    {
        button1.Text = pos0;
        button2.Text = pos1;
        button3.Text = pos2;
        label1.Text = message;
    }


 // message box events to set the static field incase a button on the custom form was changed
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBoxResult.dialogResult = 0;
        this.Close();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        MessageBoxResult.dialogResult = 1;
        this.Close();
    }

    private void button3_Click(object sender, EventArgs e)
    {
        MessageBoxResult.dialogResult = 2;
        this.Close();
    }
}


//usage
{
    MessageBoxResult.dialogResult = -1;   // <== setting the static field to -1 to mean nothing was pressed
    CustomMsgBox cMsgBox = new CustomMsgBox();
    cMsgBox.show("your message");
    cMsgBox.ShowDialog();
}
0 голосов
/ 08 февраля 2019

Нет, окно сообщения не может этого сделать.Это не предназначено для этого.Он предназначен только для отображения сообщения ... в окне:)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...