2010-12-20 136 views
12

在我的應用程序中,我有一個包含瀏覽器控件的窗體,其中顯示SSRS報告。我想阻止用戶右鍵單擊瀏覽器控件並顯示彈出菜單。理想情況下,我希望右鍵單擊無法執行任何操作。有什麼辦法可以完成這個嗎?WebBrowser控件 - 防止右鍵單擊

+1

這是windows窗體還是WPF?這是WebBrowser控件還是Report控件? – 2010-12-20 20:32:49

+0

什麼版本的SQL Server – 2010-12-20 20:35:15

+0

如果你已經實現了一個瀏覽器控件,爲了顯示一個報告,在一個SSRS網絡控件中,爲什麼你不使用Windows Report控件,並避免在這種情況下的瀏覽器控制(如果它就像那樣)! – 2010-12-20 20:38:58

回答

18

您可以將IsWebBrowserContextMenuEnabled設置爲false。您可能也希望將AllowWebBrowserDrop設置爲false,因此它們不能將url拖入應用程序並加載它。

 webBrowser1.IsWebBrowserContextMenuEnabled = false; 
     webBrowser1.AllowWebBrowserDrop = false; 
+3

適用於Winforms WebBrowser,不適用於WPF版本。 – 2010-12-20 21:10:00

+0

WPF版本似乎主要是underfeatured。我個人幾乎每次都最終通過WindowsFormsHost控件使用Forms的WebBrowser。 – Kaganar 2013-07-01 20:42:53

+1

@Kaganar這種方法的唯一問題是,你僅限於HTML渲染器的IE 5/6級別功能,除非設置註冊表實體以告知IE在應用插件時使用10/11之類的更高版本進入ieframe.dll。 – KeithS 2016-01-20 03:08:37

1

IsWebBrowserContextMenuEnabled屬性設置爲false

2

對於WPF ===>

wbBrowser.ContextMenu.IsEnabled = FALSE;

2

任何情況下,WinForm的或WPF:

 private void WebBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) 
     { 
      ((WebBrowser)sender).InvokeScript("eval", "$(document).contextmenu(function() { return false;  });"); 
} 
+0

這是最好的答案,因爲最優雅的一個(https://stackoverflow.com/a/21699086/592212)有問題(至少我遇到過崩潰),當WebBrowser(WPF)包含在自定義控制。需要jQuery的思想。 – 2017-07-17 16:29:47

+0

完美工作,不需要對加載的頁面或應用程序自己的設計或註冊表進行任何更改:) – Nitin 2017-07-26 13:45:44

0

我有我的項目的解決方案的工作(WPF - MVVM):

重要的附加參考:Microsoft.mshtml

實現事件:webBrowser.LoadCompleted + = webBrowser_LoadCompleted;

using mshtml; 

private void webBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{ 
    object doc = webBrowser.Document; 
    HTMLDocumentEvents2_Event evn2 = doc as HTMLDocumentEvents2_Event; 
    HTMLDocumentEvents_Event evn = doc as HTMLDocumentEvents_Event; 
    evn.oncontextmenu += new HTMLDocumentEvents_oncontextmenuEventHandler(Evn_oncontextmenu); 
    evn2.oncontextmenu += new HTMLDocumentEvents2_oncontextmenuEventHandler(Evn2_oncontextmenu); 
} 

private bool Evn2_oncontextmenu(IHTMLEventObj pEvtObj) 
{ 
    return false; 
} 

private bool Evn_oncontextmenu() 
{ 
    return false; 
} 

希望有幫助。