1

WebBrowser 控件有一个名为“IsWebBrowserContextMenuEnabled”的属性,该属性禁用右键单击网页和查看上下文菜单的所有功能。这非常接近我想要的(我不希望任何人能够右键单击和打印、回击、点击属性、查看源代码等)。

唯一的问题是这也会禁用出现在 TextBoxes 中的上下文菜单,用于复制/粘贴等。

为了使这一点更清楚,这是我不想要的:
坏上下文

这就是我想要的:
良好的背景

我想禁用主上下文菜单,但允许出现在 TextBoxes 中的菜单。有人知道我会怎么做吗?WebBrowser.Document.ContextMenuShowing 事件看起来很有希望,但似乎无法正确识别用户右键单击的元素,无论是通过 HtmlElementEventArgs 参数的“FromElement”和“ToElement”属性,还是除了 HtmlDocument 之外的任何发送者元素。

提前致谢!

4

4 回答 4

2

您是否考虑过用 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>
于 2008-10-14T06:46:28.537 回答
0

快速浏览一下MSDN 文档表明,您的程序中不支持使用任何鼠标事件(单击、按钮向下/向上等)。恐怕它要么:要么禁用conetxt菜单,要么允许它们。

如果禁用它们,用户仍然可以使用键盘快捷键(Ctrl-C、Ctrl-V)复制和粘贴。也许这可以为您提供所需的功能。

于 2008-10-14T06:46:49.987 回答
0
//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:

我希望这会帮助你安德森艾姆斯

于 2009-11-12T15:47:27.180 回答
-1

我们最终使用了上述两种评论的组合。接近第二个,这就是我给他荣誉的原因。

有一种方法可以替换客户端 Web 代码以及通过 winforms 上的上下文菜单,这是我们采用的方法。我真的不想重写上下文菜单,但这似乎给了我们正确的控制组合。

于 2008-12-15T20:23:08.673 回答