在 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 浏览器上拖放有问题