2009-02-19 9 views
1

Nous avons du code qui utilise .net Windows.Forms.TreeView. Lorsqu'un élément de la vue est sélectionné, le code nePosition de défilement horizontal lors de la sélection d'un élément winvews treevew

treeView.BeginUpdate(); 
// ... some stuff ... 
SendMessage(treeView.Handle, WM_HSCROLL, SB_LEFT, 0); 
treeView.EndUpdate(); 

Il en est ainsi que l'affichage de l'arborescence ne défile pas droit (ce qui est le comportement par défaut - pour afficher autant de l'étiquette de l'élément sélectionné possible I supposer, mais au détriment de cacher une partie de la structure de l'arbre). Malheureusement, lorsque l'arborescence contient 30 000 éléments et que ce code est appelé lors d'un clic droit, les résultats dans le menu contextuel prennent quelques secondes (assez pour être déconcertants).

Si vous supprimez Begin/EndUpdate, le menu contextuel apparaît instantanément, mais vous obtenez un contretemps gênant lorsque vous voyez la vue se déplacer vers la droite, puis revenir sur le bord gauche. La suggestion de se débarrasser du parchemin "repousser vers le bord gauche" rencontre une certaine résistance.

J'ai essayé de filtrer SB_RIGHT sur l'arborescence, mais cela ne semble pas vraiment être utilisé lorsque le contrôle se déplace pour afficher l'étiquette.

Donc, y a-t-il un moyen de maintenir l'arborescence dans sa position de défilement horizontale actuelle lorsque l'élément sélectionné n'est pas Begin/EndUpdate et le lag ou le twitch correspondant?

Répondre

0

Avez-vous essayé de remplir uniquement les nœuds de l'arbre "à la demande?"

Cela devrait entraîner moins de nœuds dans l'arborescence et donc un traitement plus rapide de BeginUpdate.

+0

Oui, nous le faisons déjà. –

+0

Intéressant Je vais devoir voir ce que mon collègue a fait. Je sais que j'ai vu quelque chose de similaire dans le code au travail. Si je peux trouver un exemple de travail avec un nombre de nœuds d'arbres similaire, je vais éditer ma réponse et l'afficher. –

Questions connexes