在WINFORM 程序中有,我想实现一个这样的效果, 
一个树形列表,在每个节点上可以同时显示图片与文字,图片与文字的位置不确定。如使用TREEVIEW , 在它的TREENODE 的TEXT 中要显示图片。这样的效果那位大哥能帮忙 想想思路。

解决方案 »

  1.   

    遞歸畫Tree,然后設定Tree的ImageList,ImageList里邊放入圖片,在遞歸的過程中,根據TreeNode的不同動態指定ImageIndex(對應ImageList中的Index),具體規則就得看你自己的了。如果樹節點不過可以不用考慮效率問題,如果深度比較大,應該考慮效率問題,不要一次全部畫完,初始化時候畫第一(或者二層),然后在操作中只畫選中的節點的子節點
      

  2.   

    ImageList 的中图片 只能显示在TreeNode 的节点前啊。 不能够显示在TEXT 属性上 我是要在TEXT 属性上显示图片与文字 类似需求。不过还是很感谢楼上的大哥的顶贴啊。
      

  3.   

    参考:
    this.treeView1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawText;private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
            {
                Rectangle r=new Rectangle(e.Bounds.X,e.Bounds.Y,e.Bounds.Width,e.Bounds.Height);
                e.Graphics.DrawImage(this.imageList1.Images[1], r);  //选择要画的image
             
                Pen p = new Pen(this.treeView1.ForeColor);
                e.Graphics.DrawString(e.Node.Text, this.treeView1.Font, p.Brush, e.Bounds.X, e.Bounds.Y + 5);  //写文字
            }
      

  4.   

    嗯, 这个是可以做的, 但还有一个问题, 我在重绘了节点后, 不能够选中整个节点了, 因为我图片是和文字不重叠的要求。还要我加了IMAGELIST 后 如何不让树的前面显示图片。 .SelectedImageIndex = -1; 还是没有用。
      

  5.   

    补充下, 重绘后 即我需要对 BOUNDS 的宽度要进行重新设置,如何做, 好象那个属性是只读的。
      

  6.   

    对于“还要我加了IMAGELIST 后 如何不让树的前面显示图片。 .SelectedImageIndex = -1; 还是没有用。”
    这点我知道了, TREEVIEW 的IMAGELIST 不要设就可以了。 另一点 重设BOUNDS 的高宽, 如何实现, 大哥们继续帮助下。 谢谢。