簡體   English   中英

調用showDialog()后,SaveFileDialog會自動關閉

[英]SaveFileDialog closes automatically directly after calling showDialog()

我在Visual Studio 2013中使用Windows 7。

我的應用程序是帶有GeckoFx的webbrowser-Component。 在下載事件中,我觸發按如下方式打開SaveFileDialog。 但在某些情況下,對話框會在callong ShowDialog()之后直接消失並返回一個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)需要對Form Me的引用。

只有這樣,SaveFileDialog才會正確加載而不會出現任何錯誤,甚至可以在沒有任何其他用戶操作的情況下取消其調用。

不幸的是,我將下載部分放入一個未被Inherits System.Windows.Forms.Form繼承的vb類中,因此它沒有對Form的引用(顯然需要它)。

我更改了我的代碼,因此我引用了表單(因此,我可以使用對表單的引用,例如表單類中的Me )。 它就像一個魅力。

完成這里是一個這樣的例子:

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
''' http://stackoverflow.com/questions/19906621/how-to-handle-downloads-on-gecko15-with-mozilla-xul15-in-visual-basic
''' </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

我希望我可以正確地為其他人搜索這個問題描述問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM