C# 为什么';我的自定义控件是否接收拖放事件?
我在C++/CLI中编写了一个自定义控件(Forms.control的直接子控件),它将把大部分处理和所有绘制工作卸载到一个单独的遗留ish MFC控件中。我正在将此控件包装到C#应用程序中。我需要能够将项目从应用程序中相同表单上的UserControl拖到C++/CLI控件上 出于某种原因,尽管我将AllowDrop设置为true,但我的自定义控件未接收任何拖放事件。(我已经验证AllowDrop在运行时为true。)我从来没有机会检查/操作DragEventArgs,因为从来没有调用回调 我已经验证了拖放功能是否正常。例如,如果我用一个面板替换自定义控件,我可以很好地得到dragdrop回调 为了支持dragdrop回调,是否必须在控件中实现其他功能?是否有一些微妙的事情必须处理,系统才能识别出一个控件正在悬停,并且应该是dragdrop操作的目标 注意事项: 用于绘制的MFC控件对我来说还不可用,所以我只是绘制一个简单的渐变背景(通过C# 为什么';我的自定义控件是否接收拖放事件?,c#,.net,winforms,drag-and-drop,c++-cli,C#,.net,Winforms,Drag And Drop,C++ Cli,我在C++/CLI中编写了一个自定义控件(Forms.control的直接子控件),它将把大部分处理和所有绘制工作卸载到一个单独的遗留ish MFC控件中。我正在将此控件包装到C#应用程序中。我需要能够将项目从应用程序中相同表单上的UserControl拖到C++/CLI控件上 出于某种原因,尽管我将AllowDrop设置为true,但我的自定义控件未接收任何拖放事件。(我已经验证AllowDrop在运行时为true。)我从来没有机会检查/操作DragEventArgs,因为从来没有调用回调 我
OnPaintBackground
),我正在尝试绘制它。我还在OnPaint
中绘制一个较小的渐变矩形
在创建自定义控件的句柄之前(通过设计器/构造函数代码)和创建句柄之后(通过OnHandleCreated override),我都尝试过设置AllowDrop=true。行为上没有区别
拖动光标永远不会从自定义控件上的默认“无可用拖动”光标更改
我正在从UserControl子控件上的MouseDown
事件的事件处理程序调用this.DoDragDrop()
DragDrop似乎可以与我在C#中创建的另一个自定义控件一起工作,该控件与用户控件位于同一程序集中。它可以很好地捕获回调。只有我的C++/CLI控件没有看到它们。initializecomponent goo不相关。我可以毫不改变地对它进行评论。我发现了我的错误,所以我会在这里回答,以防其他人犯类似的错误。看起来我确实在问题中暗示了答案,尽管当时我没有意识到 在我的问题中,我说 我已尝试将AllowDrop设置为true 在自定义控件的 创建句柄(通过 设计师/建造师代码)和之后 句柄被创建(通过 OnHandleCreated覆盖)。不 行为上的差异 这实际上就是故障发生的地方。我没有阅读特别声明我需要记住调用
OnHandleCreated
的基类实现的
反射器显示控件::OnHandleCreated
负责设置控件的内部事件通知结构。我从未调用过Control::OnHandleCreated
,因此内部事件通知结构从未正确构建。此事件结构(反射器再次显示)负责触发OnDragOver
等,因此缺少事件结构导致我缺少事件
回答:
请确保在重写时调用OnHandleCreated
的基类实现