locked
Utilisation du NodeMouseDoubleClick RRS feed

  • Question

  • Salut à tous.

    Par défaut, un double-click sur un noeud ouvre ou ferme ce noeud mais n'a pas d'effet sur les sous-noeud du noeud en question.
    J'aimerai ouvrir l'ensemble de l'arborescence qui est sous le noeud sur lequel l'utilisateur a fait un double-click.
    J'intercepte donc le NodeMoudeDoubleClick et j'ouvre tous les sous-noeuds.
    Pas de problème jusque là.
    Malheureusement, je ne trouve pas comment dire à .NET de ne pas effectuer l'opération par défaut suite au bouble-click.
    Résultat: mon code ouvre bien tous les sous-noeud, puis .NET reprend la main et effectue l'opération par défaut pour le double-click: c'est à dire qu'il referme les noeuds ouverts!

    Je ne vois pas de Cancel parmis les propriétés de l'événement...
    Avez-vous une idée ?

    Merci d'avance,
    Alain de Belgique.
     
    vendredi 18 juillet 2008 06:58

Réponses

  • Je ne sais pas si cela va répondre entièrement à votre problème, mais voici mon code avec les évènements BeforeExpand et BeforeCollapse.

    Code Snippet

    private bool isDoubleClick = false;


    private void treeView2_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                isDoubleClick = true;

                if (e.Node.IsExpanded)
                {
                    e.Node.Collapse();
                }
                else
                {
                    e.Node.ExpandAll();
                }
                isDoubleClick = false ;
            }


            private void treeView2_BeforeExpand(object sender, TreeViewCancelEventArgs e)

            {
                if (!isDoubleClick)
                {
                    e.Cancel = true;
                }
            }

            private void treeView2_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
            {
                if (!isDoubleClick)
                {
                    e.Cancel = true;
                }

    }


           
    vendredi 18 juillet 2008 17:40

Toutes les réponses

  • Moi j'ai réussi à le faire fonctionné avec ce code :
          
    Code Snippet

    private void treeView2_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)        

    {

    e.Node.ExpandAll();

    }



    vendredi 18 juillet 2008 12:22
  • Salut.

     

    Oui, tu as raison; le code que tu donnes fonctionne chez moi aussi... mais...

     

    si tu double-click une première fois sur un noeud fermé, tout s'ouvre: parfait.

    si tu double-click une seconde fois sur le noeud que tu viens d'ouvrir, tu devrais voir que, très rapidement le noeud se ferme puis se ré-ouvre... ce qui montre, à mon avis, que .NET exécute bien ta procédure mais qu'il exécute aussi un traitement par défaut...

     

    En fait, mon but est de, par un double-click:

    1- pouvoir ouvrir le noeud sélectionné et tous les sous-noeud si le noeud sélectionné est fermé

    2- pouvoir fermer le noeud sélectionné et tous les sous-noeud si le noeud sélectionné est ouvert.

     

    Je fais donc:

     

    Code Snippet

    Private Sub traitement() Handles NodeMouseDoubleClick

    If e.Node.IsExpanded Then

    e.Node.Collapse()

    Else

    e.Node.ExpandAll()

    End If

    End Sub

     

     

     

    Et je vois, à l'exécution que .NET fait, après ou avant mon traitement, le traitement standard pour un double-click.

    Le résultat est que ma procédure n'atteint pas son objectif: il est impossible d'ouvrir et de fermer un noeud...

    D'ailleurs, il n'y a pas de propriété Cancel associée à l'événement...

     

    Merci pour ton aide,

    Alain.

     

    vendredi 18 juillet 2008 13:21
  • Je ne sais pas si cela va répondre entièrement à votre problème, mais voici mon code avec les évènements BeforeExpand et BeforeCollapse.

    Code Snippet

    private bool isDoubleClick = false;


    private void treeView2_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                isDoubleClick = true;

                if (e.Node.IsExpanded)
                {
                    e.Node.Collapse();
                }
                else
                {
                    e.Node.ExpandAll();
                }
                isDoubleClick = false ;
            }


            private void treeView2_BeforeExpand(object sender, TreeViewCancelEventArgs e)

            {
                if (!isDoubleClick)
                {
                    e.Cancel = true;
                }
            }

            private void treeView2_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
            {
                if (!isDoubleClick)
                {
                    e.Cancel = true;
                }

    }


           
    vendredi 18 juillet 2008 17:40
  • Merci. C'est la bien la solution recherchée.

     

    Alain.

     

    mardi 22 juillet 2008 05:15