2008-10-20 9 views
16

J'ai essayé de comprendre comment récupérer le texte sélectionné par l'utilisateur dans mon contrôle webbrowser et n'ai eu aucune chance après avoir creusé msdn et d'autres ressources, donc Je me demandais s'il y avait un moyen de le faire. Peut-être que j'ai simplement manqué quelque chose.Récupération du texte sélectionné du contrôle Webbrowser dans .net (C#)

J'apprécie n'importe quelle aide ou ressources concernant ceci.

Merci

Répondre

43

Vous devez utiliser la propriété Document.DomDocument du contrôle WebBrowser et la transtyper dans l'interface IHtmlDocument2 fournie dans l'assembly interop Microsoft.mshtml. Cela vous donne accès au DOM complet tel qu'il est disponible pour Javascript en cours d'exécution dans IE. Pour ce faire, vous devez d'abord ajouter une référence à votre projet à l'assembly Microsoft.mshtml normalement dans "C: \ Program Files \ Microsoft.NET \ Assembleurs d'interopérabilité \ Microsoft.mshtml.dll". Il peut y en avoir plus d'un, assurez-vous de choisir la référence avec ce chemin.

ensuite pour obtenir la sélection de texte actuel, par exemple:

using mshtml; 

... 

    IHTMLDocument2 htmlDocument = webBrowser1.Document.DomDocument as IHTMLDocument2; 

    IHTMLSelectionObject currentSelection= htmlDocument.selection; 

    if (currentSelection!=null) 
    { 
     IHTMLTxtRange range= currentSelection.createRange() as IHTMLTxtRange; 

     if (range != null) 
     { 
      MessageBox.Show(range.text); 
     } 
    } 

Pour plus d'informations sur l'accès au DOM complet à partir d'une application .NET, consultez:

+0

Wow, le contrôle est plus puissant que je pensais ! –

+0

Si cela ne vous dérange pas la dépendance sur IE/mshtml c'est un moyen très puissant et relativement facile d'ajouter une interface utilisateur de style Web à vos applications de bureau. La communication bidirectionnelle et les événements sont également très simples, si quelqu'un est intéressé, faites le moi savoir. – Ash

+0

Merci beaucoup. Ceci est exactement ce que je cherchais. Le projet sur lequel je travaille utilise HTML, c'est pourquoi j'ai opté pour le contrôle du navigateur Web. Je ne pouvais pas trouver un moyen d'obtenir le texte sélectionné. Merci aussi pour les sources, ils ont fourni des informations valables que je manquais juste. – Cliff

-1

Je suppose que vous avez une application WinForms qui comprend un contrôle qui ouvre un site Web.

Vérifiez si vous pouvez injecter/exécuter JavaScript dans votre contrôle webbrowser. En utilisant JavaScript, vous pourrez trouver ce qui a été sélectionné et le retourner. Sinon, je doute que le contrôle du navigateur Web ait une quelconque connaissance de ce qui est sélectionné à l'intérieur.

+0

Vous pouvez exécuter JavaScript dans le navigateur Web et revenir au C#. Par exemple voir ce http://stackoverflow.com/questions/305915/winforms-how-do-i-execute-c-application-code-from-inside-webbrowser-control – MarkJ

0

Et si vous venez d'utiliser la technique ci-dessous?

// Copier le texte sélectionné dans le presse-papiers

 Clipboard.Clear(); 
     SendKeys.SendWait("^(c)"); 

// Obtenir le texte sélectionné du presse-papiers

 string strClip = Clipboard.GetText().Trim(); 
     Clipboard.Clear(); 
1

Juste au cas où quelqu'un est intéressé à une solution qui ne nécessite pas l'ajout d'une référence à mshtml .dll:

private string GetSelectedText() 
{ 
    dynamic document = webBrowser.Document.DomDocument; 
    dynamic selection = document.selection; 
    dynamic text = selection.createRange().text; 
    return (string)text; 
} 
Questions connexes