在获取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很弱。无法相信我自己没有找到答案。
答案 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.ImageList
和TreeView.SelectedImageList
,因为第四个参数引用第二个列表。
如果在选择节点时发生此错误,请不要再查看。
答案 3 :(得分:0)
Yossarian发布的解决方案以及Application.EnableVisualStyles()和Application.Run()之间流行的“Call Application.DoEvents()”为我工作。
在Addy Santo发布的解决方案经过多次抨击,咬牙切齿和谷歌搜索之后,就成功了。