none
Interpretar contenido HTML en Windows Form? RRS feed

  • Pregunta

  • Amigos un gusto saludarles a todos los que formamos esta comunidad. bueno vengo buscando un poco de ayuda con un problema que aun no he encontrado la forma de trabajarlo.

    resulta que tengo guardado texto en html en un campo de mi bd SQL y por ejemplo al seleccionar ese registro en un gridview se transforme en un textbox o algo que me traiga o genere el formato que corresponde, por ejemplo si selecciono un registro que en su codigo html contiene negrita, saltos de lineas, cuadrados o imagenes pequeñas, sea bien representado al querer mostarlo o verlo.

    como puedo realizar esto? 

    mi idea es algo así pero en un windows form en .Net

    no aspx ni ningún otro lenguaje y tan cual allí pueda yo guardarlo en html y al momento de querer modificar me cargue y represente como corresponde.

    espero por favor amigos alguna ayuda, ya que soluciono un problema gigante que tengo.



    • Cambiado Enrique M. Montejo miércoles, 15 de julio de 2015 9:33 Pregunta relacionada con Windows Forms.
    • Editado Miguel Oyarzo miércoles, 15 de julio de 2015 12:26
    martes, 14 de julio de 2015 12:20

Todas las respuestas

  • Hola:

    Para eso .NET tiene el control WebBrowser, asignando la propiedad DocumentText puedes mostrar el contenido de tu HTML en el control:

    webBrowser.DocumentText = "<tu cadena en formato HTML>"

    O si tienes problemas con DocumentText:

    webBrowser.Navigate("about:blank")
    webBrowser.Document.OpenNew(false)
    webBrowser.Document.Write("<tu cadena en formato HTML>")
    webBrowser.Refresh()

    Espero que te sirva.

    Un saludo


    • Editado LG DES martes, 14 de julio de 2015 12:37
    martes, 14 de julio de 2015 12:33
  • Amigo lamentablemente no me sirve, con el webBrowser todo anda perfecto, traigo mi texto, información y toda la descripción html y la guardo en mi base de datos sin problemas en un campo llamado descripcionHTML, lo que necesito es un formulario donde pueda trabajar o modificar esa descripcionHTML, pero que al cargarla en el formato de windows Form no me la muestre en HTML sino que me la muestre como generalmente lo ve un usuario normal, con su formato, o si posee filas y columnas, o si la descripcionHTML contiene imagen me muestre todo eso de forma normal en un Form.

    quiero que ese html sea transformado o representado en un windows form, no se si me explico bien. 

    Saludos!


    • Editado Miguel Oyarzo martes, 14 de julio de 2015 13:05 corrección
    martes, 14 de julio de 2015 13:03
  • alguien entiende mas menos como lo puedo realizar o hacia donde quiero llegar ?

    miércoles, 15 de julio de 2015 11:54
  • Hola:

    Entiendo que lo que quieres es un 'editor de html' en vb.net.

    La solución rápida es hacer un TextBox con el código HTML sin transformar (como lo tienes en la BBDD), y cuando cambias algo (escribiendo los códigos HTML correspondientes), mostrarlo en un webbrowser de la forma que te he puesto anteriormente.

    Si lo que quieres en poder hacerlo más profesional (seleccionar un texto, marcarlo como negrita con un botón, etc), mejor no te compliques y busca algo ya hecho ;-)

    Google: "WinForms HTML Editor"

    Un saludo

    miércoles, 15 de julio de 2015 12:04
  • amigo es algo así, un formulario donde interprete el codigo HTML, osea que lo trasnforme al formato visible para todos, este formato visible yo lo quiero modificar, no quiero tocar el html, o por ejemplo que busque una descripcion de algun producto en la Web, lo pego en el formulario y que por detras genere el codigo HTML y solo almacene el HTML en la Base de datos. me explico mejor ahora?

    es como si al hacer un preview del html, lo que veo en preview lo modifique, seria ideal si el webbrowser permitiera modificar su contenido.



    miércoles, 15 de julio de 2015 14:53
  • "es como si al hacer un preview del html, lo que veo en preview lo modifique, seria ideal si el webbrowser permitiera modificar su contenido."

    Has mirado/buscado lo que te dije: un editor de HTML.

    Google: "WinForms HTML Editor", resultados:

    http://www.codeproject.com/Articles/15559/A-Windows-Forms-based-text-editor-with-HTML-output

    http://blogs.msdn.com/b/carlnol/archive/2011/07/30/winforms-html-editor.aspx

    entre otros muchos, eres tu el que tiene que valorar el que más se adapta a tus necesidades.

    Un saludo



    • Editado LG DES viernes, 17 de julio de 2015 7:02
    • Propuesto como respuesta LG DES jueves, 20 de agosto de 2015 9:50
    viernes, 17 de julio de 2015 7:00
  • si, espero me sirva, ojala me transforme el html a texto tal cual se ve en la imagen del Link, que es lo que quiero y luego modificarlos, me ahorrare pero muchooo trabajo con este modulo y todo sera mucho mas profesional en mi web.

    mis saludos y cualquier cosa estaré comentando al respecto por dudas o detalles a dejar.

    Gracias.

    jueves, 20 de agosto de 2015 21:02
  • Podrias usar un componente llamado HTMLAgilityPACK

    http://htmlagilitypack.codeplex.com/

    Lo instalas desde nuget

    Install-Package HtmlAgilityPack

    lo interesante es que una de las funciones que tiene es que convierte el HTML a texto, por lo que ya como texto tendrías la información que buscas, sin necesidad del webbrowser

    en esta liga hay ejemplos

    http://htmlagilitypack.codeplex.com/sourcecontrol/changeset/view/62772#52179

    Saludos


    Ing. Carlos Monroy MCP, MCAD, MCSD, MCTS

    jueves, 20 de agosto de 2015 21:15
  • eso lo instalo como una librería o algo así, en el visual studio 2012.

    miren esta es la imagen que tengo y lo que extraigo de la base de datos, ahí mismo me gustaría interpretar ese contenido como texto con su formato correspondiente, es el texto en el textbox celeste.


    jueves, 20 de agosto de 2015 21:38
  • si instala HTMLAgilityPACK como libreria 

    mira te dejo esta referencia de nuget http://eduardosojo.com/2011/07/19/usuando-nuget-que-es-nuget/

    con esta puedes instalar el dll, y posteriormente usarlo

    Una vez que tengas la dll necesitas agregar esta clase

    using HtmlAgilityPack;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication2
    {
        public class HtmlToText
        {
            public HtmlToText()
            {
            }
    
            public string Convert(string path)
            {
                HtmlDocument doc = new HtmlDocument();
                doc.Load(path);
    
                StringWriter sw = new StringWriter();
                ConvertTo(doc.DocumentNode, sw);
                sw.Flush();
                return sw.ToString();
            }
    
            public string ConvertHtml(string html)
            {
                HtmlDocument doc = new HtmlDocument();
                doc.LoadHtml(html);
    
                StringWriter sw = new StringWriter();
                ConvertTo(doc.DocumentNode, sw);
                sw.Flush();
                return sw.ToString();
            }
    
            private void ConvertContentTo(HtmlNode node, TextWriter outText)
            {
                foreach (HtmlNode subnode in node.ChildNodes)
                {
                    ConvertTo(subnode, outText);
                }
            }
    
            public void ConvertTo(HtmlNode node, TextWriter outText)
            {
                string html;
                switch (node.NodeType)
                {
                    case HtmlNodeType.Comment:
                        // don't output comments
                        break;
    
                    case HtmlNodeType.Document:
                        ConvertContentTo(node, outText);
                        break;
    
                    case HtmlNodeType.Text:
                        // script and style must not be output
                        string parentName = node.ParentNode.Name;
                        if ((parentName == "script") || (parentName == "style"))
                            break;
    
                        // get text
                        html = ((HtmlTextNode)node).Text;
    
                        // is it in fact a special closing node output as text?
                        if (HtmlNode.IsOverlappedClosingElement(html))
                            break;
    
                        // check the text is meaningful and not a bunch of whitespaces
                        if (html.Trim().Length > 0)
                        {
                            outText.Write(HtmlEntity.DeEntitize(html));
                        }
                        break;
    
                    case HtmlNodeType.Element:
                        switch (node.Name)
                        {
                            case "p":
                                // treat paragraphs as crlf
                                outText.Write("\r\n");
                                break;
                        }
    
                        if (node.HasChildNodes)
                        {
                            ConvertContentTo(node, outText);
                        }
                        break;
                }
            }
        }
    }

    si la necesitas en visual basic en el mismo sitio esta

    y ya después solo la llamas en tu aplicación de esta forma

                HtmlToText htm = new HtmlToText();
                
               string txt htm.ConvertHtml(html);

    donde html es el valor que obtienes de la base de datos


    Ing. Carlos Monroy MCP, MCAD, MCSD, MCTS

    jueves, 20 de agosto de 2015 21:46
  • Amigo lo acabo de instalar y no sabia que el VS 2012 tiene la herramienta Nuget donde puedes instalar esas librerías para esta función. algo nuevo y beneficioso aprendí gracias a tu consejo el día de hoy, ahora entrare a probar que tal funciona el convertir el HTML a texto, voy a trabajar en eso y a jugar con los códigos un rato, muchísimas gracias.

    y te consulto, este código o algoritmo que me copiaste como ayuda no es .net verdad? es c# o me enrede??

    Gracias. :D


    • Editado Miguel Oyarzo viernes, 21 de agosto de 2015 3:28 modificacion de consulta
    viernes, 21 de agosto de 2015 1:58
  • es de C#, esta en la misma pagina de este componente, te lo copie por que es el único que necesitas para hacer lo que me dices, y bueno puedes explorar los paquetes de nuget, hay muchos paquetes que te pueden ayudar en tus actividades, cualquier cosa aquí andamos

    saludos


    Ing. Carlos Monroy MCP, MCAD, MCSD, MCTS

    viernes, 21 de agosto de 2015 14:47
  • Hola Miguel Oyarzo,

    No estoy seguro de tus objetivos pero para estos casos lo que se suele utilizar es un objeto RichTextBox que te permite dar formato al texto, ese objeto almacena su contenido en una columna de tipo Binary o VarBinary. Tanto guardar como leer el texto con formato es simple, como lo hicieses con cualquier otro campo de la tabla.

    viernes, 21 de agosto de 2015 15:26
  • mmm la verdad se ve bastante bueno lo que me indico Carlos Adan, algo había visto de lo que dices Williams Morales, pero no me sirvió para lo que deseo hacer. ahora lo que no se es como agregar este código a clase, y la clase a mi proyecto Visual Basic.Net

    me podrían explicar por favor, jamas he hecho esto!!!

    sábado, 22 de agosto de 2015 2:41
  • En que parte te quedaste atorado?

    Ing. Carlos Monroy MCP, MCAD, MCSD, MCTS

    lunes, 24 de agosto de 2015 15:31