拖放时吞下异常

     2023-05-08     152

关键词:

【中文标题】拖放时吞下异常【英文标题】:Exception swallowed when doing drag and drop 【发布时间】:2010-11-01 11:35:21 【问题描述】:

我有一个 WinForms 应用程序,我在其中进行 2 个 TreeView 之间的拖放操作。

在某些时候,我想拒绝底层业务实现中的操作,所以我抛出了一个异常。我可以在输出窗口中看到异常,但问题是我在 UI 中看不到它并且它不会崩溃。

异常去哪儿了?

下面是一些描述问题的代码:

private TreeView tvLeft;
private TreeView tvRight;
private Dictionary<string, int> dico = new Dictionary<string, int>();

void tvLeft_DragDrop(object sender, DragEventArgs e) 

  if (e.Data.GetDataPresent(typeof(TreeNode))) 

    var tnSource = (TreeNode) e.Data.GetData(typeof(TreeNode));
    var tnDestination = tvLeft.GetNodeAt(tvLeft.PointToClient(new Point(e.X, e.Y)));

    // if I drag-drop the same node twice, there sould be an Exception
    // since the key is already in the dictionary...
    // ...but I get no Exception in the UI, the Application.ThreadException
    // or Appomain.CurrentDomain.UnhandledException handlers
    dico.Add(tnSource.Name, (new Random()).Next());

  


【问题讨论】:

你可能想分享一些代码 【参考方案1】:

我在网上找到了这个解释:

即使在同一个应用程序中进行拖放,拖放也是通过标准的 OLE 拖放机制来处理的。从 OLE 的角度来看,它正在处理两个应用程序,即源和目标,并将它们适当地解耦。由于 OLE 比 .NET 存在的时间要长得多,因此 OLE 没有 .NET 异常的概念,因此无法将异常从目标传回源。即使可以,为什么源要关心目标不能执行丢弃? 如果要在 DragDrop 事件期间处理异常,则必须在 DragDrop 事件处理程序中处理它,它不会传播到该事件处理程序之外,因为在源和目标之间存在托管到非托管到托管的代码转换。

请参阅here 问题后的第一个答案。

【讨论】:

【参考方案2】:

异常可能发生在某处的后台线程上。您需要为 AppDomain.CurrentDomain.UnhandledException 或 Application.ThreadException 事件创建处理程序。

有关更多详细信息,请参阅here。

【讨论】:

我已经创建了两个处理程序,但异常没有显示在它们中的任何一个中。还有其他的吗? 在 Visual Studio 中,点击 Debug->Exceptions,然后勾选“Common Language Runtime Exception”旁边的“thrown”框。这应该使调试器在抛出异常后立即进入您的代码,并且您可以使用 F10/F11 沿着它所遵循的路径前进。

android在拖放时滚动

】android在拖放时滚动【英文标题】:androidscrollwhiledrag&drop【发布时间】:2011-07-2214:42:04【问题描述】:您好,我正在尝试在ListView上进行拖放操作。它工作得很好。但我失去了点击和滚动的能力。我如何保留这两个?我认为... 查看详情

使用html5拖放时滚动[重复]

】使用html5拖放时滚动[重复]【英文标题】:Scrollwhileusinghtml5draganddrop[duplicate]【发布时间】:2013-05-2505:55:00【问题描述】:我刚刚发现在使用HTML5拖放时-尝试使用鼠标滚轮或鼠标垫滚动页面将不起作用,并且不会调用onmousewheel事... 查看详情

jquery html在拖放时复制

】jqueryhtml在拖放时复制【英文标题】:jqueryhtmlduplicatingondraganddrop【发布时间】:2021-11-1407:46:20【问题描述】:我正在使用jQuery并使用拖放功能。我的图像不断重复,我不知道为什么。任何帮助都会很棒。我很确定我的问题是:$... 查看详情

在ANDROID中相互拖放时合并Recyclerview中的项目?

】在ANDROID中相互拖放时合并Recyclerview中的项目?【英文标题】:MERGEITEMSinRecyclerViewwhendragged&droppedononeanother,inANDROID?【发布时间】:2022-01-1012:51:03【问题描述】:使用ItemTouchHelper类,我们可以在回收站视图中拖放和滑动项目;... 查看详情

拖放时滚动(WPF)

】拖放时滚动(WPF)【英文标题】:Scrollingwhiledragginganddropping(WPF)【发布时间】:2012-05-3019:21:11【问题描述】:好的,伙计们,我一直在为这个问题抓狂,并且花了好几个小时试图研究它是如何工作的,但我还没有找到答案,如... 查看详情

拖放时更改鼠标光标

