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

C# Discussion :

CheckBox sur Treenode


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Par défaut CheckBox sur Treenode
    Hello tout le monde,

    j'espère que l'on pourra m"aider car les TreeView de Monsieur CSharp ont décidé de me pousser à bout ....
    Ma question semble récurrente (d'après mes recherches sur Google) mais aucune réponse concrète ... alors je compte sur vous ;-)

    Bon, c'est simple ...
    je veux faire un arbre et mettre des checkbox sur certains noeuds seulement.

    TreeView propose une option CheckBox pour mettre des chekbox partout donc pas bien.
    Les TreeNode ne propose pas de mettre ou pas une checkBox.

    Enfin, après mais recherche, j'ai essayé de gérer le truc avec des images et ImageIndex/SelectedImageIndex mais cela ne va pas. En effet, les noeuds sans checkBox ne doivent pas contenir d'image et ca parait pas possible (images sur tous les noeuds ou pas d'image).

    Bref, j'ai vraiement besoin de votre aide SVP.
    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Par défaut
    Je ne sais pas trop pour ce qui est des checkbox, mais j'ai pu sans problème mettre des images à certains noeuds et pas d'autres.

    J'utilise la propriété StateImageList du TreeView pour y mettre les images.
    Puis quand j'ajoute un noeud, je définis ou pas la propriété StateImageIndex (avec l'index de l'image que je souhaite) pour avoir une image ou pas.

    Donc ça donne ça dans un premier temps:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ImageList ilist = new ImageList();
                Image im1 = Image.FromFile(@"path/im1.gif");
                Image im2 = Image.FromFile(@"path/im2.gif");
                Image im3 = Image.FromFile(@"path/im3.gif");
                ilist.Images.Add(im1);
                ilist.Images.Add(im2);
                ilist.Images.Add(im3);
                TreeView.StateImageList = ilist;
    puis si je veux une des images je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    node.StateImageIndex = i;
    //i égale à 0, 1 ou 2 dans ce cas
    Sinon par défaut il n'y en a pas.

    j'espère que ça t'aide.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Par défaut
    Merci bcp, ca me permet d'envisager une solution où je gérerai les checkBox avec des images (une pour checked et une pour unchecked).

    Reste que gérer les checkbox avec des images c'est ps le top, car il va falloir vérifier si, lors du clic sur le noeud, l'utilisateur a cliqué l'image (auquel cas on change d'image et d'état) ou si l'utilisateur a simplement cliqué sur le texte pour (dans mon cas) afficher un panel dans le reste de la fenetre .

    en tout cas merci pour ton aide ca me permet d'avancer enfin ... et si tu as une idée pour mon clic image/ou clic sur texte, nh'site pas ;-)

    merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    sinon une solution un peu "barbare" mais rudement efficace:

    Propriété : DrawMOde = OwnerDrawAll
    Event : DrawNode -> à gerer

    et tu te gère le draw dans ton DrawNode

    Comme ca, tu peux aussi rajouter le fait que la "checkbox" existe ou pas
    dans la propriété Tag de ton treeview et dans ton draw, si elle existe,
    tu la draw (checked ou pas) et si elle n'existe pas , tu ne la "draw" pas

    Pour se faire (le draw de la checkbox), tu peux t'appuyer sur ControlPaint
    qui fournit des methodes pour faire des dessins d'objets systèmes


    Si ca aide

    The Monz, Toulouse

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Par défaut
    merci o toulousain (me too ;-)

    Solution un peu barbare mais qui me parait plus acceptable que celle que je viens de mettre en place.

    J'herite TreeNode en ajoutant un état à ma classe.
    Je gère l'état et la checkbox associé avec StateImageList et SateImageIndex.

    Je vérifie si l'utilisateur clique sur '+' (collapse) ou sur la checkbox ou sur le texte du noeud avec Bounds.left et la largeur en pixel de mon image.

    Pouah !!!

    Je pense que je vais revenir vers ta solution (j'avais essayé de surchargé DrawNode mais sans succès ; j'avais pas mis 'DrawMOde = OwnerDrawAll', c'etait peut etre pour ca ...)

    merci bcp

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Salut

    de Rieng (toulouse power is back )

    J'ai fait un petit test hier, et ce que j'ai fait rapidemment, c'est un truc du genre

    Node.Tag = 1 (1 voulant dire sans checkBox)

    Et ensuite dans le DrawNode()

    if(e.Node.Tag == 0)
    {
    e.DrawDefault = true;
    }
    else
    {
    Graphics g = e.Graphics;
    g.Draw.... ce que tu veux

    Tu peux utiliser ControlPaint.DrawGrid() pour faire les pointillés

    Apres, ce qui "sera" chiant à faire, c'est gérer la "hierarchie" des noeuds

    L'astuce que j'ai trouvé (c'est une astuce, hein, donc, ya peut etre mieux)
    c'est de faire un

    int profondeur = Node.FullPath.Split(new string[]{"\\"},StringOption.None) .Length

    Cette profondeur te permet de savoir combien de "traits"il faudra eventuellement dessiné en fonction du nombre de noeud expansé, ou pas

    Enfin, bon, l'idée est de ce dire qu'il faut dessiner un certain nombre de traits
    en pointillé pour etre comme microsoft.. .donc, c'était pour cela

    The Monz, Toulouse

    }

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

Discussions similaires

  1. insérer un checkbox sur un datagrid
    Par jack_1981 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/06/2007, 21h31
  2. treeView checkboxes sur certains noeuds
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/03/2007, 10h50
  3. Contrôles (CheckBox) sur une feuille de calcul
    Par yogyx dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/12/2006, 09h54
  4. TTreeView + 4 CheckBox sur chaque Node
    Par smartland dans le forum Delphi
    Réponses: 1
    Dernier message: 17/06/2006, 02h00
  5. Réponses: 2
    Dernier message: 19/02/2006, 12h46

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