سؤال

ولدي imagelist حوالي 30 صورة، و 3 صور أود أن تكون قادرة على تراكب على أعلى من 30 عندما TreeNode في حالة معينة. وأنا أعلم أن ++ C TreeItem يمكن القيام بذلك مع TVIS_OVERLAYMASK على هذا النحو:

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

هل هناك أي آلية لتحقيق نتائج مماثلة في. NET؟

هل كانت مفيدة؟

المحلول

وأنا لا أعرف من وسيلة للقيام تراكب تلقائيا، ولكن يمكنك أن تفعل هذا مع مالك مرسومة عقدة شجرة.

نصائح أخرى

وأرى أن هذا السؤال لا يزال الحصول على وجهات النظر، لذلك أنا ما بعد تنفيذ ما اقترح ديفيد.

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
    }
}

لماذا لا مجرد توليد الصورة مع تراكب على الطلب حتى، لذلك لم يكن لديك لإضاعة دورات CPU الثمينة مثل هذا: http://madprops.org/blog/highlighting-treenodes-with- و-تراكب صورة / :

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); 
    } 
} 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top