gpt4 book ai didi

c# - WPF 在应用程序中拖动从 COM 组件抛出 HRESULT E_FAIL

转载 作者:行者123 更新时间:2023-11-30 22:42:38 36 4
gpt4 key购买 nike

我的应用程序中有一些 UserControl,我需要支持从中拖放,因此我将代码提取到扩展 UserControl 的抽象类中(下面的代码)。当我在一个控件中使用它时,它是 ListBox 中 DataTemplate 的一部分,一切正常。

当我在也可以是放置目标的控件中使用它时,我在 DoDragDrop 行中得到以下异常:

COMException
Error HRESULT E_FAIL has been returned from a call to a COM component

这似乎可能与 WinForms 互操作有关,但我没有使用任何 WinForms 或 COM 组件 - 该应用程序是纯 WPF。

如果我继续执行,则下降成功。如果我用带有空 catch block 的 try block 围绕 DoDragDrop 调用,一切似乎都按预期工作。不过,我真的不想发布带有这种 hack 的代码。

public abstract class DraggableUserControl : UserControl
{
private Point? lastMouseDownPoint;

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);

lastMouseDownPoint = e.GetPosition(this);
}

protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e)
{
base.OnMouseMove(e);

if (e.LeftButton == MouseButtonState.Pressed && lastMouseDownPoint != null)
{
Point mousePosition = e.GetPosition(this);

if (((Point)lastMouseDownPoint - mousePosition).Length > 3)
{
BeginDrag();
}
}
}

protected override void OnMouseLeave(MouseEventArgs e)
{
base.OnMouseLeave(e);

if (e.LeftButton == MouseButtonState.Pressed && lastMouseDownPoint != null)
{
BeginDrag();
}
}

protected override void OnMouseUp(MouseButtonEventArgs e)
{
base.OnMouseUp(e);

if (e.ChangedButton == MouseButton.Left)
{
lastMouseDownPoint = null;
}
}

private void BeginDrag()
{
DataObject dragData = new DataObject(DragFormat, DragData);

//try
//{
DragDrop.DoDragDrop(this, dragData, DragDropEffects.Move);
//} catch {}

lastMouseDownPoint = null;
}

protected abstract String DragFormat
{ get; }

protected abstract Object DragData
{ get; }

protected abstract DragDropEffects DragAllowedEffects
{ get; }
}

最佳答案

用您的类(class)创建的一个简单示例似乎运行良好。我使用了DataFormats.StringFormat 的字符串和DragFormat。它工作得很好。汉斯是对的,没有办法重现。

我假设无论 Data 对象是什么,都会以某种方式破坏 Get Data 反射或无论如何将其传回。

我的建议是分解您的数据对象并查看是否有任何特定部分存在相同问题。

关于c# - WPF 在应用程序中拖动从 COM 组件抛出 HRESULT E_FAIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4319753/

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