bob94700
Messages postés69Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention 7 avril 2007
-
23 avril 2006 à 21:15
bob94700
Messages postés69Date d'inscriptionjeudi 13 février 2003StatutMembreDerniè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 ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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.
bob94700
Messages postés69Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention 7 avril 20074 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 ...
bob94700
Messages postés69Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention 7 avril 20074 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;
bob94700
Messages postés69Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention 7 avril 20074 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 !