Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET TreeView赢得';不显示图像_C#_.net_Winforms - Fatal编程技术网

C# .NET TreeView赢得';不显示图像

C# .NET TreeView赢得';不显示图像,c#,.net,winforms,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控件以显示节点图像时出现问题。下面的代码有时有效,但在其他时间无法显示任何图像


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分配给它,图像键肯定在图像集合中

编辑:

我的谷歌浏览器很弱。不敢相信我自己没有找到这个答案。

谷歌快速搜索找到了这个答案:

引用该页中的

如果包含TreeView的表单在外接程序启动函数中实例化,如下所示,则会出现图标

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

然后它们就不出现了。此外,如果禁用了“VisualStyles”(XP新增),则图标在这两种情况下都可以工作


事实上,谷歌在上面的帖子中提供了一些有用的信息:

“这是Windows XP视觉样式实现中的一个已知错误。某些控件(如ImageList)在应用程序调用应用程序之前创建时,无法正确初始化。EnableVisualStyles()。C#的Program.cs中的常规Main()实现可避免此问题。感谢发回!”


因此,基本上,在初始化imagelist之前,确保调用Application.EnableVisualStyles()。

根据[添加方法部分](在MSDN库中,您需要同时填充
TreeView.imagelist
TreeView.SelectedImageList
,因为第四个参数指向第二个列表


如果在选择节点时出现此错误,请不要再进一步查看。

Yossarian发布的解决方案和流行的“在Application.EnableVisualStyles()和Application.Run()之间调用Application.DoEvents()”对我来说都很有效

经过多次挥舞、咬牙切齿和谷歌搜索,由发布的解决方案成功了

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();

    }