1

WebBrowser コントロールには、Web ページを右クリックしてコンテキスト メニューを表示する機能をすべて無効にする「IsWebBrowserContextMenuEnabled」というプロパティがあります。これは私が望んでいるものに非常に近いものです (誰も右クリックして印刷したり、反撃したり、プロパティをクリックしたり、ソースを表示したりしたくありません)。

唯一の問題は、コピー/貼り付けなどのために TextBoxes に表示されるコンテキスト メニューも無効になることです。

これをより明確にするために、これは私が望まないものです:
悪い文脈

これは私が欲しいものです:
良い文脈

メインのコンテキスト メニューを無効にしたいのですが、TextBox に表示されるものは許可します。誰も私がそれを行う方法を知っていますか? 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

上記のコメントの両方を組み合わせて使用​​することになりました。2番目に近いので、彼にクレジットを与えました.

クライアント側の Web コードと winforms の両方でコンテキスト メニューを置き換える方法があり、これが私たちが採用したアプローチです。コンテキスト メニューを書き直したくはありませんでしたが、これにより適切なコントロールの組み合わせが得られたようです。

于 2008-12-15T20:23:08.673 に答える