Winforms 实现Web浏览器控件WinC窗体的拖放功能#
我需要在WinForm C#中捕获WebBrowser控件的拖放事件。有什么办法吗?标准的拖放方式不起作用吗 如果要控制WebBrowser控件在拖放操作期间的操作,还可以查看IDocHostUIHandler::GetDropTarget 连接IDocHostUIHandler实现的最简单方法是连接ICustomDoc接口及其所有SetUIHandler方法(请参阅)。不过。另一种方法是跳过Windows窗体的webbrowser类和。我的解决方法: 使用布尔成员变量来检测是从内部代码调用navigate,还是从外部代码调用Navigation。实现“导航”(BeforeNavigating)事件并检查它是否是来自外部的调用 例如: 呼叫从内部导航:Winforms 实现Web浏览器控件WinC窗体的拖放功能#,winforms,drag-and-drop,webbrowser-control,Winforms,Drag And Drop,Webbrowser Control,我需要在WinForm C#中捕获WebBrowser控件的拖放事件。有什么办法吗?标准的拖放方式不起作用吗 如果要控制WebBrowser控件在拖放操作期间的操作,还可以查看IDocHostUIHandler::GetDropTarget 连接IDocHostUIHandler实现的最简单方法是连接ICustomDoc接口及其所有SetUIHandler方法(请参阅)。不过。另一种方法是跳过Windows窗体的webbrowser类和。我的解决方法: 使用布尔成员变量来检测是从内部代码调用n
private void NavigateLocal(string htmlFileName)
{
this.localNavigate = true;
this.webBrowser.Navigate(htmlFileName);
}
事件方法:
private void WebBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (this.localNavigate)//inside call
{
this.localNavigate = false;
}
else //call from outside
{
this.DoDragDrop(e.Url.ToString());
}
}
我使用的“修复”是让浏览器告诉你它正在被拖动,用屏幕截图弹出一张图片,然后处理正常的c#事件
在html文件中
var holder = document.getElementsByTagName('body')[0];
holder.ondragover = function () {
window.external.DragStarted(event);
return true;
};
不要忘了在DragLeave/DragDrop之后隐藏picturebox,我发现最好的方法是通过主机处理控件中的
导航
事件。当您将文件放到控件上时,将触发此事件,您可以在此时提取文件名。诀窍是,你必须知道什么构成了合法的导航(即直接导航的文档与删除的文件)。大多数处理drop事件的应用程序都使用一个特定的文档或一组已知文档,这不应该是一个问题
另一个选项是使用JavaScript代码通过HTML文档内部的window.ondrop
处理拖放操作,但您只能获取文件数据和文件名,而不能获取完整路径
有关这两种方法的更多信息,请参阅以下博文:
C#中的WinForm不支持WebBrowser控件的拖放功能。您需要编写自己的类来处理它。WPF确实为WebBrowser控件提供了拖放功能。很抱歉,我的错,winform中无法使用事件对象。
var holder = document.getElementsByTagName('body')[0];
holder.ondragover = function () {
window.external.DragStarted(event);
return true;
};