繁体   English   中英

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

[英]messagebox not showing in winforms application c#

当我尝试启动一个消息框(通常是为了通知异常,但我试图从表单中启动一个)时,程序似乎停止了,除了关闭它之外我无法点击任何东西,但它必须完成从视觉工作室窗口。

我已将问题缩小到与 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 参数,如 MessageBox.Show(index.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);

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

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

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

从绘制事件中删除 Invalidate()。

我遇到了同样的问题,我通过从表单调用消息框解决了这个问题:

而不是打电话

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

称呼

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

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM