.net - VB.NET openFileDialog 崩溃

标签 .net vb.net devexpress

我在单击按钮时调用 openFileDialog 时遇到问题。

相关代码:

   Private Sub MemoCp_ButtonClick(sender As Object, e As ButtonPressedEventArgs) Handles MemoCp.ButtonClick
        Dim Editor As ButtonEdit = CType(sender, ButtonEdit)
        Dim Button As EditorButton = e.Button
        If Editor.Properties.Buttons.IndexOf(e.Button).ToString() = 1 Then
            Using ofd As New OpenFileDialog
                ofd.InitialDirectory = "C:\"
                ofd.FileName = ""
                ofd.ShowHelp = True
                ofd.ShowDialog() <-- Program crashes here
                TryCast(sender, ButtonEdit).EditValue = ofd.FileName
            End Using
        End If
    End Sub

我有一个带有 2 个复选框的表单。当我不选择任何复选框并单击按钮时,它工作得很好,但如果我事先选中复选框并单击按钮,我会收到此错误:

Exception thrown at 0x769F1DF3 (shell32.dll) in Unos.exe: 0xC0000005: Access violation reading location 0x0000000A.

有了这个调用栈:

    shell32.dll!CExplorerBrowser::Advise()  Unknown
    comdlg32.dll!CFileOpenSave::_CreateExplorerBrowser()    Unknown
    comdlg32.dll!CFileOpenSave::_InitOpenSaveDialog(struct HWND__ *)    Unknown
    comdlg32.dll!CFileOpenSave::s_OpenSaveDlgProc(struct HWND__ *,unsigned int,unsigned int,long)   Unknown
    user32.dll!__InternalCallWinProc@20()   Unknown
    user32.dll!UserCallDlgProcCheckWow()    Unknown
    user32.dll!DefDlgProcWorker()   Unknown
    user32.dll!_DefDlgProcW@16()    Unknown
    user32.dll!__InternalCallWinProc@20()   Unknown
    user32.dll!UserCallWinProcCheckWow()    Unknown
    user32.dll!DispatchClientMessage()  Unknown
    user32.dll!___fnDWORD@4()   Unknown
    ntdll.dll!_KiUserCallbackDispatcher@12()    Unknown
    user32.dll!InternalCreateDialog()   Unknown
    user32.dll!InternalDialogBox()  Unknown
    user32.dll!_DialogBoxIndirectParamAorW@24() Unknown
    user32.dll!_DialogBoxIndirectParamW@20()    Unknown
    comdlg32.dll!CFileOpenSave::Show(struct HWND__ *)   Unknown
    comdlg32.dll!_InvokeNewFileOpenSave(struct IFileDialog *,unsigned short,struct HWND__ *,struct _OFNINITINFO *,struct HWND__ *)  Unknown
    comdlg32.dll!_CreateNewFileOpenSaveInProc(unsigned short,struct HWND__ *,struct _OFNINITINFO *) Unknown
    comdlg32.dll!NewGetFileName(struct OPENFILEINFO *,int)  Unknown
    comdlg32.dll!_GetFileName@8()   Unknown
    comdlg32.dll!_GetOpenFileNameW@4()  Unknown
    System.Windows.Forms.ni.dll!65f0b4f0()  Unknown
    [Frames below may be incorrect and/or missing, native debugger attempting to walk managed call stack]   Unknown
    [External Code] 
>   Unos.exe!Unos.FormUnos.MemoCp_ButtonClick(Object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) Line 611 Basic
    [External Code] 

我纠结了5天,如果你能帮我解决,我将不胜感激! 提前致谢。

编辑:

我尽可能地缩短了表单代码,所以问题仍然存在。以下是简化版的完整代码:

Imports System.ComponentModel
Imports System.Data.OleDb
Imports System.Text
Imports DevExpress.XtraEditors.Controls

