System.Windows.Forms.WebBrowser Control에서만 복사/붙여 넣기 컨텍스트 메뉴 만 허용

StackOverflow https://stackoverflow.com/questions/200162

  •  03-07-2019
  •  | 
  •  

문제

Webbrowser 컨트롤에는 웹 페이지를 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴를 볼 수있는 모든 기능을 비활성화하는 "iswebbrowsercontextmenuenabled"라는 속성이 있습니다. 이것은 내가 원하는 것과 매우 가깝습니다 (나는 누군가가 마우스 오른쪽 버튼을 클릭하고 인쇄, 뒤로, 속성을 누르고, 소스보기 등)를 원하지 않습니다).

유일한 문제는 이것도 복사/붙여 넣기 등의 텍스트 상자에 나타나는 컨텍스트 메뉴를 비활성화한다는 것입니다.

이것을 더 명확하게하기 위해, 이것은 내가 원하지 않는 것입니다.
badcontext

이것이 제가 원하는 것입니다.
goodcontext

기본 문맥 메뉴를 비활성화하고 싶지만 텍스트 상자에 나타나는 메뉴를 허용합니다. 내가 어떻게 그렇게할지 아는 사람 있나요? webbrowser.document.contextMenushowing 이벤트는 유망한 것처럼 보이지만 htmllementeventargs 매개 변수의 "From Element"및 "Tolement"속성을 통해 사용자가 오른쪽 클릭하는 요소를 제대로 식별하지 못하는 것 같습니다. 요소.

미리 감사드립니다!

도움이 되었습니까?

해결책

JavaScript에서 자신의 상황에 맞는 메뉴 작성을 고려해 보셨습니까? 신체를 마우스 오른쪽 버튼으로 클릭 한 다음 복사 및 붙여 넣기 명령으로 메뉴를 표시하기 만하면됩니다 (hint : 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>

다른 팁

//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:

이것이 당신에게 앤더슨 Imes에 도움이되기를 바랍니다

간단한 모습 MSDN 문서 마우스 이벤트 (클릭, 버튼 다운/업 등) 중 어느 것도 프로그램에서 사용하도록 지원되지 않음을 보여줍니다. 나는 그것이 두려워 또는 : coneTxt 메뉴를 비활성화하거나 허용합니다.

비활성화하면 사용자는 키보드 단축키 (CTRL-C, CTRL-V)를 사용하여 여전히 복사 및 붙여 넣을 수 있습니다. 어쩌면 그것은 당신에게 필요한 기능을 줄 수 있습니다.

우리는 위의 두 의견의 조합을 사용하게되었습니다. 두 번째에 가까워서 내가 그에게 신용을주었습니다.

클라이언트 측 웹 코드와 Winforms를 통해 컨텍스트 메뉴를 대체 할 수있는 방법이 있습니다. 나는 실제로 맥락 메뉴를 다시 쓰고 싶지 않았지만 이것은 우리에게 올바른 컨트롤을 혼합 한 것으로 보인다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top