】拖放时更改鼠标光标【英文标题】:ChangeMouseCursorWhileDragandDrop【发布时间】:2018-12-0120:56:57【问题描述】:我有一个DOM元素,我想将“项目”放入其中。我想通过更改光标图标给用户视觉反馈。但是当鼠标按钮被按住时,光标... 查看详情

无法更改拖放时拖动的项目

】无法更改拖放时拖动的项目【英文标题】:Unabletochangethedraggeditemondrop【发布时间】:2020-11-0323:35:28【问题描述】:我是jQuery的新手。我有拖放的要求,我将id为“parent1、parent2和parent3”的“3个可拖动div”拖放到“容器divdrop-par... 查看详情

使用 Angularjs 在拖放时创建元素的副本

】使用Angularjs在拖放时创建元素的副本【英文标题】:CreatecopyofelementondraganddropusingtheAngularjs【发布时间】:2020-11-0901:41:32【问题描述】:我正在尝试使用Angularjs实现拖放功能。每次将draggable元素拖放到droppable元素上时,我都需... 查看详情

如何阻止 QTreeWidget 在拖放时创建重复项

】如何阻止QTreeWidget在拖放时创建重复项【英文标题】:HowtostopQTreeWidgetfromcreatingtheitemduplicatesonDragandDrop【发布时间】:2014-08-0920:47:36【问题描述】:下面的代码创建了包含五个项目的QTreeWidget。self.setDragDropMode(self.InternalMove)标志... 查看详情

拖放时将桌面图标移动到Windows窗体上?

】拖放时将桌面图标移动到Windows窗体上?【英文标题】:movedesktopiconsontowindowsformwhendraganddrop?【发布时间】:2012-01-0109:26:29【问题描述】:我有点困惑,我使用的代码可以让您在windows窗体上拖放桌面图标/文件/文件夹,但是如何... 查看详情

删除拖放时可拖动的助手克隆

】删除拖放时可拖动的助手克隆【英文标题】:Removedraggable\'shelpercloneondrop【发布时间】:2014-01-2309:26:24【问题描述】:我有一个带有revert:true的可拖动元素,但是当它成功删除时,助手克隆仍保留在我放手的可放置元素上。我... 查看详情

使用 HTML5 原生拖放时如何约束移动?

】使用HTML5原生拖放时如何约束移动?【英文标题】:HowtoconstrainmovementwhenusingHTML5nativedraganddrop?【发布时间】:2012-02-2301:22:27【问题描述】:各种JavaScript库(例如jQueryUI)提供拖放交互,您可以在其中constrainthemovement将拖动的元... 查看详情

Jquery ui div在拖放时不可拖动

】Jqueryuidiv在拖放时不可拖动【英文标题】:Jqueryuidivnotdraggableondropped【发布时间】:2017-04-1810:23:45【问题描述】:我遇到了问题,当我将外部视频div拖放到时间轴中时,它不再可拖动https://fiddle.jshell.net/surjitsidhu/pzmzc2z7/2/show/https... 查看详情

java示例代码_在Java Swing中拖放时启用工具提示显示

java示例代码_在Java Swing中拖放时启用工具提示显示 查看详情

C#在拖放时在ListView中实现自动滚动

】C#在拖放时在ListView中实现自动滚动【英文标题】:C#ImplementingAuto-ScrollinaListViewwhileDrag&Dropping【发布时间】:2010-10-1405:23:09【问题描述】:如何在WinformsListView中实现自动滚动(例如,当您靠近顶部或底部时,ListView会滚动)... 查看详情

D3 强制有向图,具有拖放支持,使选定的节点位置在拖放时固定

】D3强制有向图,具有拖放支持,使选定的节点位置在拖放时固定【英文标题】:D3forcedirectedgraphwithdraganddropsupporttomakeselectednodepositionfixedwhendropped【发布时间】:2012-06-0914:43:25【问题描述】:可以在此处找到有关力直接图的示例... 查看详情

在使用拖放时,我可以让 Treeview 展开用户悬停的节点吗?

】在使用拖放时,我可以让Treeview展开用户悬停的节点吗?【英文标题】:Whilstusingdraganddrop,canIcauseaTreeviewtoExpandthenodeoverwhichtheuserhovers?【发布时间】:2010-12-1503:21:11【问题描述】:简而言之:.Net2.0中是否有任何内置功能可以在... 查看详情

在 C# 中的面板上拖放时移动控件

】在C#中的面板上拖放时移动控件【英文标题】:MovecontrolswhenDraganddroponpanelinC#【发布时间】:2011-01-2704:46:59【问题描述】:我想拖动面板上的控件,拖动时我想移动控件并将其位置放到面板上。我已经尝试过mouseUp、mouseDown、Mous... 查看详情