Partial Public Class Form1
    Shared Sub New()
        DevExpress.UserSkins.BonusSkins.Register()
    End Sub
    Public Sub New()
        InitializeComponent()
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Drzave_LookUp()
    End Sub
    Public Sub Drzave_LookUp()


        Dim sqlDrzave As String = "Select Drzave.SifraDrzave, Drzave.Naziv, Drzave.OZNAKA " &
                                " FROM Drzave INNER JOIN Kupci On Drzave.SifraDrzave = Kupci.Drzava " &
                                            " GROUP BY Drzave.SifraDrzave, Drzave.Naziv, Drzave.OZNAKA " &
                                            " ORDER BY Drzave.SifraDrzave "



        Dim DrzaveAdapter As OleDbDataAdapter = New OleDbDataAdapter(sqlDrzave, cn)
        Dim dsKupci As DataSet = New DataSet
        DrzaveAdapter.Fill(dsKupci, "Drzave")

        SearchLookUpEdit1.Properties.DataSource = dsKupci.Tables("Drzave")
        SearchLookUpEdit1.Properties.DisplayMember = "Naziv"
        SearchLookUpEdit1.Properties.ValueMember = "Naziv"
        SearchLookUpEdit1.Properties.BestFitMode = BestFitMode.BestFitResizePopup
        SearchLookUpEdit1.Properties.PopulateViewColumns()


    End Sub
    Private Sub SearchLookUpEdit1_EditValueChanged(sender As Object, e As EventArgs) Handles SearchLookUpEdit1.EditValueChanged
        Objekti_LookUp(SearchLookUpEdit1.EditValue)
    End Sub

    Public Sub Objekti_LookUp(ByVal drzava As String)

        Dim sqlObjekti As String = "SELECT Objekti.SifraObjekta, Objekti.Naziv, Objekti.Adresa, Objekti.Mesto, Objekti.Instalater, Objekti.Drzava " &
                                    " FROM Objekti " &
                                    " WHERE (((Objekti.Drzava)='" & drzava & "')) "

        Dim ObjektiAdapter As OleDbDataAdapter = New OleDbDataAdapter(sqlObjekti, cn)
        Dim dsObjekti As DataSet = New DataSet
        ObjektiAdapter.Fill(dsObjekti, "Objekti")

        SearchLookUpEdit2.Properties.DataSource = dsObjekti.Tables("Objekti")
        SearchLookUpEdit2.Properties.DisplayMember = "SifraObjekta"
        SearchLookUpEdit2.Properties.ValueMember = "SifraObjekta"
        SearchLookUpEdit2.Properties.BestFitMode = BestFitMode.BestFitResizePopup
        SearchLookUpEdit2.Properties.PopulateViewColumns()

    End Sub
    Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
        Dim SelectedFilePath As String = ""
        Using ofd As New OpenFileDialog
            ofd.InitialDirectory = "Z:\"
            ofd.FileName = ""
            ofd.ShowHelp = True
            If ofd.ShowDialog() = DialogResult.OK Then <-- Program crashes here
                SelectedFilePath = ofd.FileName
            End If
        End Using
        Debug.Print(SelectedFilePath)

    End Sub

End Class

最佳答案

此代码在没有您使用任何第 3 方按钮的情况下工作正常。您的问题可能出在您指出的那一行之后。您的问题不在于 OpenFileDialog。提出一个新问题,解释什么是 ButtonEditEditorButton

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim SelectedFilePath As String = ""
    Using ofd As New OpenFileDialog
        ofd.InitialDirectory = "C:\"
        ofd.FileName = ""
        ofd.ShowHelp = True
        If ofd.ShowDialog() = DialogResult.OK Then
            SelectedFilePath = ofd.FileName
        End If
    End Using
    Debug.Print(SelectedFilePath)
End Sub

关于.net - VB.NET openFileDialog 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62735339/

相关文章:

vb.net - 无法更新 NuGet 包

vb.net - 获取 key 生成函数的反转

winforms - DevExpress 中的 DisplayText 自动过滤

c# - 将存储库模式与(例如)DevExpress XPO 一起使用是否有意义?

mysql - Delphi ADO + MySQL + Developer Express Grid

.net - 将ViewModel放在正确的位置

c# - 为什么我无法使用 HIDSharp 连接到 USB 复合设备?

.net - 线程启动是否具有隐式内存屏障?

C# 无法显示具有正确颜色映射的 RAW16 灰度图像

vb.net - 如何更改 vb.net 图表中的文本颜色?