2009-03-19 6 views
3

Ich habe eine Bildliste von ungefähr 30 Bildern und 3 Bildern, die ich gerne auf die 30 überlagern würde, wenn sich ein TreeNode in einem bestimmten Zustand befindet. Ich weiß, dass ein C++ TreeItem dies mit dem TVIS_OVERLAYMASK als solche kann:TreeNode Bildüberlagerung

SetItemState(hItem,INDEXTOOVERLAYMASK(nOverlayIndex), TVIS_OVERLAYMASK); 

Gibt es einen Mechanismus, um ähnliche Ergebnisse in .NET zu erreichen?

Antwort

0

Ich weiß nicht von einer Möglichkeit, die Überlagerung automatisch zu tun, aber Sie könnten dies mit einem Besitzer gezeichneten Baumknoten tun.

7

Ich sehe, dass diese Frage immer noch Aufrufe erhält, also werde ich die Implementierung von dem, was David vorgeschlagen hat, veröffentlichen.

internal class MyTree : TreeView 
{ 
    internal MyTree() : 
     base() 
    { 
     // let the tree know that we're going to be doing some owner drawing 
     this.DrawMode = TreeViewDrawMode.OwnerDrawText; 
     this.DrawNode += new DrawTreeNodeEventHandler(MyTree_DrawNode); 
    } 

    void MyTree_DrawNode(object sender, DrawTreeNodeEventArgs e) 
    { 
     // Do your own logic to determine what overlay image you want to use 
     Image overlayImage = GetOverlayImage(); 

     // you have to move the X value left a bit, 
     // otherwise it will draw over your node text 
     // I'm also adjusting to move the overlay down a bit 
     e.Graphics.DrawImage(overlayImage, 
      e.Node.Bounds.X - 15, e.Node.Bounds.Y + 4); 

     // We're done! Draw the rest of the node normally 
     e.DefaultDraw = true 
    } 
} 
+0

In meinem .NET 2.0 App Die Overlays befinden sich oben auf dem Treeview-Symbol. Verwenden Sie eine neuere Version des Frameworks? –

+0

mein Schlechter: Ich hatte DrawMode zu OwnerDrawAll nicht OwnerDrawText scheint jetzt gut zu funktionieren - danke –

+0

Es ist eine Schande, nach ein wenig mehr Tests finde ich seltsame schwarze Hervorhebung wie hier beschrieben: http://stackoverflow.com/q/ 1003459/417721 - wir sind .net 3.5 –

1

Warum nicht Sie erzeugen nur das Bild mit dem Overlay auf Nachfrage auch, so dass Sie nicht wertvolle CPU-Zyklen wie diese Abfälle müssen: http://madprops.org/blog/highlighting-treenodes-with-an-overlay-image/:

private void InitializeLinkedTreeImages() 
{ 
    foreach (string key in treeImages.Images.Keys) 
    { 
     Bitmap bmp = new Bitmap(treeImages.Images[key]); 
     Graphics g = Graphics.FromImage(bmp); 
     g.DrawImageUnscaled(Properties.Resources.Linked16, 0, 0); 
     treeImages.Images.Add(key + "Linked", bmp); 
    } 
} 
Verwandte Themen