我正在进行桌面替换,我正在尝试添加将自定义组件从桌面拖动到同一应用程序中的另一个表单的功能但我无法在拖动时触发DoDragDrop
事件组件。
我要拖动的组件是桌面的子组件。它是一个带有子PictureBox和Label的Panel。桌面只是一种形式。当DoDragDrop
从桌面触发时我试图使用OnMouseLeave
但是在我拖动组件时它似乎没有触发。对于第二种形式,我尝试过OnDragOver
,OnDragEnter
,OnDragDrop
和OnMouseEnter
的事件,但同样,它们在拖动组件时不会触发。< / p>
我在桌面形式中有这个:
protected override void OnMouseLeave(EventArgs e)
{
DoDragDrop("Test Data", DragDropEffects.All);
base.OnMouseLeave(e);
}
这是第二种形式:
protected override void OnMouseEnter(EventArgs e)
{
Debug.Instance.WriteLine("OnMouseEnter!");
base.OnMouseEnter(e);
}
protected override void OnDragOver(DragEventArgs e)
{
Debug.Instance.WriteLine("OnDragOver!");
if (e.Data.GetDataPresent(typeof(string)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
Console.WriteLine("Drag Over: " + e.Effect);
base.OnDragOver(e);
}
private void Header_DragEnter(object sender, DragEventArgs e)
{
Debug.Instance.WriteLine("Header Drag Enter!");
Console.WriteLine("Header Drag Enter!");
}
protected override void OnDragDrop(DragEventArgs e)
{
if (!e.Data.GetDataPresent(typeof(string))) return;
string data = (string)e.Data.GetData(typeof(string));
Console.WriteLine("Drag Drop: " + data);
base.OnDragEnter(e);
}
标题是一个用于拖动第二个表单的面板,因为它是无边框的。它位于表格的顶部,因此可能会抓住它。
我猜这与来自桌面窗体中阻止OnMouseMove
事件的组件中的OnMouseLeave
事件有关,但我无法确定一种方法来确定鼠标是否有拖动组件时离开桌面窗体。