.NET TreeView不会显示图像

时间:2008-09-24 07:37:30

标签: c# .net winforms

在获取TreeView控件以显示节点图像时遇到问题。以下代码有时有效,但有时无法显示任何图像。


private TreeNode AddNodeForCore(TreeNode root, Core c) {
    string key = GetImageKey(c);
    TreeNode t = root.Nodes.Add(c.Name, c.Name, key, key);
    t.Tag = c;
    return t;
}

请注意,当它失败时,TreeView无法显示任何节点的任何图像。 TreeView确实为其分配了ImageList,图像键肯定在图像集合中。

编辑:
我的google-fu很弱。无法相信我自己没有找到答案。

4 个答案:

答案 0 :(得分:9)

上面谷歌帖子的有用位实际上是:

“这是Windows XP视觉样式实现中的已知错误。某些控件(如ImageList)在应用程序调用Application.EnableVisualStyles()之前创建时未正确初始化。正常的Main()实现在C#的Program.cs中避免这种情况。感谢回帖!“

基本上,保证在初始化图像列表之前调用Application.EnableVisualStyles()。

答案 1 :(得分:2)

快速谷歌搜索找到了这个答案:http://forums.microsoft.com/MSDN/ShowPost.aspx?siteid=1&PostID=965968

从该页面

引用

  

如果包含TreeView的Form在下面的加载项启动函数中实例化,则会出现图标!

public partial class ThisApplication
{
    Form1 frm;

    private void ThisApplication_Startup(object sender, System.EventArgs e)
    {
        frm  = new Form1();
        frm.Show();

    }
  

但是,如果用类实例化,如下所示:

public partial class ThisApplication
{
    Form1 frm = new Form1();


    private void ThisApplication_Startup(object sender, System.EventArgs e)
    {
                    frm.Show();

    }
  

然后它们不会出现。此外,如果禁用“VisualStyles”(新的XP),则图标在两个实例中都有效。

答案 2 :(得分:1)

根据[添加方法部分](MSDN库中的http://msdn.microsoft.com/en-us/library/ydx6whxs(VS.80).aspx),您需要同时填充TreeView.ImageListTreeView.SelectedImageList,因为第四个参数引用第二个列表。

如果在选择节点时发生此错误,请不要再查看。

答案 3 :(得分:0)

Yossarian发布的解决方案以及Application.EnableVisualStyles()和Application.Run()之间流行的“Call Application.DoEvents()”为我工作。

Addy Santo发布的解决方案经过多次抨击,咬牙切齿和谷歌搜索之后,就成功了。