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

Я сузил проблему до того, что связано с обработчиком событий pictureBox1_paint, поскольку, когда я удаляю этот код, окна сообщений начинают появляться снова. Вот соответствующий код:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    using (Pen pen = new Pen(Color.Black, 1))
    {
        e.Graphics.DrawRectangle(pen, mRect);
    }
    pictureBox1.Invalidate();
}

Стек вызовов показывает, что он находится в каком-то внешнем коде, который при расширении мне кажется, что он «рисует» окно сообщения на экране, но, кажется, что-то задерживается? Если программа приостановлена, она показывает, что СЛЕДУЮЩАЯ строка будет выполнена, когда она вернется из того, что она делает, пример, показанный ниже:

private void button2_Click(object sender, EventArgs e)
{
    if (GlobalPlot != null)
    {
        resize = ExpandToBound(GlobalPlot.Size, pictureBox1.Size);
    }
    else return;

    try
    {
        PlotPixel(resize);

    }
    catch (System.ArgumentOutOfRangeException index)
    {
        //this is the next line to execute:
        MessageBox.Show(index.Message,"Exception",MessageBoxButtons.OK);
        return;
    }
}

Не совсем уверен, что происходит, но любая помощь очень ценится, спасибо.

3
Mojojojo 8 Сен 2016 в 12:44

3 ответа

Лучший ответ

Окно сообщения будет там, но под вашей формой, где вы его не увидите. Попробуй это :

MessageBox.Show(this, index.Message,"Exception",MessageBoxButtons.OK);

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

Удалите Invalidate () из события рисования.

1
GuidoG 8 Сен 2016 в 11:00

У меня была такая же проблема, и я решил ее, вызвав окно сообщения из форм:

Вместо звонка

System.Windows.MessageBox.Show("test","test");

Вызов

System.Windows.Forms.MessageBox.Show("test","test");

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

1
Sam 6 Янв 2019 в 09:33

Поскольку это наиболее просматриваемый вопрос в этой теме, вот настоящее рабочее решение. Просто заполните все параметры MessageBox, например MessageBox.Show (index.Message, «Exception», MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);

3
Dyselix 31 Окт 2018 в 13:24