我可以显示一个MessageBox但仍然使用表格吗?

问题描述

有可能当我使用时:

MessageBox.Show("hello");

..仍然使用表单,但是MessageBox像第二个窗口一样打开了吗? 因为当前,当我显示MessageBox时,我需要先单击“是”或“否”,然后我才能再次使用表单。

解决方法

是的,可以!

如果只想显示一个MessageBox,不关心它会发生什么,又不想等到它关闭,则可以在一个单独的线程上启动它。最简单的方法是使用Task.Run()

这是一个例子:

private void button1_Click(object sender,EventArgs e)
{
    Task.Run(() => MessageBox.Show("hello"));

    // The remaining code will run without waiting for the MessageBox to be closed.
}

一些值得一提的笔记:

  • 仅将其用于不关心结果的简单消息框。如果您想根据结果采取行动并执行某些操作(在主线程上),则事情会变得有些棘手。

  • 您将无法将MessageBox保持在表单顶部。与表单互动后,它将排在最前面。如果您需要将MessageBox放在顶部,并且仍然能够与表单交互,那么在这种情况下,自定义MessageBox(即表单)会更好,因为您可以设置Owner property使其保持在顶部。

,

不。应用程序焦点将一直保留在“消息框”上,直到将其关闭。根据{{​​3}}:

这是一个模式窗口,阻止应用程序中的其他操作,直到用户关闭它为止。

可以要做的是创建自己的表单,将其样式设置为标准的消息框,然后在其实例上使用.Show()功能显示该表单:>

var messageBox = new MyCustomMessageBox("hello");
messageBox.Show();

如果您希望功能使用相同,甚至可以在自定义表单中添加一个static方法来对其进行封装:

public static void Show(string message)
{
    new MyCustomMessageBox(message).Show();
}

尽管我不建议您致电自定义表单MessageBox,但这只会引起混乱。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...