Affichage dans un TreeView

bob94700 Messages postés 69 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 7 avril 2007 - 23 avril 2006 à 21:15
bob94700 Messages postés 69 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 7 avril 2007 - 7 mai 2006 à 13:23
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 ?

5 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
24 avril 2006 à 00:20
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.
0
bob94700 Messages postés 69 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 7 avril 2007 4
24 avril 2006 à 05:24
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 ...
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
25 avril 2006 à 03:28
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 );
0
bob94700 Messages postés 69 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 7 avril 2007 4
6 mai 2006 à 19:12
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+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bob94700 Messages postés 69 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 7 avril 2007 4
7 mai 2006 à 13:23
... 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 !
0
Rejoignez-nous