Элемент управления WebBrowser имеет свойство IsWebBrowserContextMenuEnabled, которое отключает возможность щелкнуть правой кнопкой мыши веб-страницу и просмотреть контекстное меню. Это очень близко к тому, что я хочу (я не хочу, чтобы кто-либо мог щелкать правой кнопкой мыши и печатать, возвращать, нажимать свойства, просматривать исходный код и т. д.).
Единственная проблема заключается в том, что это также отключает контекстное меню, которое появляется в текстовых полях для копирования / вставки и т. д.
Чтобы было понятнее, вот чего я не хочу:
.

Я хотел бы отключить главное контекстное меню, но разрешить то, что отображается в текстовых полях. Кто-нибудь знает, как я бы это сделал? Событие WebBrowser.Document.ContextMenuShowing выглядит многообещающим, но, похоже, не может должным образом идентифицировать элемент, который пользователь щелкает правой кнопкой мыши, либо через свойства «FromElement» и «ToElement» параметра HtmlElementEventArgs, либо отправитель не является чем-либо, кроме HtmlDocument элемент.
Заранее спасибо!





Вы думали о написании собственного контекстного меню на JavaScript? Просто послушайте, как пользователь щелкнет правой кнопкой мыши по телу, а затем покажите свое меню с командами копирования и вставки (подсказка: element.style.display = "block | none"). Для копирования выполните следующий код:
CopiedTxt = document.selection.createRange();
CopiedTxt.execCommand("Copy");
И наклеить:
CopiedTxt = document.selection.createRange();
CopiedTxt.execCommand("Paste");
Источник:
http://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html
ПРИМЕЧАНИЕ. Это работает только в IE (что подходит для вашего приложения).
Я знаю, что это ни в коем случае не пуленепробиваемое, но вот пример кода, с которого вы должны начать:
<html>
<head>
<script type = "text/javascript">
var lastForm = null;
window.onload = function(){
var menu = document.getElementById("ContextMenu");
var cpy = document.getElementById("CopyBtn");
var pst = document.getElementById("PasteBtn");
document.body.onmouseup = function(){
if (event.button == 2)
{
menu.style.left = event.clientX + "px";
menu.style.top = event.clientY + "px";
menu.style.display = "block";
return true;
}
menu.style.display = "none";
};
cpy.onclick = function(){
copy = document.selection.createRange();
copy.execCommand("Copy");
return false;
};
pst.onclick = function(){
if (lastForm)
{
copy = lastForm.createTextRange();
copy.execCommand("Paste");
}
return false;
};
};
</script>
</head>
<body oncontextmenu = "return false;">
<div id = "ContextMenu" style = "display : none; background: #fff; border: 1px solid #aaa; position: absolute;
width : 75px;">
<a href = "#" id = "CopyBtn" style = "display: block; color : blue; text-decoration: none;">Copy</a>
<a href = "#" id = "PasteBtn" style = "display: block; color : blue; text-decoration: none;">Paste</a>
</div>
sadgjghdskjghksghkds
<input type = "text" onfocus = "lastForm = this;" />
</body>
</html>
Беглый взгляд на Документация MSDN показывает, что ни одно из событий мыши (щелчок, нажатие / нажатие кнопки и т. д.) Не поддерживается для использования в вашей программе. Боюсь, это либо, либо: либо отключить контекстные меню, либо разрешить их.
Если вы отключите их, пользователь все равно сможет копировать и вставлять с помощью сочетаний клавиш (Ctrl-C, Ctrl-V). Может быть, это даст вам нужную функциональность.
Я думаю, вы правы. Я думаю, нам придется использовать нашу собственную оболочку COM Interop, а не встроенную. Мне внутри грустно, но ты прав.
В итоге мы использовали комбинацию обоих вышеперечисленных комментариев. Ближе ко второму, поэтому я отдал ему должное.
Есть способ заменить контекстное меню как в клиентском веб-коде, так и с помощью winforms, и это наш подход. Я действительно не хотел переписывать контекстное меню, но, похоже, это дало нам правильное сочетание контроля.
//Start:
function cutomizedcontextmenu(e)
{
var target = window.event ? window.event.srcElement : e ? e.target : null;
if ( navigator.userAgent.toLowerCase().indexOf("msie") != -1 )
{
if (target.type != "text" && target.type != "textarea" && target.type != "password")
{
alert(message);
return false;
}
return true;
}
else if ( navigator.product == "Gecko" )
{
alert(message);
return false;
}
}
document.oncontextmenu = cutomizedcontextmenu;
//End:
Надеюсь, это поможет вам Андерсон Имес
Мы рассматривали решение javascript, и оно, безусловно, сработает, однако центральный фрагмент кода для этого находится в написанном нами приложении winforms для веб-браузера, которое используется для отображения многих веб-сайтов. Нам принадлежат все веб-сайты, поэтому мы могли это сделать, но я искал что-то простое