每次显示消息框时运行代码

时间:2013-08-09 08:09:51

标签: c# forms messagebox window-handles

我有一个相当大的C#Forms应用程序。有一个MdiParent控制着很多MdiChild。我还创建了一个“加载屏幕”,当用户打开需要一些加载时间的表单时,它会始终跳到顶部。

问题是,如果有异常,我通常在catch中使用类似Messagebox.Show(ErrorNumber)的东西,因此用户知道发生了什么。当我的加载屏幕打开,并显示一个消息框时,无法单击它。

我想调整一下。有没有办法将函数放在我的MdiParent(或其他地方,只要它只是一次)所以它会在显示MessageBox时运行代码?这样,我可以轻松调用一个函数来关闭我的加载屏幕。可能还有其他解决方案,但我想了解更多有关窗口把手,挂钩等的信息。

2 个答案:

答案 0 :(得分:1)

我认为这是一个糟糕的主意。 Imho,而不是练习这样的伏都教,你应该解决真正的问题,这是你处理异常的方式。固定代码可能如下所示:

catch(Exception ex)
{
    CloseLoadingScreen();
    MessageBox.Show(ErrorNumber);
}

我的意思是,你可以自由地探索窗口钩子和东西,只是你选择了一个糟糕的场合。

编辑:我认为重构代码的正确方法是实现一个实体,其唯一目的是通知用户重要的事情。该实体将具有关于加载屏幕状态和其他相关内容的知识,并且根据该上下文将执行一组动作(显示消息框,写入日志,关闭加载屏幕等)。然后,您可以在需要发送通知时使用此实体。这样,无论何时想要更改通知逻辑,都不需要遍历所有catch语句。它可以成为单一的,以便于访问。

答案 1 :(得分:0)

您可以订阅Application.EnterThreadModal活动。

每次您的应用程序即将进入模态时都会引发此问题(例如,因为它将要显示一个消息框)。

请注意,还有相应的Application.LeaveThreadModal事件。