2017-04-04 28 views
1

我使用Windows 7和Visual Studio 2013年SaveFileDialog調用的ShowDialog後直接自動關閉()

我的應用程序是一個網頁瀏覽器,組件與GeckoFx。在下載事件中,我觸發打開SaveFileDialog,如下所示。但在某些情況下,對話框會在callong ShowDialog()之後直接消失,並返回跳轉到else語句的DialogResult.Cancel,但沒有人按下取消。 沒有錯誤發生。

任何建議爲什麼這裏發生?我有沒有這方面的線索...... :-(

 '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 
+0

@downvoter:你應該評論你爲什麼downvoted我的問題。也許我應該添加一些缺失的信息或其他...現在,我認爲這是有效的問題 –

+0

你在調試模式下嘗試過什麼? –

+0

鍵盤緩衝區中是否有錯誤的按鍵?對話如何觸發?它是通過鍵盤還是鼠標輸入?什麼是窗體的「CancelButton」或「AcceptButton」屬性設置爲? –

回答

0

THX爲你的建議@DannyJames和@ChrisDunaway。

不知怎的,我能想出(既我的問題和你的應答)在SaveFileDialog.ShowDialog(Me)需要將表格Me參考。

才把SaveFileDialog會正常加載沒有錯誤或沒有任何其它用戶動作,甚至取消其呼叫。

不幸的是,我把下載的部分成一個沒有被Inherits System.Windows.Forms.Form繼承的vb類,所以它沒有對錶單的引用(這顯然需要被需要)。

我改變了我的代碼,以便引用表單(所以,我可以使用表單的引用,例如表單類中的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 

我希望我能正確地描述問題的其他人搜索這個問題