问题标签 [formclosing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4619 浏览

c# - 延迟应用程序关闭最佳实践?

在用户选择退出 WinForms 程序后,有没有比这更好的方法来处理做某事的任务:

[编辑 1:回应 'NoBugz 的评论]在这种情况下,表单上没有 ControlBox,并且有理由在用户选择关闭表单时发生的事情中设置一层间接性 [/edit 1]

[编辑 2:响应格林威治标准时间 +7 18:35 1 月 20 日的所有评论]也许使用淡出 MainForm 是一个简单的说明,说明您在关闭应用程序时可能想要做什么:用户无法与之交互:不言而喻,这与用户终止应用程序的决定有关。[/编辑 2]

(使用某种形式的线程?)(对多线程应用程序的影响?)(这段代码“难闻”吗?)

摘要:在一个非常标准的 WinForms 应用程序中(一个 MainForm 在 Program.cs 中以标准方式启动):在 MainForm 的 FormClosing 事件处理程序中:

  1. 立即退出(触发默认行为:关闭 MainForm 并退出应用程序)如果:

    一种。CloseReason 是任何其他 CloseReason.ApplicationExitCall

    湾。如果一个特殊的布尔变量设置为 true,或者

  2. 如果没有立即退出:取消对 FormClosing 的“第一次调用”。

  3. 然后用户通过 MessageBox.Show 对话框选择退出应用程序或取消:

    一种。如果用户取消,当然,应用程序保持“原样”。

    湾。如果用户选择“退出”:

    1. 将特殊的布尔标志变量设置为 true

    2. 运行一个 Timer 来做一些特殊的事情。

    3. 当 Timer 代码中的内部测试检测到“特殊内容”已完成时,它会调用 Application.Exit

0 投票
2 回答
42433 浏览

vb.net - VB.NET:中止 FormClosing()

我有一个要在应用程序关闭时运行的代码片段。所以,我使用FormCLosing了事件。但现在我想放置一条退出确认消息。就像,如果用户点击 Exit( X) 按钮,会有一个提示,如果他点击 NO,那么应用程序将不会关闭并恢复到之前的状态。

FormClosing现在我发现使用事件很难实现。因为无论用户点击什么按钮,它都会被执行。有什么补救措施吗?

我的意思是,我需要一个甚至喜欢ExitButtonPressed()..

0 投票
3 回答
4633 浏览

c# - 如何防止 MDI 主窗体从 MDI Child 关闭

我有一个 MDI 主窗体。我在上面托管了一个表单,我希望它在关闭之前显示一个消息框(询问用户是否保存更改)。

到目前为止一切顺利,但是我发现关闭 MDI 主窗体不会引发 MDI 子 FormClosing 事件。我想我会在 MDI 主的 FormClosing 事件(确实会引发)中调用MdiChild .Close() 。这个接缝可以工作,但它确实会导致问题......

在我显示的消息框中,我让用户保存更改,而不是保存更改并取消关闭。通常这工作正常,但我似乎无法找到取消 MDI 主的 FormClosing 事件的方法。有没有一种优雅的方式来做到这一点?

编辑:我通过抛出异常(当用户决定取消关闭程序时)解决了这个问题,该异常在 MDI 主的 FormClosing 事件中被捕获。通过这种方式,我知道何时必须取消 MDI 主的 FormClosing 事件,并且这个接缝可以正常工作......但是我无法相信这个“​​hax”是这样做的唯一方法。肯定有更好的方法吗?

0 投票
2 回答
1030 浏览

c# - C# 表单不会在 FormClosing 事件上关闭

在我将以下代码添加到我的代码隐藏后,我的表单没有关闭。

0 投票
9 回答
1840 浏览

c# - 如何在 C# 中取消挂钩事件处理程序

我正在开发具有多种形式的 C# 应用程序。
当我打开其中一个表单时,我会添加一个事件侦听器,如下所示:SomeClass.MotionCompleted += new EventHandler(HandlerMethod);. MotionCompleted 事件是一个静态事件

我注意到,在关闭此表单后,当事件发生时仍会调用 HandlerMethod,这会导致异常,因为它会尝试更新表单上不再存在的内容。

即使表单不再存在,事件监听器如何存在并响应事件?一旦 form.Close() 或 this.Close() 被调用,不应该自动解除事件监听器的钩子,以便它们不再被调用吗?

0 投票
6 回答
12716 浏览

c# - C# MDI Parent 检测 MDI Child 何时关闭?

我试图在 MDI 父级上检测我的 MDI 子窗体何时关闭,并做出相应的反应。MDI 父级在 MDI 子级关闭之前不应执行任何操作。这是我的代码,我不确定我做错了什么,但是我添加的表单关闭事件方法永远不会被调用......

以下代码位于 MDI 父类中,如果不明显的话。

谢谢你的帮助!

0 投票
3 回答
1712 浏览

c# - C# 将代码添加到 FormClosing 事件会禁用 MdiParent 上的 X

我有两个后台线程和一个线程来处理在我的 WinForms 应用程序上运行的最小化。当程序关闭时,我使用这种方法。

labelsUpdaterThread 和 printNotifyThread 一直在运行。正如您可能猜到的那样,MinimizeThread 仅在父窗体最小化时运行。这是我的问题:

当我在上面的方法中调用 thread.abort 方法时,我的 MdiParent 表单右上角的“X”不做任何事情。点击它没有效果。

When the thread.abort methods are NOT called in my above method, closing the MdiParent will sometimes throw exceptions because the Threads are still trying to access resources on the MdiParent that are no longer available, even though they are background threads!

I'm unsure as to why this is happening, doesn't make much sense to me. Thanks in advance for any help!

0 投票
4 回答
21204 浏览

c# - 如何防止用户关闭我的 C# 应用程序?

如何在 C# 中制作未封闭的应用程序?我想禁用表单的“X”按钮并阻止 Windows 任务管理器关闭它。

我知道防止表单关闭的一种方法是处理FormClosing事件,但是如何防止任务管理器关闭它呢?

0 投票
4 回答
15035 浏览

.net - winforms 应用程序中的窗口关闭事件

我希望在用户关闭 winforms 应用程序中的表单窗口时提示用户保存数据。如果他们单击表单右上角的红色框,我无法弄清楚如何向用户触发提示。

我的应用程序当前有一个布尔标志,在 textchanged 事件上设置为 True。所以我只需要检查红色框触发的任何事件中的布尔值。

有什么建议吗?

0 投票
2 回答
2566 浏览

c# - c#如果隐藏表单有未保存的更改,则取消关闭应用程序

在搜索 google 和 stackoverflow 之后,我找不到对我的情况有帮助的答案。我有一个带有开始菜单(表单)的应用程序。当用户按下(任何)表单的 X(关闭)时,我重新加载开始菜单。现在,当该(菜单)表单关闭时,如果用户按下取消,我想检查并通知用户任何现在隐藏的表单是否处于编辑模式(有或没有未保存的更改)我想显示该表单并阻止应用程序关闭。现在我的问题是如何阻止应用程序停止在其他表单的代码中。我重写了调用 this.close 的子窗体的 dispose 方法,因此显示了 ok/cancel 消息框,但在 MB 之后,开始菜单无论如何都会关闭,从而停止程序。

编辑:好的,这里的部分代码按被调用的顺序排列。我哪里错了?

然而这不起作用,应用程序只是关闭。

随机形式的关闭事件处理程序

编辑:@cody gray 更改 onclose 和 clean_form 仍然没有效果,(不应该显示子窗体的 Closing 事件中的消息框吗?因为它没有)