簡體   English   中英

在 TextChanged 事件后訪問 combobox 項目會導致 object 處置異常 [C# .NET 4.6]

[英]Accessing a combobox item after TextChanged event results in an object disposed exception [C# .NET 4.6]

問題

我目前正在處理一種表單,其中 datagridview 單元格從syncfusion 的multicolumncombobox 工具獲取輸入,一切都按預期工作,直到我擦除 multicolumncombobox 的文本框,然后擦除 select 其他內容

這是我遵循的順序

  1. 我擦除 multicolumncombobox 文本框的文本
  2. I select 來自組合框的新值(SelectedValueChanged 事件)
  3. 拋出異常(盡管在 try/catch 塊中但未處理的異常)

例外

異常信息

See the end of this message for details on invoking



just-in-time (JIT) debugging instead of this dialog box.







************** Exception Text **************



System.ObjectDisposedException: Cannot access a disposed object.



Object name: 'ComboBoxPopupContainer'.



   at System.Windows.Forms.Control.CreateHandle()



   at System.Windows.Forms.Control.get_Handle()



   at System.Windows.Forms.Control.PointToClientInternal(Point p)



   at System.Windows.Forms.Control.PointToClient(Point p)



   at Syncfusion.Windows.Forms.Tools.ComboDropDown.ComboDropDown_Deactivate(Object sender, EventArgs e)



   at System.Windows.Forms.Form.OnDeactivate(EventArgs e)



   at System.Windows.Forms.Form.set_Active(Boolean value)



   at System.Windows.Forms.Form.DeactivateMdiChild()



   at System.Windows.Forms.Form.WmMdiActivate(Message& m)



   at System.Windows.Forms.Form.WndProc(Message& m)



   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)



   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)



   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)











************** Loaded Assemblies **************



mscorlib



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4470.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll



----------------------------------------



MDIForm



    Assembly Version: 1.0.0.0



    Win32 Version: 1.0.0.0



    CodeBase: file:///D:/Project/bsp_winforms/bsp_winforms/bin/Debug/MDIForm.exe



----------------------------------------



Syncfusion.Licensing



    Assembly Version: 19.4460.0.53



    Win32 Version: 19.4460.0.53



    CodeBase: file:///D:/Project/bsp_winforms/bsp_winforms/bin/Debug/Syncfusion.Licensing.DLL



----------------------------------------



System.Windows.Forms



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4400.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll



----------------------------------------



System



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4360.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll



----------------------------------------



System.Drawing



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4390.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll



----------------------------------------



Syncfusion.Shared.Base



    Assembly Version: 19.4460.0.53



    Win32 Version: 19.4460.0.53



    CodeBase: file:///D:/Project/bsp_winforms/bsp_winforms/bin/Debug/Syncfusion.Shared.Base.DLL



----------------------------------------



System.Xml



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4084.0 built by: NET48REL1



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll



----------------------------------------



System.Configuration



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4190.0 built by: NET48REL1LAST_B



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll



----------------------------------------



System.Core



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4470.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll



----------------------------------------



Syncfusion.Tools.Windows



    Assembly Version: 19.4460.0.53



    Win32 Version: 19.4460.0.53



    CodeBase: file:///D:/Project/bsp_winforms/bsp_winforms/bin/Debug/Syncfusion.Tools.Windows.DLL



----------------------------------------



Syncfusion.Grid.Windows



    Assembly Version: 19.4460.0.53



    Win32 Version: 19.4460.0.53



    CodeBase: file:///D:/Project/bsp_winforms/bsp_winforms/bin/Debug/Syncfusion.Grid.Windows.DLL



----------------------------------------



Accessibility



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4084.0 built by: NET48REL1



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll



----------------------------------------



System.Data



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4455.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll



----------------------------------------



System.Numerics



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4084.0 built by: NET48REL1



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll



----------------------------------------



UIAutomationProvider



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4470.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/UIAutomationProvider/v4.0_4.0.0.0__31bf3856ad364e35/UIAutomationProvider.dll



----------------------------------------



WindowsBase



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4470.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/WindowsBase/v4.0_4.0.0.0__31bf3856ad364e35/WindowsBase.dll



----------------------------------------



UIAutomationTypes



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4470.0 built by: NET48REL1LAST_C



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/UIAutomationTypes/v4.0_4.0.0.0__31bf3856ad364e35/UIAutomationTypes.dll



----------------------------------------



System.Runtime.Serialization.Formatters.Soap



    Assembly Version: 4.0.0.0



    Win32 Version: 4.8.4084.0 built by: NET48REL1



    CodeBase: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Serialization.Formatters.Soap/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll



----------------------------------------







************** JIT Debugging **************



To enable just-in-time (JIT) debugging, the .config file for this



application or computer (machine.config) must have the



jitDebugging value set in the system.windows.forms section.



The application must also be compiled with debugging



enabled.







For example:







<configuration>



    <system.windows.forms jitDebugging="true" />



</configuration>



When JIT debugging is enabled, any unhandled exception   
will be sent to the JIT debugger registered on the computer    
rather than be handled by this dialog box.

如果繼續單擊“繼續”,則會在應用程序關閉之前顯示此堆棧跟蹤在此處輸入圖像描述

代碼

TextChanged 事件

private void aliasMulticolcombobox_TextChanged(object sender, EventArgs e)
{
    try
    {
        aliasMulticolcombobox.SelectedValueChanged += new EventHandler(aliasMulticolcombobox_SelectedValueChanged);
    }

    catch (Exception exception)
    {
        MessageBox.Show(exception.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
}

SelectedValueChanged 事件

private void aliasMulticolcombobox_SelectedValueChanged(object sender, EventArgs e)
{
    try
    {
        ComboBoxBaseDataBound c = aliasMulticolcombobox as ComboBoxBaseDataBound;


        if (c.SelectedIndex != -1)
        {
            DataRowView dv = c.Items[c.SelectedIndex] as DataRowView;
            c.Text = dv.Row[0].ToString();
            dataGridView1.Rows[currRow].Cells[1].Value = c.Text;
        }
    }






    catch (Exception exception)
    {


        MessageBox.Show(exception.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);


    }
}

到目前為止我嘗試了什么

  1. 使用 aliasMulticolcombobox.PopupContainer.IsAccessible() 檢查 combobox 彈出容器是否可訪問 function
  2. 檢查 combobox 彈出容器是否使用 aliasMulticolcombobox.PopupContainer.IsDisposed() function 處理,這樣我就可以從 function 返回
  3. 嘗試了.BeforeCloseUp 事件來取消處置調用
  4. 嘗試切換事件處理程序

盡管做了所有這些努力,同樣的問題仍然存在

我剛剛與 Syncfusion 開發人員聯系,他們回應說這是一個錯誤

我們已經驗證並確認報告的場景是一個缺陷,並記錄了報告場景的報告“在清除文本后選擇 MultiColumnComboBox 中的值時拋出 TargetParameterCountException”。 我們將在 2022 年 3 月 25 日為報告的問題提供補丁。

暫無
暫無

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

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