Mar*_*rkP 2 c# drag-and-drop exception winforms
我有一个可以拖动我的表单的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))
Run Code Online (Sandbox Code Playgroud)
当我开始拖放过程时,我传入一个Control类型的对象.它不是Serializable,也不是我想要的.有没有办法可以解决这个问题,还是有办法在主机窗体外拖动一个对象?
调用堆栈:
> 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]
Run Code Online (Sandbox Code Playgroud)
这是另一个堆栈,但VS2010挂起,所以我无法复制和粘贴它. 
我不清楚如何触发此异常,桌面应该没有用于您的控件.鼠标光标应显示"不能放在这里"的形状.然而,D + D期间的第一次机会异常是没有意义的,它们被吞噬并且不会影响操作.你只看到它们,因为你已经附加了一个调试器.
如果您确实想要向下钻取它,请使用Debug + Exceptions,勾选Common Language Runtime异常的Thrown框.引发异常时调试器将停止.它很可能是在Winforms管道代码中引发的,除非启用参考源,否则您将无法查看源代码.如果您无法弄明白,请在您的问题中发布堆栈跟踪.务必复制整个,必要时滚动以获得顶部激活帧.
但重申一下,这在实践中不应成为问题.用户应该看到"不能丢弃"鼠标光标,吞没异常而不终止程序.
| 归档时间: |
|
| 查看次数: |
2512 次 |
| 最近记录: |