WebBrowserコントロールを右クリックすると、「戻る」、「ソースの表示」などのオプションを備えた標準のIEコンテキストメニューが表示されます。
代わりに自分のContextMenuStripを表示するにはどうすればよいですか?WebBrowser.ContextMenuStripは、このコントロールでは機能しません。
WebBrowserコントロールを右クリックすると、「戻る」、「ソースの表示」などのオプションを備えた標準のIEコンテキストメニューが表示されます。
代わりに自分のContextMenuStripを表示するにはどうすればよいですか?WebBrowser.ContextMenuStripは、このコントロールでは機能しません。
このサイトの他の多くのソリューションは、COM オブジェクトであるため、これを行うのが非常に難しいように思われました...そして、新しいクラス「ExtendedWebBrowser」を追加することをお勧めしました。このタスクについては、非常に単純であることがわかります。
Web ブラウザー コントロールを追加するコードで、DocumentCompleted イベント ハンドラーを追加します。
WebBrowser webBrowser1 = new WebBrowser();
webBrowser1.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
これらのイベント ハンドラーを定義します (contextMenuStrip を、作成した名前と一致するように変更します)。
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = (WebBrowser) sender;
browser.Document.ContextMenuShowing += new HtmlElementEventHandler(Document_ContextMenuShowing);
}
void Document_ContextMenuShowing(object sender, HtmlElementEventArgs e)
{
// If shift is held when right clicking we show the default IE control.
e.ReturnValue = e.ShiftKeyPressed; // Only shows ContextMenu if shift key is pressed.
// If shift wasn't held, we show our own ContextMenuStrip
if (!e.ReturnValue)
{
// All the MousePosition events seemed returned the offset from the form. But, was then showed relative to Screen.
contextMenuStripHtmlRightClick.Show(this, this.Location.X + e.MousePosition.X, this.Location.Y + e.MousePosition.Y); // make it offset of form
}
}
注: 私のオーバーライドは次のことを行います: * 右クリック時に Shift キーを押したままにすると、IE の戻り値が表示されます。* それ以外の場合は、contextMenuStripHtmlRightClick が表示されます (この例では定義は示されていません)