在winforms应用程序c#中不显示消息框

本文关键字:显示 消息 winforms 应用程序 | 更新日期: 2023-09-27 18:06:14

当我尝试启动一个消息框(通常通知一个异常,但我试图只是从表单启动一个)程序似乎停滞不前,我无法点击任何东西,除了关闭它,但它必须从visual studio窗口完成。

我已经将问题缩小到与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;
    }
}

不太清楚发生了什么,但是任何帮助都非常感谢,谢谢。

在winforms应用程序c#中不显示消息框

因为这是该主题中最受关注的问题,所以这里是一个真正的工作解决方案。只需填充所有MessageBox参数,如MessageBox.Show(指数。Message, "Exception", MessageBoxButtons。好的,MessageBoxIcon。没有,MessageBoxDefaultButton。Button1 MessageBoxOptions.DefaultDesktopOnly);

消息框将在那里,但是在您的表单下,您无法看到它。试试这个:

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

当消息框出现时,它可能会覆盖图片,从而引发绘制事件。在paint事件中,调用Invalidate()再次引发paint事件,该事件将再次调用Invalidate()再次引发paint事件,这将继续并使窗体看起来冻结。

从paint事件中移除Invalidate()

我也有同样的问题,我通过从窗体调用消息框来解决它:

而不是调用

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

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

希望能有所帮助