SaveFileDialog调用showDialog()后直接自动关闭
SaveFileDialog closes automatically directly after calling showDialog()
我正在使用 Windows 7 和 Visual Studio 2013。
我的应用程序是一个带有 GeckoFx 的网络浏览器组件。在下载事件中,我触发打开 SaveFileDialog,如下所示。但在某些情况下,对话框会在 callong ShowDialog() 和 returns a DialogResult.Cancel 之后直接消失,它会跳转到 else 语句,尽管没有人按下取消键。
没有抛出错误。
有什么建议为什么会发生在这里?我对此一无所知...... :-(
'Save file dialog
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "CSV file (*.csv)|*.csv|All files (*.*)|*.*"
saveFileDialog1.FilterIndex = 2
saveFileDialog1.RestoreDirectory = True
saveFileDialog1.FileName = e.Filename
saveFileDialog1.AutoUpgradeEnabled = False
saveFileDialog1.CheckPathExists = False
saveFileDialog1.InitialDirectory = globalParameters.getDownloadDirectory() 'globalParameters._downloadDirectory
dialogResultValue = saveFileDialog1.ShowDialog()
If dialogResultValue = DialogResult.OK Then
'should go on here first, if user presses okay
Else
' I am coming to this point, althoug nobody pressed any cancel button or any other input had happened yet
End If
感谢@DannyJames 和@ChrisDunaway 的建议。
我可以通过某种方式(通过我的问题和您的回答)找出 SaveFileDialog.ShowDialog(Me)
需要对表格 Me
的引用。
只有这样,SaveFileDialog 才能正确加载而不会出现错误,甚至可以在没有任何其他用户操作的情况下取消其调用。
不幸的是,我将下载部分放入 vb-class 中,该部分未被 Inherits System.Windows.Forms.Form
继承,因此它没有对表单的引用(这显然需要被要求)。
我更改了我的代码,以便我有对表单的引用(因此,我可以使用对表单的引用,例如 Me
in form-class)。它就像一个魅力。
为了完成这里有这样一个例子:
Imports System.IO
Imports Gecko
Imports System
Imports System.Windows.Forms
Imports System.Drawing.Printing
Imports System.Management
Imports System.Threading
Imports System.Runtime.InteropServices
Imports System.Timers
Public Class frmMain
' [...]
' ATTENTION, MORE CODE IS NEEDED TO RUN GECKOFX WITH AN URL BUT NOT DISPLAYED HERE AT THIS POINT,
' SINCE IT ISN'T NEEDED HERE TO SHOW THE ACTUAL PROBLEM
''' <summary>
''' Startup-Functionalities, such as Gecko Xpcom-Start etc.
''' </summary>
''' <remarks></remarks>
Public Sub New()
' call initiliazer
InitializeComponent()
AddHandler Gecko.LauncherDialog.Download, AddressOf Me.LauncherDialog_Download
End Sub
''' <summary>
''' see also
''' http://quabr.com/19906621/how-to-handle-downloads-on-gecko15-with-mozilla-xul15-in-visual-basic
''' or
'''
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Public Sub LauncherDialog_Download(ByVal sender As Object, ByVal e As Gecko.LauncherDialogEvent)
Try
Dim P As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & Path.DirectorySeparatorChar & "tmp" 'globalParameters._downloadDirectory '
If Not System.IO.Directory.Exists(P) Then System.IO.Directory.CreateDirectory(P)
Dim objTarget As nsILocalFile = Xpcom.CreateInstance(Of nsILocalFile)("@mozilla.org/file/local;1")
Using tmp As New nsAString(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + vbTab & "temp.tmp")
objTarget.InitWithPath(tmp)
End Using
If globalParameters._doNotShowDownloadPrompt Then
'only if user does not want to load saveFileDialog; not interesting at this point
Else
'Save file dialog
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "CSV file (*.csv)|*.csv|All files (*.*)|*.*"
saveFileDialog1.FilterIndex = 2
saveFileDialog1.RestoreDirectory = False
saveFileDialog1.FileName = e.Filename
saveFileDialog1.AutoUpgradeEnabled = False
saveFileDialog1.CheckPathExists = False
saveFileDialog1.InitialDirectory = globalParameters.getDownloadDirectory() 'globalParameters._downloadDirectory
Dim dialogResultValue As DialogResult
Try
dialogResultValue = saveFileDialog1.ShowDialog(Me)
Catch ex As Exception
logging.logInformation("Probleme beim laden des Dialogs: " & ex.ToString())
End Try
If dialogResultValue = DialogResult.OK Then
Try
Dim par As New Parameters
par.sender = sender
par.e = e
par.mime = e.Mime
par.url = e.Url
par.fileName = saveFileDialog1.FileName
par.dialogResultValue = dialogResultValue
par.myStream = saveFileDialog1.OpenFile()
modMain.ThreadJob(par)
Catch ex As Exception
logging.logInformation("Error during loading File" & e.ToString)
End Try
End If
End If
Catch ex As Exception
logging.logInformation("Error during loading File" & ex.ToString)
Finally
' nothing to to here
End Try
End Sub
Private Sub frmMain_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
RemoveHandler Gecko.LauncherDialog.Download, AddressOf Me.LauncherDialog_Download
End Sub
End Class
我希望我能为搜索此问题的其他人正确描述问题
我正在使用 Windows 7 和 Visual Studio 2013。
我的应用程序是一个带有 GeckoFx 的网络浏览器组件。在下载事件中,我触发打开 SaveFileDialog,如下所示。但在某些情况下,对话框会在 callong ShowDialog() 和 returns a DialogResult.Cancel 之后直接消失,它会跳转到 else 语句,尽管没有人按下取消键。 没有抛出错误。
有什么建议为什么会发生在这里?我对此一无所知...... :-(
'Save file dialog
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "CSV file (*.csv)|*.csv|All files (*.*)|*.*"
saveFileDialog1.FilterIndex = 2
saveFileDialog1.RestoreDirectory = True
saveFileDialog1.FileName = e.Filename
saveFileDialog1.AutoUpgradeEnabled = False
saveFileDialog1.CheckPathExists = False
saveFileDialog1.InitialDirectory = globalParameters.getDownloadDirectory() 'globalParameters._downloadDirectory
dialogResultValue = saveFileDialog1.ShowDialog()
If dialogResultValue = DialogResult.OK Then
'should go on here first, if user presses okay
Else
' I am coming to this point, althoug nobody pressed any cancel button or any other input had happened yet
End If
感谢@DannyJames 和@ChrisDunaway 的建议。
我可以通过某种方式(通过我的问题和您的回答)找出 SaveFileDialog.ShowDialog(Me)
需要对表格 Me
的引用。
只有这样,SaveFileDialog 才能正确加载而不会出现错误,甚至可以在没有任何其他用户操作的情况下取消其调用。
不幸的是,我将下载部分放入 vb-class 中,该部分未被 Inherits System.Windows.Forms.Form
继承,因此它没有对表单的引用(这显然需要被要求)。
我更改了我的代码,以便我有对表单的引用(因此,我可以使用对表单的引用,例如 Me
in form-class)。它就像一个魅力。
为了完成这里有这样一个例子:
Imports System.IO
Imports Gecko
Imports System
Imports System.Windows.Forms
Imports System.Drawing.Printing
Imports System.Management
Imports System.Threading
Imports System.Runtime.InteropServices
Imports System.Timers
Public Class frmMain
' [...]
' ATTENTION, MORE CODE IS NEEDED TO RUN GECKOFX WITH AN URL BUT NOT DISPLAYED HERE AT THIS POINT,
' SINCE IT ISN'T NEEDED HERE TO SHOW THE ACTUAL PROBLEM
''' <summary>
''' Startup-Functionalities, such as Gecko Xpcom-Start etc.
''' </summary>
''' <remarks></remarks>
Public Sub New()
' call initiliazer
InitializeComponent()
AddHandler Gecko.LauncherDialog.Download, AddressOf Me.LauncherDialog_Download
End Sub
''' <summary>
''' see also
''' http://quabr.com/19906621/how-to-handle-downloads-on-gecko15-with-mozilla-xul15-in-visual-basic
''' or
'''
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Public Sub LauncherDialog_Download(ByVal sender As Object, ByVal e As Gecko.LauncherDialogEvent)
Try
Dim P As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & Path.DirectorySeparatorChar & "tmp" 'globalParameters._downloadDirectory '
If Not System.IO.Directory.Exists(P) Then System.IO.Directory.CreateDirectory(P)
Dim objTarget As nsILocalFile = Xpcom.CreateInstance(Of nsILocalFile)("@mozilla.org/file/local;1")
Using tmp As New nsAString(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + vbTab & "temp.tmp")
objTarget.InitWithPath(tmp)
End Using
If globalParameters._doNotShowDownloadPrompt Then
'only if user does not want to load saveFileDialog; not interesting at this point
Else
'Save file dialog
Dim saveFileDialog1 As New SaveFileDialog()
saveFileDialog1.Filter = "CSV file (*.csv)|*.csv|All files (*.*)|*.*"
saveFileDialog1.FilterIndex = 2
saveFileDialog1.RestoreDirectory = False
saveFileDialog1.FileName = e.Filename
saveFileDialog1.AutoUpgradeEnabled = False
saveFileDialog1.CheckPathExists = False
saveFileDialog1.InitialDirectory = globalParameters.getDownloadDirectory() 'globalParameters._downloadDirectory
Dim dialogResultValue As DialogResult
Try
dialogResultValue = saveFileDialog1.ShowDialog(Me)
Catch ex As Exception
logging.logInformation("Probleme beim laden des Dialogs: " & ex.ToString())
End Try
If dialogResultValue = DialogResult.OK Then
Try
Dim par As New Parameters
par.sender = sender
par.e = e
par.mime = e.Mime
par.url = e.Url
par.fileName = saveFileDialog1.FileName
par.dialogResultValue = dialogResultValue
par.myStream = saveFileDialog1.OpenFile()
modMain.ThreadJob(par)
Catch ex As Exception
logging.logInformation("Error during loading File" & e.ToString)
End Try
End If
End If
Catch ex As Exception
logging.logInformation("Error during loading File" & ex.ToString)
Finally
' nothing to to here
End Try
End Sub
Private Sub frmMain_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
RemoveHandler Gecko.LauncherDialog.Download, AddressOf Me.LauncherDialog_Download
End Sub
End Class
我希望我能为搜索此问题的其他人正确描述问题