C#winforms将自定义控件拖到另一个表单

时间:2016-03-26 06:26:59

标签: c# .net winforms custom-component

我正在进行桌面替换,我正在尝试添加将自定义组件从桌面拖动到同一应用程序中的另一个表单的功能但我无法在拖动时触发DoDragDrop事件组件。

我要拖动的组件是桌面的子组件。它是一个带有子PictureBox和Label的Panel。桌面只是一种形式。当DoDragDrop从桌面触发时我试图使用OnMouseLeave但是在我拖动组件时它似乎没有触发。对于第二种形式,我尝试过OnDragOverOnDragEnterOnDragDropOnMouseEnter的事件,但同样,它们在拖动组件时不会触发。< / 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事件有关,但我无法确定一种方法来确定鼠标是否有拖动组件时离开桌面窗体。

0 个答案:

没有答案