Treeview中所有节点的TAG值为什么重复

Treeview中所有节点的TAG值为何重复
大家好,有个关于Treeview节点的TAG的问题请教:

定义了一个类,如下:
        public class TreeNodeTag
        {
            public Int16 tree_level;   // 节点级别
            public string tn_name;    // 节点名,即程序名称,用于启动程序
            public string tn_type;      // 节点类型
            public string tn_caption;  // 节点显示标题
        };  

有个TREEVIEW控件名为tvwSys,在初始化时,为此TREEVIEW添加节点,代码如下:
private void FrmControl_Load(object sender, EventArgs e)
        {
            TreeNodeTag tvn_s = new TreeNodeTag(); 

            /// 为Treeview控件添加3个根节点
            TreeNode tn1 = new TreeNode();
            tvn_s.tree_level = 1;
            tvn_s.tn_name = "NOVEL";
            tvn_s.tn_caption = "小说";
            tn1.Name = "NOVEL";
            tn1.Text = "小说";
            tn1.Tag = tvn_s;               // 把类赋值给节点2的TAG
            tvwSys.Nodes.Add(tn1);

            TreeNode tn2 = new TreeNode();
            tvn_s.tree_level = 1;
            tvn_s.tn_name = "MOVIE";
            tvn_s.tn_caption = "电影";
            tn2.Name = "MOVIE";
            tn2.Text = "电影";
            tn2.Tag = tvn_s;

            tvwSys.Nodes.Add(tn2);           // 把类赋值给节点的TAG

           TreeNode tn3 = new TreeNode();
            tvn_s.tree_level = 1;
            tvn_s.tn_name = "IT";
            tvn_s.tn_caption = "IT";
            tn3.Name = "IT";
            tn3.Text = "IT";
            tn3.Tag = tvn_s;

            tvwSys.Nodes.Add(tn3);           // 把类赋值给节点3的TAG

       }

在鼠标点击事件中的代码 如下
        private void tvwSys_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeNode tr = new TreeNode();
            tr = tvwSys.SelectedNode;

            //object Ttag = tvwSys.SelectedNode.Tag;   //获取TAG的值到对象tvn_tag中

            
            TreeNodeTag Ttag = tr.Tag as TreeNodeTag;   //获取TAG的值到对象tvn_tag中

            MessageBox.Show(Ttag.tn_caption);
        }

但是,在鼠标点击节点时,无论点击哪个节点,消息框弹出TAG节点标题,均是最后一个节点的TAG的标题“IT”。

请问这是为何?谢谢!
------解决思路----------------------
 tvn_s = new TreeNodeTag(); 
添加到每个tvn_s.tree_level = 1;之前。