gpt4 book ai didi

不可序列化对象上的 C# DoDragDrop

转载 作者:行者123 更新时间:2023-12-04 00:47:48 27 4
gpt4 key购买 nike

我有一个可以在我的窗体周围拖动的 UserControl。当控件被意外拖离我的表单并进入桌面时,我得到了第一次机会异常(例如):

A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in System.Windows.Forms.dll

Additional information: Invalid FORMATETC structure (Exception from HRESULT: 0x80040064 (DV_E_FORMATETC))

当我开始拖放过程时,我传入了一个 Control 类型的对象。它不是可序列化的,我也不希望它是。有没有办法解决这个问题,或者是否有处理将对象拖到主机窗体之外的方法?

调用堆栈:

>   System.Windows.Forms.dll!System.Windows.Forms.DataObject.GetDataIntoOleStructs(ref System.Runtime.InteropServices.ComTypes.FORMATETC formatetc, ref System.Runtime.InteropServices.ComTypes.STGMEDIUM medium) + 0x175 bytes 
System.Windows.Forms.dll!System.Windows.Forms.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetDataHere(ref System.Runtime.InteropServices.ComTypes.FORMATETC formatetc, ref System.Runtime.InteropServices.ComTypes.STGMEDIUM medium) + 0x70 bytes
System.Windows.Forms.dll!System.Windows.Forms.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetData(ref System.Runtime.InteropServices.ComTypes.FORMATETC formatetc, out System.Runtime.InteropServices.ComTypes.STGMEDIUM medium) + 0x152 bytes
[Native to Managed Transition]

这是另一个堆栈,但 VS2010 挂起,所以我无法复制和粘贴它。 Screenshot

最佳答案

我不清楚这个异常是如何触发的,桌面应该对你的控制没有用。鼠标光标应显示“不能放在此处”的形状。然而,在 D+D 期间的第一次机会异常是没有意义的,它们被吞没并且不会以其他方式影响操作。您只能看到它们,因为您附加了调试器。

如果您真的想深入了解它,请使用调试 + 异常,勾选公共(public)语言运行时异常的抛出框。调试器将在引发异常时停止。它很可能是在 Winforms 管道代码中引发的,除非启用引用源,否则您将无法查看源代码。如果您无法弄清楚,请在您的问题中发布堆栈跟踪。请务必复制整个,必要时滚动它以获得顶部激活框架。

但重申一下,这在实践中应该不是问题。用户应该看到“无法放下”鼠标光标,异常会在不终止程序的情况下被吞下。

关于不可序列化对象上的 C# DoDragDrop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5275729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com