IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Comment changer la police d'un treenode NodeFont?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut [C#] Comment changer la police d'un treenode NodeFont?
    Bonjour à tous! c'est le délire là, microsoft n'ont aucun testeur??!!? Je viens de changer la police d'un noeud sélectionné et le texte du noeud est coupé! Microsoft craint avec leurs composants, vraiment mal fait...

    Comment faire? J'ai constasté que si je changeais la police de l'arbre treeview les noeuds sont bien écrits...

    Merci pour toute suggestion...



    IRNBRU

  2. #2
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    J'ai eu le même problème avec le .Net 1.1, je n'ai pas testé avec .Net 2.0.

    Force est de constater que le treeview de .Net 1.1 cumulait les bugs.

  3. #3
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut
    Tu n'as pas réussi à contourner le problème?

    Je désespère, pas étonnant que je bloque à cause des bugs méchants comme celui ci... Du coup je prends du retard, .NET laisse à désirer parfois!

    Peut on accéder au noeud sélectionner et changer sa taille,

    j'ai essayé

    NoeudSel.Bounds.Width mais c'est en lecture seule arf!

    IRNBRU

  4. #4
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Non pas réussi, ce d'autant plus que je n'avais pas trouve d'évenement DrawItem, pour surchargé le dessin du noeud.

    J'ai laissé la font en normale en me disant que .Net 2.0 corrigerait cela, ce que je n'ai pas encore eu le temps de tester.

    Au pire, je crois avoir vu que .Net 2.0 propose l'évennement DrawItem.

  5. #5
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut
    je pense essayer de repeindre le noeud sélectionné avec graphics mais je ne sais pas trop comment m'y prendre. cela doit etre possible de repeindre le noeud en changeant la taille de la largeur du texte du noeud en fonction de la longueur du string?

    IRNBRU

  6. #6
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Avec .Net 1.1, je ne pense pas qu'on puisse faire autrement que faire un composant héritant du Treeview et tenter de surcharger directement la méthode correspondant au paint, dedans tu appelles la méthode paint normale, et tu t'arranges pour redessiner uniquement les noeuds qu'il faut, uo alors tu redessines tout completement, ce qui est peut être la solution la plus simple finalement...

    (apres celle de passer à .Net 2.0 si ca a été corrigé, bien entendu)

  7. #7
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut
    J'ai trouvé une solution, un peu barbare du genre Conan mais bon le résultat est présent Voilà le code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    //On met tout l'arbre entier en gras!
    ScenarioTree.Font=new Font(ScenarioTree.Font.FontFamily,ScenarioTree.Font.Size,FontStyle.Bold);
     
     
    //On enleve le gras à tous les noeud sauf celui qui est sélectionné (passé en paramètre!)
    EnleverGras(ScenarioTree.SelectedNode);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    private void EnleverGras(TreeNode Sel)
    {
     
    	ScenarioTree.BeginUpdate();
     
    	foreach(DictionaryEntry de in TableScenario)
    	{
    		TreeNode noeud = (TreeNode)de.Value;
     
     
    		if(Sel.Tag!=noeud.Tag)
    		{
     
    			noeud.NodeFont=new Font(ScenarioTree.Font.FontFamily,ScenarioTree.Font.Size,FontStyle.Regular);
    		}
     
    	}
     
    	ScenarioTree.EndUpdate();
     
    }
    Voilà

    IRNBRU

  8. #8
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Je ne sais pas quand sera appelée EnleverGras(), mais garde à l'esprit que si il y a N noeud dans ton arbre, à chaque appel de EnleverGras, ca va prendre N*xxx millisecondes de temps processeurs.

    Donc si tu penses que le nombre de noeud pour croire rapidement en fonction des actions de l'utilisateur, et si EnleverGras() est appelé à chaque click sur le treeview, ca risque de ramer au bout d'un certain temps d'utilisation.

  9. #9
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut
    je viens de tester avec plus de cent noeuds à la racine sans compter tous les autres noeuds enfants qui sont ajoutés en même temps. Je ne vois pas de lenteur... En tous cas je ne vois pas d'autre solution pour le moment...

    IRNBRU

  10. #10
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    J'ai réussi à trouver une machine où il y avait le framework 2.0, et j'ai pu tester : l'usage du bold dans un treeview est toujours aussi problématique...

    Edit : En fait non, ca semble corrigé... hormis lors du premier changement de font sur un noeud, lorsque celui-ci est sélectionné.

    Après c'est ok.

  11. #11
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut
    il y a toujours de bugs hein Une vraie passoire, on dirait que microsoft fait le strict minimum pour les composants afin de faire profiter aux vendeurs de composants tiers... Je devrais me mettre à l'apprentissage de composants personnalisés afin de faire un treeview sur mesure... mais c'est chaud apparemment faut maîtriser beaucoup de concepts.

    En fait dans ma technique je n'ai pas parcouru tout l'arbre pour modifier la police j'ai utilisé un composant collection. C'est bien plus rapide à survoler!

    IRNBRU

  12. #12
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Pour l'avoir déjà fait, oui c'est vraiment pas simple mais on y arrive.

    question pérennité, je préfère encore utiliser le treeview de MS, quitte à passer par DrawNode (et avoir un peu de flicker (scintillement en français) du au redessinement).

  13. #13
    Membre éclairé
    Avatar de irnbru
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2004
    Messages : 316
    Billets dans le blog
    1
    Par défaut
    Tu peux expliquer ton dernier point c'est un peu obscure

    De quel Treeview ? 1.1 ou 2.0? Toute suggestion des autres dieux de DOTNET sont la bienvenue au fait !

    IRNBRU

  14. #14
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Dans .net 2.0 il y a l'évennement DrawNode()

    si tu définit le mode de dessin du treeview à redessinement semi-manuel, le système va appeller l'évennement DrawNode() pour dessiner chaque noeud du treeview, dedans il te suffit de faire un e.Graphics.DrawString(....) pour dessiner la chaine de caractère associée au noeud de la façon dont tu veux (vu qu'il s'agit de dessin, tout est donc possible).

    Là ca marche bien, en revanche, à l'éxécution on peut observer des effets de scintillements très légers quand on passe d'un noeud à l'autre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] comment changer taille de police dans un entry gtk3 python 2.7
    Par alito dans le forum GUI
    Réponses: 2
    Dernier message: 07/10/2014, 20h09
  2. [WD-2002] comment changer la police?
    Par manslois dans le forum Word
    Réponses: 5
    Dernier message: 06/09/2009, 23h04
  3. Comment changer la police de caractère d'un menu
    Par RémiONERA dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/11/2005, 21h05
  4. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53
  5. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo