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 ?
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.
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 ...
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;
... 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 !