Winform TreeViewコントロールテクニック
4052 ワード
開発時にtreeviewコントロールをよく使って組織構造やディレクトリ構造を表示します.通常、属性checkedboxsと組み合わせて選択します.キャンセルの操作は次のように選択します.キャンセルの小例です.ノードを選択するとき、ノードにサブノードがある場合は、すべてのサブノードを選択できます.ノードの選択を解除し、現在のノードに親ノードが同時に存在する場合は、親ノードの選択を解除します.
private void trvPost_AfterCheck(object sender, TreeViewEventArgs e)
{
// , Checked
if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard)
{
SetChildNodeCheckedState(e.Node, e.Node.Checked);
SetParentNodeCheckedState(e.Node, e.Node.Checked);
}
}
//
public void SetChildNodeCheckedState(TreeNode currNode, bool isCheckedOrNot)
{
if (currNode.Nodes == null) return; //
foreach (TreeNode tmpNode in currNode.Nodes)
{
tmpNode.Checked = isCheckedOrNot;
SetChildNodeCheckedState(tmpNode, isCheckedOrNot);
}
}
//
public void SetParentNodeCheckedState(TreeNode currNode, bool isCheckedOrNot)
{
if (currNode.Parent == null) return; //
if (isCheckedOrNot) // ,
{
currNode.Parent.Checked = isCheckedOrNot;
SetParentNodeCheckedState(currNode.Parent, isCheckedOrNot);
}
else // , , ,
{
bool checkedFlag = false;
foreach (TreeNode tmpNode in currNode.Parent.Nodes)
{
if (tmpNode.Checked)
{
checkedFlag = true;
break;
}
}
currNode.Parent.Checked = checkedFlag;
SetParentNodeCheckedState(currNode.Parent, checkedFlag);
}
}