消息框未显示在 winforms 应用程序 c# 中
messagebox not showing in winforms application c#
当我尝试启动一个消息框(通常是为了通知异常,但我尝试只从表单中启动一个)时,程序似乎停止了,我无法单击任何东西,只能关闭它但是它必须从 visual studio window.
完成
我已将问题缩小到与 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();
}
调用堆栈显示它在一些外部代码上,展开后在我看来它是 'painting' 屏幕上的消息框,但似乎被什么东西阻止了?如果程序暂停,它会显示要执行的下一行是当它正在执行的 returns 时,如下所示的示例:
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);
当消息框出现时,它可能会覆盖图片,从而引发绘画事件。在绘画事件中,调用 Invalidate() 再次引发绘画事件,这将再次调用 Invalidate() 再次引发绘画事件,这将继续并使您的表单看起来冻结。
从绘画事件中删除 Invalidate()。
因为这是该主题中查看次数最多的问题,所以这是一个真正可行的解决方案。只需填写所有 MessageBox 参数,例如
MessageBox.Show(index.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
我遇到了同样的问题,我通过从表单调用消息框解决了这个问题:
而不是调用
System.Windows.MessageBox.Show("test","test");
通话
System.Windows.Forms.MessageBox.Show("test","test");
希望对您有所帮助
当我尝试启动一个消息框(通常是为了通知异常,但我尝试只从表单中启动一个)时,程序似乎停止了,我无法单击任何东西,只能关闭它但是它必须从 visual studio window.
完成我已将问题缩小到与 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();
}
调用堆栈显示它在一些外部代码上,展开后在我看来它是 'painting' 屏幕上的消息框,但似乎被什么东西阻止了?如果程序暂停,它会显示要执行的下一行是当它正在执行的 returns 时,如下所示的示例:
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);
当消息框出现时,它可能会覆盖图片,从而引发绘画事件。在绘画事件中,调用 Invalidate() 再次引发绘画事件,这将再次调用 Invalidate() 再次引发绘画事件,这将继续并使您的表单看起来冻结。
从绘画事件中删除 Invalidate()。
因为这是该主题中查看次数最多的问题,所以这是一个真正可行的解决方案。只需填写所有 MessageBox 参数,例如 MessageBox.Show(index.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
我遇到了同样的问题,我通过从表单调用消息框解决了这个问题:
而不是调用
System.Windows.MessageBox.Show("test","test");
通话
System.Windows.Forms.MessageBox.Show("test","test");
希望对您有所帮助