如何避免WinForms TreeView在选择项目时更改图标

43

我在一个小的C#/Winforms应用程序中尝试使用树形视图。我已经以编程方式将ImageList分配给了树形视图,并且所有节点的图标都显示得很好,但是当我单击一个节点时,它的图标会更改(变成了ImageList中第一个图像)。如何使图标保持不变?

顺便说一下:“SelectedImageIndex”设置为“(无)”,因为我不知道要设置什么,因为每个节点的图像索引都不同(我猜?)。

更新:这是应用程序的代码(我正在使用Visual Studio Express 2008):

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            treeView1.BeginUpdate();
            treeView1.Nodes.Clear();
            treeView1.Nodes.Add("root","Project", 0);  

            treeView1.Nodes[0].Nodes.Add("Foo", "Foo", 2);
            treeView1.Nodes[0].Nodes[0].Nodes.Add("Fizz", "Fizz", 3);
            treeView1.Nodes[0].Nodes[0].Nodes.Add("Buzz", "Buzz", 3);

            treeView1.Nodes[0].Nodes.Add("Bar", "Bar", 1);
            treeView1.Nodes[0].Nodes[1].Nodes.Add("Fizz", "Fizz", 2);
            treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes.Add("Buzz", "Buzz", 3);

            treeView1.EndUpdate();
            treeView1.ImageList = imageList1;
        }
    }
}
3个回答

61

只需将每个节点的SelectedImageIndex属性设置为与ImageIndex相同的值即可。因此,如果您是通过编程方式创建节点:

        TreeNode node = new TreeNode("My Node");
        node.ImageIndex = 1;
        node.SelectedImageIndex = 1;

或者您可以在构造函数中指定全部内容:

        TreeNode node = new TreeNode("My Node", 1, 1);

如果你是在设计时添加节点,你可以使用设计时编辑器完成相同的操作。你只需要在节点级别而不是TreeView级别设置SelectedImageIndex即可。


太好了,我知道这应该很简单,只是不知道在哪里找。谢谢!(我还需要等7分钟才能接受这个解决方案,等可以的时候我会接受的)。 - S.C. Madsen

3

你也可以使用以下代码:

TreeNode Node = eventArgs.Node;
Node.SelectedImageKey = Node.ImageKey;

0

在这里可以做的是,我们可以利用TreeView的HitTest方法,在给定点处提供节点信息。然后使用该信息,我们可以将图像重置为以前的状态。将SelectedImageIndex设置为ImageIndex。就像这样

var selectedNodeInfo = treeView.HitTest(treeView.PointToClient(Cursor.Position));
selectedNodeInfo.Node.SelectedImageIndex = selectedNodeInfo.Node.ImageIndex;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接