当我尝试启动一个消息框时(通常是为了通知一个异常,但是我尝试仅从表单中启动一个消息框),该程序似乎停滞了,除了关闭它,我无法单击其他任何东西,但必须这样做从视觉工作室窗口。

我将问题的范围缩小到与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();
    }


调用堆栈显示它在某些外部代码上,在我展开时​​,它似乎在“将”消息框“绘制”到屏幕上,但似乎被某种东西挡住了?如果程序暂停,则表明正在执行的操作返回的是NEXT行,如下所示:

    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;
        }
    }


不太确定发生了什么,但是非常感谢任何帮助,谢谢。

最佳答案

该消息框将在那里,但在您的表单下,您将看不到它。
尝试这个 :

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


出现消息框时,它可能覆盖了图片,从而引发了绘画事件。在paint事件中,有一个对Invalidate()的调用,该调用再次引发了paint事件,这将再次调用Invalidate(),这又引发了paint事件,这将继续并使您的表单冻结。

从paint事件中删除Invalidate()。

关于c# - 消息框未显示在Winforms应用程序C#中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39387630/

10-16 04:23