繁体   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