修改窗体的关闭(X)行为



我有一个托管数据网格的表单,用户可以从中选择要下载的项目。表单会提示用户检查是否要关闭表单(当他们单击"X"时(,如果要关闭,则任何正在进行的下载都将中止。我用以下方法处理这种行为:

Private Sub OnFormClose(sender As Object, e As FormClosingEventArgs) Handles MyBase.Closing
If not MessageBox.Show("Are you sure to close this application?", "Close", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
e.Cancel = True
Else
<Code to stop the downloads>
End If
End Sub

当用户想要下载的文件完全下载后,我试图自动关闭此表单。目前的行为是让用户手动关闭表单。我正在尝试以下内容:

Private Function downloadSelectedFile(string Address)
Try
fileReader = New WebClient()
fileReader.DownloadFile(New Uri(Address), DestPath)
Me.Close()
Catch ex As Exception
<Exception Handling>
End Try
End Function

现在,当代码到达Me.Close()行时,它会提示用户是否要关闭表单。这不起作用,因为用户并没有真正选择关闭表单。有没有办法将参数传递给Me.Close()函数,让它知道这是系统触发的表单关闭?

这些都没有意义

  • 您询问用户是否确定要退出,当他们同意时,您取消退出
  • 您永远不会通过使用取消令牌来利用异步的下载取消,并且
  • 您在开始下载后立即关闭表单

也许您应该有一个专用于下载单个文件并报告其进度的子窗体。如果您的用户勾选了多个文件,请打开该表单的多个。关闭此下载进度表单将取消下载,但不会终止应用程序(因为它是子表单(。该表格可以询问用户是否确定在下载关闭时取消下载,以及他们是否说"取消";不,不确定";然后不要关闭表单。此外,传递给FormClosing事件的FormClosingEventArgs(下载专业人员表单会遇到(具有CloseReason枚举值之一的CloseReason。您可以使用它来检测表单的所有者是否正在关闭,因此如果您将主表单设置为进度表单的所有者,则主表单可以询问";你确定要辞职吗"并且所拥有的进度条表单可以知道它们正在关闭,因为所有者正在关闭;你确定要取消下载吗"(如果有十次下载正在进行,那会很烦人(所以他们可以取消下载并关闭

有一个勾选框";当所有下载完成时退出应用程序"-主窗体可以在创建/打开进度窗体时附加到进度窗体的FormClosed事件。如果主窗体查询应用程序。OpenForms集合,每次子级关闭并查找时,处理OpenForms只包含一个表单(主表单(和";完成时关闭";勾选,则它可以知道使用应用程序关闭自己。退出,它自己的关闭原因将不同于如果用户点击关闭按钮;你确定要辞职吗">

最新更新