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

Posted

技术标签:

【中文标题】在 Web 浏览器上捕获 DragEnter 和 Drag Drop 事件【英文标题】:Catch DragEnter and DragDrop events on webbrowser 【发布时间】:2013-11-20 09:47:41 【问题描述】:

我有 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);

但效果不好。

现在我有一些问题:

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

【问题讨论】:

它们根本不像普通的桌面 D+D 事件那样工作,你应该自己操作 DOM。最好的起点是从 javascript 示例代码开始。尝试像“javascript ondragenter getdata”这样的谷歌查询。 【参考方案1】:
    在此处更改光标Change webbrowser Cursor。但不幸的是,在可能的光标中没有拖放光标。

    我发现解决问题的最简单方法是使用透明面板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
    
    

【讨论】:

Looking for windows drag and drop cursors?

以上是关于在 Web 浏览器上捕获 DragEnter 和 Drag Drop 事件的主要内容,如果未能解决你的问题,请参考以下文章

Knockout.js 使用我的“DragEnter”和“Dreagleave”功能在 Firefox 浏览器上拖放有问题

将文件从桌面拖动到浏览器时在“dragenter”上显示覆盖

如何使用 Fiddler 捕获非浏览器数据

JS的事件冒泡和事件捕获

浅谈js的事件冒泡和事件捕获

浅谈js的事件冒泡和事件捕获