2008-10-20 41 views
16

He estado tratando de encontrar la manera de recuperar el texto seleccionado por el usuario en el control del navegador web y no he tenido suerte después de buscar en msdn y otros recursos, Me preguntaba si hay una forma de hacer esto. Tal vez simplemente me perdí algo.Recuperando el texto seleccionado del control Webbrowser en .net (C#)

Agradezco cualquier ayuda o recursos con respecto a esto.

Gracias

Respuesta

43

Debe usar la propiedad Document.DomDocument del control WebBrowser y convertirla a la interfaz IHtmlDocument2 proporcionada en el ensamblado de interoperabilidad de Microsoft.mshtml. Esto le da acceso al DOM completo, ya que está disponible para Javascript que realmente se ejecuta en IE.

Para hacer esto primero debe agregar una referencia de su proyecto al ensamblado de Microsoft.mshtml normalmente en "C: \ Archivos de programa \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll". Puede haber más de uno, asegúrese de elegir la referencia con esta ruta.

Luego de obtener la selección de texto actual, por ejemplo:

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); 
     } 
    } 

Para obtener más información sobre cómo acceder al DOM completo desde una aplicación .NET, consulte:

+0

Guau, el control es más poderoso de lo que pensaba ! –

+0

Si no le importa la dependencia de IE/mshtml, es una forma muy poderosa y relativamente fácil de agregar una interfaz de usuario de estilo web a sus aplicaciones de escritorio. La comunicación bidireccional y los eventos también son bastante simples, si alguien está interesado, házmelo saber. – Ash

+0

Muchas gracias. Esto es exactamente lo que estaba buscando. El proyecto en el que estoy trabajando utiliza HTML, por lo que opté por el control del navegador web. Simplemente no pude encontrar una manera de obtener el texto seleccionado. También gracias por las fuentes, han proporcionado información valiosa que me faltaba. – Cliff

-1

Estoy suponiendo que tiene una aplicación de Windows Forms que incluye un control que abre un sitio web.

Compruebe si puede insertar/ejecutar JavaScript dentro del control del navegador web. Usando JavaScript, podrá encontrar lo que se seleccionó y devolverlo. De lo contrario, dudo que el control del navegador web tenga algún conocimiento de lo que se selecciona dentro de él.

+0

Puede ejecutar JavaScript dentro del navegador web y responder al C#. Por ejemplo, vea esto http://stackoverflow.com/questions/305915/winforms-how-do-i-execute-c-application-code-from-inside-webbrowser-control – MarkJ

0

Y si solo usa la técnica de abajo?

// Copiar el texto seleccionado al portapapeles

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

// Obtener texto seleccionado desde el portapapeles

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

por si alguien está interesado en una solución que no requiere la adición de una referencia a mshtml .dll:

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