在Web浏览器上捕获DragEnter和Drag Drop事件

时间:2013-11-08 11:33:46

标签: c# .net drag-and-drop webbrowser-control

我有TreeView,ListView和WebBrowser控件。我使用拖放方法。使用TreeView和ListView一切正常,因为它们具有Dragdrop和DragEnter事件。 但我没有在WebBrowser中找到它们。

我尝试使用:

webBrowser1.Document.Body.Drag += new HtmlElementEventHandler(WebBrowser_Drag);
webBrowser1.Document.Body.DragOver += new HtmlElementEventHandler(WebBrowser_DragOver);
webBrowser1.Document.Body.DragEnd += new HtmlElementEventHandler(WebBrowser_DragEnd);
webBrowser1.Document.Body.DragLeave += new HtmlElementEventHandler(WebBrowser_DragLeave);

触发了DragOver和DragLeave事件,但无法像

那样更改光标
e.Effect = DragDropEffects.None;

不会触发Drag和DragEnd事件。

我也试试:

webBrowser1.Document.Body.AttachEventHandler("dragdrop", WebBrowser_DragDrop);
webBrowser1.Document.AttachEventHandler("dragdrop", WebBrowser_DragDrop);
webBrowser1.Document.AttachEventHandler("ondrop", WebBrowser_OnDrop);
webBrowser1.Document.Body.AttachEventHandler("ondrop", WebBrowser_OnDrop);

但效果不佳。

现在我有一些问题:

  1. 如何在事件DragOver和DragLeave中更改光标。
  2. 有没有办法处理数据以及WebBrowser的Dragdrop和DragEnter?

1 个答案:

答案 0 :(得分:2)

  1. 在此处更改光标Change webbrowser Cursor。但遗憾的是,在可能的游标中没有拖拽光标。
  2. 我找到解决问题的最简单方法是使用透明面板Clearing the graphics of a transparent panel C#

    private void WebBrowser_DragOver(object sender, HtmlElementEventArgs e)
    {
        panel.BringToFront();
    }
    
    private void Panel_DragLeave(object sender, EventArgs e)
    {
        panel.SendToBack();
    }
    
    private void Panel_MouseLeave(object sender, EventArgs e)
    {
        panel.SendToBack();
    }
    
    private void Panel_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }
    
    private void Panel_DragDrop(object sender, DragEventArgs e)
    {
        //Make dragdrop data processing
    }