2008-10-14 30 views
1

Le contrôle WebBrowser possède une propriété appelée "IsWebBrowserContextMenuEnabled" qui désactive toute possibilité de cliquer avec le bouton droit sur une page Web et de voir un menu contextuel. Ceci est très proche de ce que je veux (je ne veux pas que quiconque puisse faire un clic-droit et imprimer, reculer, frapper les propriétés, voir la source, etc.).Autoriser uniquement le menu contextuel Copier/Coller dans le contrôle System.Windows.Forms.WebBrowser

Le seul problème est désactive également le menu contextuel qui apparaît dans TextBoxes pour copier/coller, etc.

Pour rendre cela plus clair, ce que je ne veux pas:
badcontext

Voilà ce que je ne veux:
goodcontext

Je voudrais désactiver le menu contextuel principal, mais permettre à celui qui apparaît dans TextBoxes. Quelqu'un sait comment je ferais ça? L'événement WebBrowser.Document.ContextMenuShowing semble prometteur, mais ne semble pas identifier correctement l'élément sur lequel l'utilisateur clique avec le bouton droit, soit via les propriétés "FromElement" et "ToElement" du paramètre HtmlElementEventArgs, ni avec l'élément HtmlDocument élément.

Merci d'avance!

Répondre

2

avez-vous envisagé d'écrire votre propre menu contextuel en javascript? Ecoutez juste l'utilisateur en faisant un clic droit sur le corps, puis affichez votre menu avec les commandes copier et coller (indice: element.style.display = "block | none"). Pour copier, exécuter le code suivant:

CopiedTxt = document.selection.createRange(); 
    CopiedTxt.execCommand("Copy"); 

Et pour coller:

CopiedTxt = document.selection.createRange(); 
    CopiedTxt.execCommand("Paste"); 

Source:

http://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html

NOTE: Cela ne fonctionne que dans IE (ce qui est bien pour votre application).

Je sais que pas infaillible par tous les moyens, mais voici un exemple de code qui devrait vous aider à démarrer:

<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> 
+0

Nous avions envisagé une solution javascript et qui serait certainement travailler, mais la pièce centrale de code pour cela est dans le navigateur Web WinForms application, nous avons écrit, qui est utilisé pour afficher de nombreux sites Web. Nous possédons tous les sites Web, donc nous pourrions le faire, mais je cherchais quelque chose de simple –

0

Un coup d'œil sur la MSDN documentation montre qu'aucun des événements de souris (cliquez, le bouton vers le bas/up etc) sont pris en charge pour être utilisés dans votre programme. J'ai peur que ce soit ou: soit désactiver les menus conetxt, ou les autoriser.

Si vous les désactivez, l'utilisateur peut toujours copier & en utilisant les raccourcis clavier (Ctrl-C, Ctrl-V). Peut-être que cela vous donne la fonctionnalité dont vous avez besoin.

+0

Je pense que vous avez raison. Je pense que nous allons devoir utiliser notre propre wrapper COM Interop plutôt que d'utiliser le wrapper intégré. Cela me rend triste à l'intérieur, mais vous avez raison. –

-1

Nous avons fini par utiliser une combinaison des deux commentaires ci-dessus. Plus près de la seconde, c'est pourquoi je lui ai donné du crédit.

Il existe un moyen de remplacer le menu contextuel à la fois sur le code Web côté client et via les winforms, ce qui est l'approche que nous avons adoptée. Je ne voulais vraiment pas réécrire le menu contextuel, mais cela semble nous avoir donné le bon mélange de contrôle.

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: 

J'espère que cela vous aidera à Anderson Imes