Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 修改窗体关闭(X)的行为_Vb.net_Winforms - Fatal编程技术网

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

Vb.net 修改窗体关闭(X)的行为,vb.net,winforms,Vb.net,Winforms,我有一个承载datagrid的表单,用户可以从中选择要下载的项目。表单提示用户检查是否要关闭表单(当他们单击“X”时),如果要关闭表单,任何正在进行的下载都将中止。我使用以下方法处理此行为: Private Sub OnFormClose(sender As Object, e As FormClosingEventArgs) Handles MyBase.Closing If not MessageBox.Show("Are you sure to close thi

我有一个承载datagrid的表单,用户可以从中选择要下载的项目。表单提示用户检查是否要关闭表单(当他们单击“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子OnFormClose(发送方作为对象,e作为FormClosingEventArgs)处理MyBase.Closing
如果不是MessageBox.Show(“您确定要关闭此应用程序吗?”,“关闭”,MessageBoxButtons.YesNo,MessageBoxIcon.Question)=Windows.Forms.DialogResult.Yes然后
e、 取消=真
其他的
<停止下载的代码>
如果结束
端接头
我试图在用户想要下载的文件完全下载后自动关闭此表单。当前的行为是让用户手动关闭表单。我正在尝试以下内容:

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
私有函数下载SelectedFile(字符串地址)
尝试
fileReader=新的WebClient()
下载文件(新Uri(地址),DestPath)
我
特例
结束尝试
端函数

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

所有这些都没有意义

  • 您询问用户是否确定要退出,当用户说是时,您取消退出
  • 您从不使用取消令牌来利用异步的下载取消,并且
  • 开始下载后立即关闭表单
也许您应该有一个子表单,专门用于下载单个文件并报告其进度。如果用户勾选了多个文件,请打开该表单的多个文件。关闭此下载进度表单将取消下载,但不会终止应用程序(因为它是子表单)。表单可以询问用户是否确定在关闭时取消下载,如果他们说“不,不确定”,则不要关闭表单。此外,传递给FormClosingEventArgs的FormClosingEventArgs(下载profrsss表单所经历的)有一个CloseReason,它是枚举值之一。您可以使用它来检测表单是否正在关闭,因此如果您将主表单设置为进度表单的所有者,则主表单可以询问“您确定要退出吗?”并且所拥有的进度条表单可以知道它们正在关闭,因为所有者正在关闭,而不是每次都询问“您确定要取消下载吗?”(如果有十次下载正在进行,那会很烦人)所以他们可以取消下载并关闭


通常会有一个勾选框“所有下载完成后退出应用程序”-主窗体可以在创建/打开进度窗体时附加到该窗体的FormClosed事件。如果主窗体在每次子窗体关闭时查询Application.OpenForms集合,并发现treat OpenForms仅包含一个窗体(主窗体)和勾选“完成时关闭”后,它就可以知道如何使用应用程序关闭自己。退出,它自己的关闭原因将与用户单击关闭按钮时不同,这样它就可以知道不询问“是否确实要退出?”?“

下载SelectedFile方法是否与用户选择下载文件的表单相同?为什么在下载一个文件后选择关闭表单?(目前不是这样;您使用DownloadAsync,但不等待它,因此表单将立即关闭;我不保证任务工作者在这种情况下会完成下载)只需添加一个布尔类型的私有字段,在调用我之前将其设置为True。close()现在知道在OnFormClose()中要做什么了@CaiusJard抱歉,我没有很好地编写代表代码:)下载完成时会触发一个事件,处理该方法的方法实际上会关闭表单。是的,该方法在表单中。我之所以要关闭表单,是因为一旦下载了文件,用户可以使用我的应用程序进一步处理它,而窗口就在那里there@HansPassant短a很简单,谢谢!!