2010-12-15 105 views
1

我在写一个Windows窗体应用程序(C#),它具有WebBrowser控件(在其他几个按钮和文本框之间)。我希望能够在表单上的任何位置放置文件。问题在于,默认情况下,WebBrowser会尝试渲染掉任何文件到其控件中;我不想要这个,因为我必须先对文件执行一些预处理。 WebBrowser控件提供了一个名为AllowWebBrowserDrop的属性,我将其设置为false以禁用此行为。但是,结果是我不能在WebBrowser控件上放置任何东西(“不允许”反馈)。 WebBrowser控件占据了大部分空间,所以如果你不得不将文件放在某处的松散空间,那将是一种跛脚。我怎样才能启用丢弃文件中的任何地方没有WebBrowser控件试图呈现它?拖放到窗体上(但不是窗体上的WebBrowser控件)

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

回答

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

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

+0

这不完全是我想要的,但对我的目的来说已经足够了。 – Luke 2010-12-16 16:01:26

0

你可以添加一个透明背景颜色Panel比它上面的WebBrowser具有更高的Z顺序,并让面板处理下降?

+0

imo,这很可能会用于捕捉放置事件,但也可能会破坏应用程序,因为winforms只是“伪造”了透明背景。这也可能排除其他重要事件。 – 2010-12-15 21:34:22

+1

可能会覆盖WndProc并将_all_事件转发给底层的WebBrowser,除了Drop事件可以工作。 – 2010-12-15 21:36:06