我需要实现这样一个功能: 一个treeview中有两级节点,每个节点前都有复选框,当我选中根节点的时候,当前根节点下的所有子节点同时也被选中并且禁用所有子节点,当选择其中一个子节点时,他的根节点被选中。在选择节点时做判断,根节点最多能选择三项,子节点最多能选择两项!
解决方案 »
- 为什么checkbox要点很多下才能选中?
- C#中Winform编程的3个问题
- 无效的 URI: 由于存在一个冒号(“:”),因此应为端口,但未能分析该端口。
- .cs文件里 GB2312与UTF-8格式的转换。
- C#中如何调一个自己写好的类?????
- 如何禁止winform中DataGrid自动新增行?
- javascript传值给TextBox(求助)
- 简单问题:Regex匹配中文字符时如何实现类似原子零宽度断言的功能?
- windows 2003下如何安装与使用SQL Sever?高分送。
- 要把byte[]转换成int型,怎么办啊?谢谢,一定给分
- 如何让每一行的DataGridViewComboBoxColumn值不一样
- 算法大比拼(看看谁是真真的高手)?(java C# C++ C的高手请进)
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
TreeNode tn = new TreeNode();
tn.Name = "root";
tn.Text = "一级节点"; TreeNode tn1 = new TreeNode();
TreeNode tn2 = new TreeNode();
TreeNode tn3 = new TreeNode();
tn1.Text = "二级节点";
tn2.Text = "二级节点";
tn3.Text = "二级节点"; tn.Nodes.Add(tn1);
tn.Nodes.Add(tn2);
tn.Nodes.Add(tn3); treeView1.Nodes.Add(tn);
treeView1.ExpandAll();
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode tn = e.Node; if (tn.Checked)
{
if (tn.Name == "root")
{
tn.Checked = true;
for (int i = 0; i < tn.Nodes.Count; i++)
{
tn.Nodes[i].Checked = true;
}
}
else
{
tn.Checked = true;
tn.Parent.Checked = true;
}
}
else
{
if (tn.Name == "root")
{
tn.Checked = false;
for (int i = 0; i < tn.Nodes.Count; i++)
{
tn.Nodes[i].Checked = false;
}
}
else
{
tn.Checked = false;
bool check = false;
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (tn.Parent.Nodes[i].Checked)
{
check=true;
break;
}
} if (!check)
{
tn.Parent.Checked = false;
}
}
}
}
}
}
//这里是JQuery的语法,给TreeView控件的CheckBox加载事件
//当选中父节点时,子节点全选中;当不选择父节点,但选择一个子节点时,父节点默认也选中
<script>
$(document).ready(function()
{
var funcStr="$(\":checkbox\").click(function(){CheckedChildNode(this);});";
eval(funcStr);
});
function valid()
{
var ids="";
for(var i=0;i<$("input:checked").size();i++)
{
ids+=$("input:checked").eq(i).val()+",";
}
if(ids=="")
{
return confirm("没选中任何信息,是否继续?");
}
return true;
}function CheckedChildNode(obj)
{
var divs = obj.parentElement.parentElement.parentElement.parentElement.nextSibling;
if(divs!=null && divs.tagName=="DIV")
{
divs=divs.getElementsByTagName("input");
for(var i=0;i<divs.length;i++)
{
if(divs[i].type=="checkbox")
{
divs[i].checked=obj.checked;
}
}
}
if(obj.checked)
{
divs = obj.parentElement.parentElement.parentElement.parentElement.parentElement.previousSibling;
var ips=divs.getElementsByTagName("input");
for(var i=0;i<ips.length;i++)
{
if(ips[i].type=="checkbox")
{
ips[i].checked=obj.checked;
}
}
while(divs.parentElement!=null)
{
divs=divs.parentElement;
if(divs!=null && divs.tagName=="DIV")
{
divs=divs.previousSibling;
var ips=divs.getElementsByTagName("input");
for(var i=0;i<ips.length;i++)
{
if(ips[i].type=="checkbox")
{
ips[i].checked=obj.checked;
}
}
}
}
}
}
</script>
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
TreeNode tn = new TreeNode();
tn.Name = "root";
tn.Text = "一级节点";
tn.ToolTipText = "adfsfsdaf";
TreeNode tn1 = new TreeNode();
TreeNode tn2 = new TreeNode();
TreeNode tn3 = new TreeNode();
tn1.Text = "二级节点";
tn2.Text = "二级节点";
tn3.Text = "二级节点";
tn.Nodes.Add(tn1);
tn.Nodes.Add(tn2);
tn.Nodes.Add(tn3); treeView1.Nodes.Add(tn);
treeView1.ExpandAll();
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode tn = e.Node; if (tn.ForeColor == Color.Gray)
{
return;
} if (tn.Checked)
{
if (tn.Name == "root")
{
tn.Checked = true;
for (int i = 0; i < tn.Nodes.Count; i++)
{
tn.Nodes[i].Checked = true;
tn.Nodes[i].ForeColor = Color.Gray;
tn.Nodes[i].BackColor = Color.White;
}
}
else
{
tn.Checked = true;
tn.Parent.Checked = true;
}
}
else
{
if (tn.Name == "root")
{
tn.Checked = false;
for (int i = 0; i < tn.Nodes.Count; i++)
{
tn.Nodes[i].Checked = false;
tn.Nodes[i].ForeColor = treeView1.ForeColor;
tn.Nodes[i].BackColor = treeView1.BackColor;
}
}
else
{
tn.Checked = false;
bool check = false;
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (tn.Parent.Nodes[i].Checked)
{
check=true;
break;
}
} if (!check)
{
tn.Parent.Checked = false;
}
}
}
} private void treeView1_BeforeCheck(object sender, TreeViewCancelEventArgs e)
{
TreeNode tn = e.Node;
if (tn.Parent==null)
{
return;
}
if (tn.Parent.Checked&&tn.ForeColor == Color.Gray)
{
e.Cancel = true;
return; }
}
}
}
{ } private void tvTypeListSWYY_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode tn = e.Node; if (tn.Checked)
{
if (tn.Parent == null)
{
tn.Checked = true;
for (int i = 0; i < tn.Nodes.Count; i++)
{
tn.Nodes[i].Checked = true;
//需要在这里,把子节点禁用!但根节点不禁用,如果根节点取消选择的时候,子节点再启用!
}
}
else
{
tn.Checked = true;
tn.Parent.Checked = true;
int j = 0;
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (tn.Parent.Nodes[i].Checked)
{
j++;
if (j > 2)
{
MessageBox.Show("小类最多选2项", "提示信息", MessageBoxButtons.OK);
tn.Parent.Nodes[i].Checked = false;
return;
}
} }
}
}
else
{
if (tn.Parent == null)
{
tn.Checked = false;
for (int i = 0; i < tn.Nodes.Count; i++)
{
tn.Nodes[i].Checked = false;
}
}
else
{
tn.Checked = false;
bool check = false;
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (tn.Parent.Nodes[i].Checked)
{
check = true;
break;
}
} if (!check)
{
tn.Parent.Checked = false;
}
}
} int k = 0;
for (int i = 0; i < tvTypeListSWYY.Nodes.Count; i++)
{
if (tvTypeListSWYY.Nodes[i].Checked)
{
k++;
if (k > 3)
{
MessageBox.Show("大类最多选3项", "提示信息", MessageBoxButtons.OK);
tvTypeListSWYY.Nodes[i].Checked = false;
for (int j = 0; j < tvTypeListSWYY.Nodes[i].Nodes.Count; j++)
{
tvTypeListSWYY.Nodes[i].Nodes[j].Checked = false;
}
return;
}
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} bool ischeck = false;
bool ischeck2 = false; private void Form1_Load(object sender, EventArgs e)
{
TreeNode tn = new TreeNode();
tn.Name = "root";
tn.Text = "一级节点1"; TreeNode tnn = new TreeNode();
tnn.Text = "一级节点2"; TreeNode tnnn = new TreeNode();
tnnn.Text = "一级节点3"; TreeNode tnnnn = new TreeNode();
tnnnn.Text = "一级节点4"; TreeNode tn1 = new TreeNode();
TreeNode tn2 = new TreeNode();
TreeNode tn3 = new TreeNode();
TreeNode tn4 = new TreeNode();
TreeNode tn5 = new TreeNode(); tn1.Text = "二级节点";
tn2.Text = "二级节点";
tn3.Text = "二级节点";
tn4.Text = "二级节点";
tn5.Text = "二级节点";
tn.Nodes.Add(tn1);
tn.Nodes.Add(tn2);
tn.Nodes.Add(tn3);
tn.Nodes.Add(tn4);
tn.Nodes.Add(tn5); treeView1.Nodes.Add(tn);
treeView1.Nodes.Add(tnn);
treeView1.Nodes.Add(tnnn);
treeView1.Nodes.Add(tnnnn);
treeView1.ExpandAll();
}
private void treeView1_BeforeCheck(object sender, TreeViewCancelEventArgs e)
{
if (ischeck2)
{
return;
}
TreeNode tn = e.Node;
if (tn.ForeColor == Color.Gray)
{
e.Cancel = true;
return;
}
} private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (ischeck)
{
return;
} TreeNode tn = e.Node; if (tn.Level == 0)
{ if (tn.Checked)
{
int j = 0;
for (int i = 0; i < tn.Nodes.Count; i++)
{
j++;
if (j <= 2)
{
tn.Nodes[i].Checked = true;
}
tn.Nodes[i].ForeColor = Color.Gray;
tn.Nodes[i].BackColor = Color.White;
} }
else
{
for (int i = 0; i < tn.Nodes.Count; i++)
{
ischeck2 = true;
tn.Nodes[i].Checked = false;
ischeck2 = false;
tn.Nodes[i].ForeColor = treeView1.ForeColor;
tn.Nodes[i].BackColor = treeView1.BackColor;
}
} int k = 0;
for (int i = 0; i < treeView1.Nodes.Count; i++)
{
if (treeView1.Nodes[i].Checked)
{
k++;
}
}
if (k >= 3)
{
for (int i = 0; i < treeView1.Nodes.Count; i++)
{
if (!treeView1.Nodes[i].Checked)
{
treeView1.Nodes[i].ForeColor = Color.Gray;
treeView1.Nodes[i].BackColor = Color.White;
}
} return;
}
else
{
for (int i = 0; i < treeView1.Nodes.Count; i++)
{
if (!treeView1.Nodes[i].Checked)
{
treeView1.Nodes[i].ForeColor = treeView1.ForeColor;
treeView1.Nodes[i].BackColor = treeView1.BackColor;
}
}
}
} else
{
if (tn.Parent != null)
{
ischeck = true;
tn.Parent.Checked = true;
ischeck = false;
int k = 0;
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (tn.Parent.Nodes[i].Checked)
{
k++;
}
}
if (k == 0)
{
ischeck = true;
tn.Parent.Checked = false;
ischeck = false;
}
if (k >= 2)
{
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (!tn.Parent.Nodes[i].Checked)
{
tn.Parent.Nodes[i].ForeColor = Color.Gray;
tn.Parent.Nodes[i].BackColor = Color.White;
}
} return;
}
else
{
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (!tn.Parent.Nodes[i].Checked)
{
tn.Parent.Nodes[i].ForeColor = treeView1.ForeColor;
tn.Parent.Nodes[i].BackColor = treeView1.BackColor;
}
}
}
} }
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool ischeck = false;
bool ischeck2 = false; private void Form1_Load(object sender, EventArgs e)
{
TreeNode tn = new TreeNode();
tn.Name = "root";
tn.Text = "一级节点1"; TreeNode tnn = new TreeNode();
tnn.Text = "一级节点2"; TreeNode tnnn = new TreeNode();
tnnn.Text = "一级节点3"; TreeNode tnnnn = new TreeNode();
tnnnn.Text = "一级节点4"; TreeNode tn1 = new TreeNode();
TreeNode tn2 = new TreeNode();
TreeNode tn3 = new TreeNode();
TreeNode tn4 = new TreeNode();
TreeNode tn5 = new TreeNode(); tn1.Text = "二级节点";
tn2.Text = "二级节点";
tn3.Text = "二级节点";
tn4.Text = "二级节点";
tn5.Text = "二级节点";
tn.Nodes.Add(tn1);
tn.Nodes.Add(tn2);
tn.Nodes.Add(tn3);
tn.Nodes.Add(tn4);
tn.Nodes.Add(tn5); treeView1.Nodes.Add(tn);
treeView1.Nodes.Add(tnn);
treeView1.Nodes.Add(tnnn);
treeView1.Nodes.Add(tnnnn);
treeView1.ExpandAll();
} private void treeView1_BeforeCheck(object sender, TreeViewCancelEventArgs e)
{
if (ischeck2)
{
return;
}
TreeNode tn = e.Node;
if (tn.ForeColor == Color.Gray)
{
e.Cancel = true;
return;
} } private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (ischeck)
{
return;
} TreeNode tn = e.Node; if (tn.Level == 0)
{ if (tn.Checked)
{
for (int i = 0; i < tn.Nodes.Count; i++)
{
ischeck2 = true;
tn.Nodes[i].Checked = true;
ischeck2 = false;
tn.Nodes[i].ForeColor = Color.Gray;
tn.Nodes[i].BackColor = Color.White;
} }
else
{
for (int i = 0; i < tn.Nodes.Count; i++)
{
ischeck2 = true;
tn.Nodes[i].Checked = false;
ischeck2 = false;
tn.Nodes[i].ForeColor = treeView1.ForeColor;
tn.Nodes[i].BackColor = treeView1.BackColor;
}
} int k = 0;
for (int i = 0; i < treeView1.Nodes.Count; i++)
{
if (treeView1.Nodes[i].Checked)
{
k++;
}
}
if (k >= 3)
{
for (int i = 0; i < treeView1.Nodes.Count; i++)
{
if (!treeView1.Nodes[i].Checked)
{
treeView1.Nodes[i].ForeColor = Color.Gray;
treeView1.Nodes[i].BackColor = Color.White;
}
} return;
}
else
{
for (int i = 0; i < treeView1.Nodes.Count; i++)
{
if (!treeView1.Nodes[i].Checked)
{
treeView1.Nodes[i].ForeColor = treeView1.ForeColor;
treeView1.Nodes[i].BackColor = treeView1.BackColor;
}
}
}
} else
{ if (ischeck2)
{
return;
}
if (tn.Parent != null)
{
ischeck = true;
tn.Parent.Checked = true;
ischeck = false;
int k = 0;
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (tn.Parent.Nodes[i].Checked)
{
k++;
}
}
if (k == 0)
{
ischeck = true;
tn.Parent.Checked = false;
ischeck = false;
}
if (k >= 2)
{
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (!tn.Parent.Nodes[i].Checked)
{
tn.Parent.Nodes[i].ForeColor = Color.Gray;
tn.Parent.Nodes[i].BackColor = Color.White;
}
} return;
}
else
{
for (int i = 0; i < tn.Parent.Nodes.Count; i++)
{
if (!tn.Parent.Nodes[i].Checked)
{
tn.Parent.Nodes[i].ForeColor = treeView1.ForeColor;
tn.Parent.Nodes[i].BackColor = treeView1.BackColor;
}
}
}
}
}
}
}
}