功能描述:
    现有的窗体,Spgl.cs、Xfgl.cs、Hykgl.cs等等。当点击主窗体(Form1.cs)中的Treeview(动态绑定)中的相应节点时,弹出相应的窗体,而主窗体不关闭,弹出的窗体在主窗体之上。问:要实现上面所说的功能应该怎样编写事件,求思路(如果能给点代码就更好了,呵呵)。
    顺便能不能解释下,使用node_click事件还是AfterSelect事件?两者有什么差别?
    小弟不甚感激。

绑定TreeView的方法(怎样跟这个方法结合实现事件?):public void CreatTreeViewRecursive(TreeNodeCollection nodes, DataTable dt, string jsbm)
  {
    
  TreeNode node;
  foreach (DataRow dr in dt.Rows)
  {
  if (!dr.IsNull(jsbm))
  {
  node = new TreeNode();
  node.Text = (string)dr[jsbm];
  node.Tag = (int)dr["ID"];
  nodes.Add(node);
  }
    
  }
  }

解决方案 »

  1.   

    树节点对应的有点击事件,然后获取你点击节点的Tag值,也就是你上面代码中node.Tag = (int)dr["ID"]的值,根据不同的值来Show你的定义的某个窗体(使用开关语句)
      

  2.   

    同样以你的方法      TAG 值  也是形成树的 关键
      

  3.   

    this.TreeView.Attributes.Add("onclick",string.Format("ClickTreeNode('{0}')",this.TreeView.ClientID));里面的ClickTreeNode 方法自己写,提示,可以用事件捕获点击的节点,然后触发窗口打开函数
      

  4.   

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                
                switch (Convert.ToInt32(((System.Windows.Forms.TreeView)(sender)).SelectedNode.Tag))
                {
                    case 1:
                        {
                            Form1 _fr = new Form1();
                            if (_fr.ShowDialog(this) == DialogResult.OK)
                            {
     
                            }
                        }
                        break;
                    case 2:
                        {
                            Form2 _fr = new Form2();
                            if (_fr.ShowDialog(this) == DialogResult.OK)
                            {                        }
                        }
                        break;
                    case 3:
                        {
                            Form3 _fr = new Form3();
                            if (_fr.ShowDialog(this) == DialogResult.OK)
                            {                        }
                        }
                        break;
                    case 4:
                        {
                            Form4 _fr = new Form4();
                            if (_fr.ShowDialog(this) == DialogResult.OK)
                            {                        }
                        }
                        break;
                    default: break;
                }
            }
      

  5.   

    恩。谢谢,你们。可不可以帮小弟解释几句代码。(((System.Windows.Forms.TreeView)(sender)).SelectedNode.Tag)什么意思?_fr.ShowDialog(this) == DialogResult.OK,是什么意思?
      

  6.   

    1.(((System.Windows.Forms.TreeView)(sender))//就是你创建的treeView对象
    2.(((System.Windows.Forms.TreeView)(sender)).SelectedNode//就是treeview对象中当前选择的节点
    3.fr.ShowDialog(this) == DialogResult.OK是用于判断你新弹出的窗口关闭时有数据传回到父窗体,你总不会就只是弹出一个窗口就不管了吧
      

  7.   

    1.(((System.Windows.Forms.TreeView)(sender))//就是你创建的treeView对象
    2. (((System.Windows.Forms.TreeView)(sender)).SelectedNode//就是treeview对象中当前选择的节点
    3.fr.ShowDialog(this) == DialogResult.OK是用于判断你新弹出的窗口关闭时有数据传回到父窗体,你总不会就只是弹出一个窗口就不管了吧----------1,2 就是类型转换,3 判断是不是点击了ok的按钮。。
      

  8.   

    TreeView tree = new TreeView();  
        private void Form1_Load(object sender, System.EventArgs e) 
        { 
            tree.Nodes.Add("Form1"); 
            tree.Nodes.Add("Form2"); 
            tree.Nodes.Add("Test"); 
            Panel1.Controls.Add(tree); 
            tree.Dock = DockStyle.Fill; 
            tree.AfterSelect += AfterSelect; 
        } 
        private void AfterSelect(object sender, TreeViewEventArgs e) 
        { 
            Panel2.Controls.Clear(); 
            switch (e.Node.Text) { 
                case "Form1": 
                    Form frm = new Form(); 
                    frm.Text = e.Node.Text; 
                    frm.TopLevel = false; 
                    Panel2.Controls.Add(frm); 
                    frm.Show(); 
                    break; 
                default: 
                    break; 
            } 
        }