Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 拖放到窗体上(但不是窗体上的WebBrowser控件)_.net_Winforms_Drag And Drop_Webbrowser Control - Fatal编程技术网

.net 拖放到窗体上(但不是窗体上的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控件占据了大部

我正在编写一个Windows窗体应用程序(C#),它有一个WebBrowser控件(以及一些其他按钮和文本框)。我希望能够将文件放在表单上的任何位置。问题是,默认情况下,WebBrowser将尝试呈现任何落入其控制的文件;我不想这样,因为我必须先对文件执行一些预处理。WebBrowser控件提供了一个名为AllowWebBrowserDrop的属性,我将其设置为false以禁用此行为。但是,结果是我无法在WebBrowser控件上删除任何内容(“不允许”反馈)。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事件除外。这并不完全是我想要的,但就我的目的而言,这已经足够了。