none
CSS textAlign en C# RRS feed

  • Question

  • Bonjour tout le monde,

    En créant un document DOM pour le WebBrowser

    doc = webBrowser1.Document;
    HtmlElement tab1 = doc.CreateElement("table");
    var head_1 = doc.CreateElement("thead");
    var td = doc.CreateElement("td");
    td.Id = "head1";
    td.InnerText = "Matin1";
    td.SetAttribute("colSpan", "3");
    

    Je peux utiliser SetAttribute pour fixer colSpan, ce qui va se traduire par une propriété de la cellule.

    <td colSpan="3">

    Pour l'alignement horizontal, en Javascript on peut faire ceci :

    document.getElementById("myTD").style.textAlign = "center"; 

    Mais en C# ?

    Style ne connaît pas textAlign. On peut utiliser SetAttribute, mais on obtiendra <td text-alignment="center">, qui est ignoré par le navigateur, au lieu de <td style="text-alignment:center">

    Lancer un script au chargement de la page ?

    vendredi 19 juin 2020 15:50

Réponses

Toutes les réponses

  • En attendant que quelqu'un ait une réponse, j'ai trouvé une usine à gaz pour gérer ça :

    https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-change-styles-on-an-element-in-the-managed-html-document-object-model

    Voilà ce qu'il convient de faire :

    if(styles == null)
    {
    	return;
    }

    StyleGenerator sg = new StyleGenerator();
    sg.ParseStyleString(td.Style);
    sg.SetStyle("text-align", "center");
    td.Style = sg.GetStyleString();


    La prochaine chose que je ferais bien là-dessus est déclarer une feuille de style dans le DOM avec C#.



    • Modifié Gloops vendredi 19 juin 2020 16:22
    • Marqué comme réponse Gloops lundi 29 juin 2020 21:41
    vendredi 19 juin 2020 16:08
  • 'text-align:center' fonctionne si je fais un test

    Par exemple, pour la valeur 5,000 =>

     webBrowser1.DocumentText = @"
                    <table>
                        <caption>Council budget (in £) 2018</caption>
                        <thead>
                            <tr>
                                <th scope='col'>Items</th>
                                <th scope='col'>Expenditure</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <th scope='row'>Donuts</th>
                                <td>3,000</td>
                            </tr>
                            <tr>
                                <th scope='row'>Stationery</th>
                                <td style='text-align:center'>5,000</td>
                              </tr>
                        </tbody>
                    </table>";

    samedi 20 juin 2020 11:45
  • Oui, d'accord, mais le but n'est pas d'aller bidouiller dans le HTML final, ça c'est rodé, mais de le générer en C#, lorsque l'utilisateur clique sur un bouton (voir là). Ceci permet d'injecter dans le HTML des valeurs qui ont été saisies.

    Peut-être aurais-je dû citer le code jusqu'à

    doc.Body.AppendChild(el);

    et ça aurait été plus clair.

    Si Microsoft s'est fendu d'un StyleGenerator, il devait y avoir une raison.

    D'ailleurs, curieusement, ça marche bien pour le document à imprimer, mais à la fin lorsque je veux mettre une marge en bas, je peux mettre ce que je veux dans el.Style, il est toujours nul.

    Ah mais je commence à comprendre que la possibilité de mettre "float:initial" dans le style semble dépendre de la position dans le fichier. À la fin j'ai voulu ajouter un élément pour avoir une marge en bas, et mon élément venait se mettre à droite de la dernière ligne. Je lui ai collé un "position=absolute" et ça m'a permis d'obtenir d'une autre façon ce que je voulais.

    En Javascript on fait

    document.getElementById("el").style.textAlignment = "center"

    (je cite de mémoire il peut y avoir un problème de casse)

    et ça ajoute le style à la propriété style, qui peut en comporter d'autres,

    mais en C# ça ne marche pas avec cette syntaxe (modifier style supprimerait tous les autres styles déjà affectés à l'élément), alors il fallait une solution de remplacement, au coût d'une syntaxe plus lourde.

    D'où le StyleGenerator.

    Bon alors je signale que dans le forum on n'a pas le droit d'écrire "position=absolute", ça perturbe, alors il faut mettre la première lettre de chaque mot dans un span.





    • Modifié Gloops lundi 29 juin 2020 21:44 (oublié un b)
    samedi 20 juin 2020 13:04
  • La prochaine chose que je ferais bien là-dessus est déclarer une feuille de style dans le DOM avec C#.

    Ça, c'est fait.

    Pour simplifier j'enlève la partie qui concerne le chemin du fichier :

    File.WriteAllText("Tension.html", EnteteFichier + doc.Body.OuterHtml + "\n</HTML>");
    

    avant ça on met ce qu'on veut dans EnteteFichier :

    string EnteteFichier = "<HTML><HEAD>\n<STYLE>\n</STYLE>\n"
    	+ "<LINK href=\"tension.css\" rel=\"stylesheet\" >\n</HEAD>";
    
    et on évite d'oublier de fermer une balise ou la feuille de style n'est pas chargée.

    Pour l'exécution, une solution parfois proposée est d'exécuter Firefox, avec le fichier HTML en argument, mais ça impose Firefox à l'utilisateur.

    En mettant le fichier HTML en argument principal de Process.Start, on ouvre le fichier avec le navigateur par défaut, déclaré dans les associations de fichiers de Windows.

    samedi 20 juin 2020 14:13
  • J'ai laissé le fil ouvert un temps pour voir si quelqu'un allait trouver plus élégant que le StyleGenerator, jusque là on va considérer que c'est la bonne réponse.

    lundi 29 juin 2020 21:40