السماح فقط بنسخ/لصق قائمة السياق في System.Windows.Forms.WebBrowser Control

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

  •  03-07-2019
  •  | 
  •  

سؤال

يحتوي عنصر التحكم WebBrowser على خاصية تسمى "IsWebBrowserContextMenuEnabled" والتي تعمل على تعطيل كافة القدرة على النقر بزر الماوس الأيمن على صفحة ويب ورؤية قائمة السياق.هذا قريب جدًا مما أريد (لا أريد أن يتمكن أي شخص من النقر بزر الماوس الأيمن والطباعة، أو الرد، أو الضغط على الخصائص، أو عرض المصدر، وما إلى ذلك).

المشكلة الوحيدة هي أن هذا يؤدي أيضًا إلى تعطيل قائمة السياق التي تظهر في TextBoxes للنسخ/اللصق، وما إلى ذلك.

ولتوضيح الأمر أكثر، هذا ما لا أريده:
badcontext

وهذا ما أريده:
goodcontext

أرغب في تعطيل قائمة السياق الرئيسية، مع السماح لتلك التي تظهر في TextBoxes.هل يعرف أحد كيف سأفعل ذلك؟يبدو الحدث WebBrowser.Document.ContextMenuShowing واعدًا، ولكن لا يبدو أنه يحدد بشكل صحيح العنصر الذي ينقر عليه المستخدم بزر الماوس الأيمن، إما من خلال خصائص "FromElement" و"ToElement" الخاصة بمعلمة HtmlElementEventArgs، ولا يكون المرسل سوى HtmlDocument عنصر.

شكرا لك مقدما!

هل كانت مفيدة؟

المحلول

هل فكرت في كتابة قائمة السياق الخاصة بك في جافا سكريبت؟ما عليك سوى الاستماع إلى المستخدم وهو ينقر بزر الماوس الأيمن على النص، ثم اعرض القائمة الخاصة بك مع أوامر النسخ واللصق (تلميح: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:

آمل أن يساعدك هذا أندرسون إيمز

نظرة سريعة على وثائق MSDN يوضح أنه لا يتم دعم أي من أحداث الماوس (النقر، الزر لأسفل/لأعلى، وما إلى ذلك) لاستخدامها في برنامجك.أخشى أنه إما أو:قم إما بتعطيل قوائم conetxt أو السماح بها.

إذا قمت بتعطيلها، فلا يزال بإمكان المستخدم النسخ واللصق باستخدام اختصارات لوحة المفاتيح (Ctrl-C، Ctrl-V).ربما يمنحك هذا الوظيفة التي تحتاجها.

لقد انتهى بنا الأمر باستخدام مزيج من التعليقين أعلاه.أقرب إلى الثاني، ولهذا السبب أعطيته الفضل.

هناك طريقة لاستبدال قائمة السياق في كل من كود الويب الخاص بالعميل وكذلك من خلال winforms، وهو النهج الذي اتبعناه.لم أكن أرغب حقًا في إعادة كتابة قائمة السياق، ولكن يبدو أن هذا قد منحنا المزيج الصحيح من التحكم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top