.net 拖放到窗体上(但不是窗体上的WebBrowser控件)
我正在编写一个Windows窗体应用程序(C#),它有一个WebBrowser控件(以及一些其他按钮和文本框)。我希望能够将文件放在表单上的任何位置。问题是,默认情况下,WebBrowser将尝试呈现任何落入其控制的文件;我不想这样,因为我必须先对文件执行一些预处理。WebBrowser控件提供了一个名为AllowWebBrowserDrop的属性,我将其设置为false以禁用此行为。但是,结果是我无法在WebBrowser控件上删除任何内容(“不允许”反馈)。WebBrowser控件占据了大部分空间,因此如果您必须将文件放到某个空闲空间中,那么它就有点蹩脚了。如何在不让WebBrowser控件尝试渲染的情况下将文件拖放到窗体上的任何位置.net 拖放到窗体上(但不是窗体上的WebBrowser控件),.net,winforms,drag-and-drop,webbrowser-control,.net,Winforms,Drag And Drop,Webbrowser Control,我正在编写一个Windows窗体应用程序(C#),它有一个WebBrowser控件(以及一些其他按钮和文本框)。我希望能够将文件放在表单上的任何位置。问题是,默认情况下,WebBrowser将尝试呈现任何落入其控制的文件;我不想这样,因为我必须先对文件执行一些预处理。WebBrowser控件提供了一个名为AllowWebBrowserDrop的属性,我将其设置为false以禁用此行为。但是,结果是我无法在WebBrowser控件上删除任何内容(“不允许”反馈)。WebBrowser控件占据了大部
我想我应该补充一点,我的表单上的AllowDrop设置为true,并且有DragEnter和DragDrop的处理程序。我已将WebBrowser上的AllowWebBrowserDrop设置为false。其他一切都有默认设置。您能否添加一个透明的背景色
面板
,其z顺序高于其上方的WebBrowser,并让该面板处理下降操作?根据您对WebBrowser
所做的操作,您可以处理导航
事件,在浏览器导航之前触发。然后通过检查URL确定是否要处理删除。例如:
private void browser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (e.Url.IsFile)
{
// Prevent navigation
e.Cancel = true;
// Fire your other OnDrop code
}
}
要使其工作,您需要将AllowWebBrowserDrop
设置为true
如果这对你的商业案例有效,那就太好了;否则,如前所述,您可能无法直接处理窗口消息,这没有多大乐趣。imo,这可能有助于捕获丢弃事件,但也可能破坏应用程序,因为winforms仅“伪造”透明背景。它还可能排除其他重要事件。可能会覆盖WndProc并将所有事件转发到基础WebBrowser,但Drop事件除外。这并不完全是我想要的,但就我的目的而言,这已经足够了。