拖放到窗体上(但不是窗体上的WebBrowser控件)

时间:2010-12-15 21:28:47

标签: .net winforms drag-and-drop webbrowser-control

我正在编写一个具有WebBrowser控件的Windows窗体应用程序(C#)(在其他一些按钮和文本框中)。我希望能够在表单上的任何位置删除文件。问题是,默认情况下,WebBrowser将尝试渲染任何放入其控件中的文件;我不想要这个,因为我必须首先对文件执行一些预处理。 WebBrowser控件提供名为AllowWebBrowserDrop的属性,我将其设置为false以禁用此行为。但是,结果是我无法在WebBrowser控件上删除任何内容(“不允许”反馈)。 WebBrowser控件占用了大部分空间,因此如果你不得不将文件放在某处的松弛空间中,它会有点蹩脚。如何在我的表单上的任何位置启用删除文件而不让WebBrowser控件尝试呈现它?

我想我应该补充一点,我的表单上的AllowDrop设置为true,并且具有DragEnter和DragDrop的处理程序。我将WebBrowser上的AllowWebBrowserDrop设置为false。其他一切都有默认设置。

2 个答案:

答案 0 :(得分:2)

根据您使用WebBrowser执行的操作,您可以处理Navigating事件,该事件会在浏览器导航之前触发。然后通过检查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

如果这适用于您的商业案例,那就太好了;否则你可能会直接处理窗口消息,如上所述,这并不是很有趣。

答案 1 :(得分:0)

您是否可以添加一个透明背景色Panel,其z顺序高于其上方的WebBrowser,让Panel处理掉落?