首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

新手求教TreeView控件有关问题

2013-08-09 
新手求教TreeView控件问题我是新手照着书去打代码的,有几个地方不明白,还有一个错误 又不会改 请高手帮忙p

新手求教TreeView控件问题
我是新手照着书去打代码的,有几个地方不明白,还有一个错误 又不会改 请高手帮忙


        private void Form1_Load(object sender, EventArgs e)
        {
            this.InitTreeView(this.treeView1);
            this.AddNode(this.treeView1);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.treeView1.ExpandAll();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.treeView1.CollapseAll();
        }


        public class Book
        {
            public string BookName = string.Empty;
            public string Author = string.Empty;
            public string Price = string.Empty;
        }

        private void InitTreeView(TreeView treeView)
        {
            treeView.CheckBoxes = false;
            treeView.FullRowSelect = true;
            ImageList imagelist = new ImageList();
            imagelist.Images.Add(new Icon ("0.ico"));
            imagelist.Images.Add(new Icon  ("1.ico"));
            imagelist.Images.Add(new Icon  ("2.ico"));
            treeView.ImageList = imagelist;
            treeView.LabelEdit = false;
            treeView.PathSeparator = "\";


            treeView.Scrollable = true;
            treeView.ShowLines = true;
            treeView.ShowPlusMinus = true;
            treeView.ShowRootLines = true;
            treeView.AfterSelect += new TreeViewEventHandler(treeView_AfterSelect);
        }

        void treeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            
            if (e.Node.Tag != null)                     //这里是什么意思啊?
            {
                Book book = e.Node.Tag as Book;         //这里呢?
                textBox1.Text = e.Node.FullPath;
                textBox2.Text = book.BookName;
                textBox3.Text = book.Author;
                textBox4.Text = book.Price;

            }
        }

        private void AddNode(TreeView treeView)
        {
            TreeNode MainNode = treeView.Nodes[0];  // 这里抛出错误: 指定的参数已超出有效值的范围。      要怎么办?    
            treeView.BeginUpdate();
            MainNode.Nodes.Clear();

            TreeNode Catalog1 = new TreeNode("计算机技术");
            Catalog1.ImageIndex = 0;


            Catalog1.SelectedImageIndex = 1;
            Book Book1 = new Book();
            Book1.BookName = "计算机技术";
            Book1.Author = "小王";
            Book1.Price = "20.00";
            TreeNode BookNode1 = new TreeNode(Book1.BookName);
            BookNode1.ImageIndex = 2;
            BookNode1.SelectedImageIndex = 2;
            BookNode1.Tag = Book1;           // 这里也不是很明白。。

            Book Book2 = new Book();
            Book2.BookName = "windows技术";
            Book2.Author = "小李";
            Book2.Price = "30.00";
            TreeNode BookNode2 = new TreeNode(Book2.BookName);
            BookNode2.ImageIndex = 2;
            BookNode2.SelectedImageIndex = 2;
            BookNode2.Tag = Book2;

            Catalog1.Nodes.Add(BookNode1);
            Catalog1.Nodes.Add(BookNode2);
            MainNode.Nodes.Add(Catalog1);


            TreeNode Catalog2 = new TreeNode("文学小说");
            Catalog2.ImageIndex = 0;
            Catalog2.SelectedImageIndex = 1;
            Book Book3 = new Book();
            Book3.BookName = "love";


            Book3.Author = "小张";
            Book3.Price = "600";
            TreeNode BookNode3 = new TreeNode(Book3.BookName);
            BookNode3.ImageIndex = 2;
            BookNode3.SelectedImageIndex = 2;
            BookNode3.Tag = Book3;

            Book Book4 = new Book();
            Book4.Author = "eeeee";
            Book4.BookName = "aaa";
            Book4.Price = "5649";
            TreeNode BookNode4 = new TreeNode(Book4.BookName);
            BookNode4.ImageIndex = 2;
            BookNode4.SelectedImageIndex = 2;
            BookNode4.Tag = Book4;


            Catalog2.Nodes.Add(BookNode3);
            Catalog2.Nodes.Add(BookNode4);
            MainNode.Nodes.Add(Catalog2);
            
            treeView.EndUpdate();
        }
        TreeView
[解决办法]
BookNode1.Tag = Book1;           // 这里也不是很明白。。 
用Tag属性(object类型)保存一个数据呗 
这个懂了上面就懂了 

------解决方案--------------------


1.if(e.Node.Tag != null) 判断选择的节点包含有关控件的数据的对象不为空 (光标移到Tag一般会出现提示信息,自己看看)
2.Book book = e.Node.Tag as Book; 数据类型object转换成Book引用类型
3.TreeNode MainNode = treeView.Nodes[0];当前树节点为空,所以你不能根据索引获取节点,如果没猜错,你按书本做漏做了点东西,可能作者已经在属性那边添加了一个根节点;如果没有,就这样修改:
  TreeNode MainNode=new TreeNode("root");
在private void AddNode方法 treeView.EndUpdate();这句代码前加上treeView.Nodes.Add(MainNode);
4. BookNode1.Tag = Book1; //设置包含有关控件的数据的对象,也就是把对象存储到Tag属性中

楼主参考下,可能看漏眼都有...
还有你应该现在msdn获取TreeView控件的知识,再联系课本练习
 

热点排行