Affichage dans un TreeView

Signaler
Messages postés
69
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
7 avril 2007
-
Messages postés
69
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
7 avril 2007
-
voilà, j'ai un TreeView et je souhaiterais que les noeuds soient affichés avec un décallage de n points sur l'axe y (de façon a laisser une zone libre en haut du TreeView).
Est-ce que qqn a une idée sur la procédure ?
A voir également:

5 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut le TreeView du framework 2.0 contient une nouvelle propriété "DrawMode" qui permet de le dessiner complètement. J'ai pas fait assez de tests pour te dire si tu pourras avoir exactement le résultat que tu veux mais par exemple il est possible de ne pas dessiner le premier noeud pour obtenir un espace en haut du TreeView.
Messages postés
69
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
7 avril 2007
3
salut,
merci, mais pour l'instant je n'ai pas pu utilisé cette solution comme je veux :
- je ne souhaite pas "perdre" le 1 noeud, je voudrais juste le décaler
- actuellement, si je le décale avec cette solution, le "NodeMouseClick" ne possède plus le bon noeud dans la variable TreeNodeMouseClickEventArgs e, ce qui me gène ...
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Rajoute un premier TreeNode qui ne sert à rien, juste pour te permettre de ne pas le dessiner :

TreeView tree = new TreeView( );
TreeNode node0 = new TreeNode( "item0" );
TreeNode node1 = new TreeNode( "item1" );
node1.Nodes.Add( "item2" );
TreeNode node2 = new TreeNode( "item3" );
node2.Nodes.Add( "item4" );
tree.Nodes.AddRange( new TreeNode[ ] { node0, node1, node2 } );
tree.DrawMode = TreeViewDrawMode.OwnerDrawAll;
tree.DrawNode += delegate ( object sender, DrawTreeNodeEventArgs e )
{
if ( tree.Nodes[ 0 ] == e.Node )
return;


e.DrawDefault = true;
};


this.Controls.Add( tree );
Messages postés
69
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
7 avril 2007
3
Bonjour,
Avec un peu de retard, merci pour la piste que je vais mettre en place pour mon OwnerDraw.

Je met ici le squelette de la classe pour ce besoin :

public class MyTreeView : TreeView
{
public MyTreeView ()
{ }

private bool mShowHeader = false;

[Browsable (true)]
[DefaultValue (false)]
public bool ShowHearder
{
get { return mShowHeader; }
set { if (mShowHeader != value)
PermuteHeaderDisplay();
}
}
public new TreeNodeCollection Nodes
{
// Afin que le noeud header soit invisible à l'extérieur de la classe :
get { return (mShowHeader ? base.Nodes[0].Nodes : base.Nodes) ; }
}

/// <summary> Permute l'affichage du Header des colonnes p/r à la situation courante. </summary>
private void PermuteHeaderDisplay ()
{
mShowHeader = ! mShowHeader;
if (mShowHeader)
{
TreeNode nodeH = new TreeNode("Header");
MoveNodesCollection(base.Nodes, nodeH);
base.Nodes.Add(nodeH);
}
else
{
MoveNodesCollection(base.Nodes[0].Nodes, null);
base.Nodes.RemoveAt(0);
}
}

/// <summary> Déplace la collection de noeud indiquée vers un nouveau noeud Parent. </summary>
/// Collection de noeuds à déplacer.

/// Nouveau noeud parent (mettre null pour un déplacement à la racine du TreeView).

public void MoveNodesCollection (TreeNodeCollection prevList, TreeNode newParent)
{
if (prevList == null)
return;

bool newParent_in_Collection = prevList.IndexOf(newParent) >= 0;
int count = prevList.Count - (newParent_in_Collection ? 1 : 0);
int index = 0;
TreeNode node; TreeNodeCollection newList (newParent null ? base.Nodes : newParent.Nodes);

for (int i=0 ; i<count ; ++i)
{
if (newParent_in_Collection)
if (index == 0)
if (prevList[index] == newParent)
index = 1;

node = prevList[index];
prevList.Remove(node);
newList.Add(node);
}
}
}

Complété de ta méthode (avec prise en compte de la valeur de "mShowHaeder").
a+
Messages postés
69
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
7 avril 2007
3
... réflection faite, cette solution ne convient pas à mon besoin : car ce que je veux c'est une zone "libre" en haut de mon TreeView. Or l'ajout d'un noeud ne va pas car il est suceptible de bouger quand on fait défiler les noeuds !