1、如何控制treeview的复选框(选择复节点,子节点就跟着选中,不选中,就跟着不选中。子节全部没有选中父节点就不选中,类似控制)。    我在treeviewAfterCheck事件中的代码如下:
  private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)  {
   if (this.treeView1.SelectedNode!=null && this.treeView1.SelectedNode.Nodes.Count>0)
   {
    for (int i = 0;i < this.treeView1.SelectedNode.Nodes.Count;i++)
    {
     this.treeView1.SelectedNode.Nodes[i].Checked = this.treeView1.SelectedNode.Checked;
     MessageBox.Show(this.treeView1.SelectedNode.Nodes[i].Checked.ToString());
    }
   }
  }    当运行到this.treeView1.SelectedNode.Nodes[i].Checked = this.treeView1.SelectedNode.Checked;这句的时候程序自动终止,跳回.net编辑区域。。搞不明白了。2、如果动态生成menu(从数据库中读出类似树形的结构,然后动态生成菜单);在item中设置值和显示的内容;通过值我可以进行一些操作,而显示的内容只用于显示。我找了item没有value属性,连tag都没有,我该怎么做呢?

解决方案 »

  1.   

    没试过,也没用过复选框TreeView
    for (int i = 0;i < this.treeView1.SelectedNode.Nodes.Count;i++)
        {
         this.treeView1.SelectedNode.Nodes[i].Checked = this.treeView1.SelectedNode.Checked;
         MessageBox.Show(this.treeView1.SelectedNode.Nodes[i].Checked.ToString());
        }
    改成
    foreach(Node node in this.treeView1.SelectedNode.Nodes)
    {
        node.Checked = true; //我也不清楚是不是boolean类型。
    }
      

  2.   

    自己从MenuItem派生一个类,在类里增加自己的属性。通过设置、读取这个属性值来进行你的操作。
      

  3.   

    我第一个问题的回复错了,至少应该是这样。
    在属性面板找到AfterCheck
    private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
    {
                foreach (TreeNode node in e.Node.Nodes)
                {
                        node.Checked = e.Node.Checked; //我也不清楚是不是boolean类型。
     }
    我现在还没搞明白要不要用到递归,这个楼主你自己判断吧。还有子节点都不选或选时父节点相应的改变,这个能过AfterCheck事件的处理应该能解决的。
    也是楼主自己琢磨吧~应该很简单。
      

  4.   

    private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                foreach (TreeNode node in e.Node.Nodes)
                {
                    node.Checked = true;
                    foreach (TreeNode node1 in node.Nodes)
                        treeView1_AfterCheck(sender, new TreeViewEventArgs(node1));
                }
            }
      

  5.   

    第二个问题:
                //supose the array of strings are fetched from database,count is dynamic 
                string[] str = new string[5];
                str[0] = "sdfg";
                str[1] = "ghjhj";
                str[2] = "cbcb";
                str[3] = "32415";
                str[4] = "8631532";            // create MainmenuC;
                MenuItem[] menuitem = new MenuItem[str.Length];
                for (int i = 0; i < str.Length; i++)
                    menuitem[i] = new MenuItem(str[i]);
                MainMenu mainmenu = new MainMenu(menuitem);
                this.Menu = mainmenu;
      

  6.   

    to 1
    在TreeView中操作节点CheckBox需要注意的
    http://blog.csdn.net/knight94/archive/2006/04/10/657658.aspx
      

  7.   

    第一个问题:
    private void treePeople_AfterCheck(object sender, TreeViewEventArgs e)
    {
           if (e.Action != TreeViewAction.Unknown)
           {
                if (e.Node.Nodes.Count > 0)
                {
                    this.CheckAllChildNodes(e.Node, e.Node.Checked);
                }
            }
    }
    private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
    {
           foreach (TreeNode node in treeNode.Nodes)
           {
                node.Checked = nodeChecked;
                if (node.Nodes.Count > 0)
                {
                     this.CheckAllChildNodes(node, nodeChecked);
                }
            }
    }