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都没有,我该怎么做呢?
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都没有,我该怎么做呢?
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类型。
}
在属性面板找到AfterCheck
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
foreach (TreeNode node in e.Node.Nodes)
{
node.Checked = e.Node.Checked; //我也不清楚是不是boolean类型。
}
我现在还没搞明白要不要用到递归,这个楼主你自己判断吧。还有子节点都不选或选时父节点相应的改变,这个能过AfterCheck事件的处理应该能解决的。
也是楼主自己琢磨吧~应该很简单。
{
foreach (TreeNode node in e.Node.Nodes)
{
node.Checked = true;
foreach (TreeNode node1 in node.Nodes)
treeView1_AfterCheck(sender, new TreeViewEventArgs(node1));
}
}
//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;
在TreeView中操作节点CheckBox需要注意的
http://blog.csdn.net/knight94/archive/2006/04/10/657658.aspx
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);
}
}
}