关于在Winform下TreeView的使用问题

williams_cn 2008-05-15 09:16:43
在动态的生成了treeview的树结点
如+一级
  +二级
   +三级
 +结点一
  +结点二
   +结点三

这些结点我都是动态生成的

   private void BuildTree(TreeView tv)
{
DataSet dsFirstClassify = cmtb_FirstClassify.GetData("");
int nodeCount = dsFirstClassify.Tables[0].Rows.Count;
for (int i = 0; i < nodeCount; i++)
{
MyTreeNode tvnode = new MyTreeNode();
tvnode.Text = Convert.ToString(dsFirstClassify.Tables[0].Rows[i]["ClassifyName"]);
FirstClassify = tvnode.Text;
tv.Nodes.Add(tvnode);
LoadSecondClassifyTree(tvnode, FirstClassify);
}

}

private void LoadSecondClassifyTree(TreeNode node, string ParentID)
{
DataSet dsSecondClassify = cmtb_SecondClassify.GetData(ParentID);

if (dsSecondClassify.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < dsSecondClassify.Tables[0].Rows.Count; ++i)
{
MyTreeNode tvnode = new MyTreeNode();
tvnode.Text = Convert.ToString(dsSecondClassify.Tables[0].Rows[i]["SecondClassifyName"]);
SecondClassify = tvnode.Text;
node.Nodes.Add(tvnode);
}
}
}

我想请问题一下  我怎么可以做到在点击 "三级"  或者 "结点三" 的时候可以得到该结点的Text

在点击其他结点 如"一级" "二级"  "结点一  这些结点时 不响应事件
...全文
106 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
williams_cn 2008-05-18
  • 打赏
  • 举报
回复
beblue 如果他不是最小子结点  

即父结点的话  我怎么做才能 

在双击这个节点时  展开这个节点
williams_cn 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 beblue 的回复:]
自己都不积极叫别人怎么帮你
[/Quote]

现在手头没有编程环境 不好意思 下班回去后PM 给你
beblue 2008-05-16
  • 打赏
  • 举报
回复
自己都不积极叫别人怎么帮你
williams_cn 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jack20my 的回复:]
用LEVEL属性可以在时间触发是过滤掉一二级的NODE
[/Quote]

给点代码试试看
jack20my 2008-05-16
  • 打赏
  • 举报
回复
用LEVEL属性可以在时间触发是过滤掉一二级的NODE
williams_cn 2008-05-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 beblue 的回复:]
把错误贴出来大家一起研究下
[/Quote]

找不到结点
beblue 2008-05-16
  • 打赏
  • 举报
回复
取得该节点的Text:

首先你在绑定菜单到TreeNode时可以给TreeNode.Tag赋节点的值

treeNode.Tag=dataTable.Rows[i][j].ToString();


取值时就取treeNode.Tag
wzuomin 2008-05-16
  • 打赏
  • 举报
回复
我写了段代码,lz试试看行不?


Public Class Form1

Private TestTree As TreeView

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TestTree = New TreeView
AddHandler TestTree.NodeMouseDoubleClick, AddressOf NodeDoubleClick
For i As Integer = 0 To 10
Dim n As New TreeNode(String.Format("一级节点-Node{0}", i.ToString))
For j As Integer = 0 To 10
Dim nn As New TreeNode(String.Format("二级节点-Node{0}-{1}", i.ToString, j.ToString))
For k As Integer = 0 To 10
Dim nnn As New TreeNode(String.Format("三级节点-Node{0}-{1}-{2}", i.ToString, j.ToString, k.ToString))
nn.Nodes.Add(nnn)
Next
n.Nodes.Add(nn)
Next
TestTree.Nodes.Add(n)
Next
TestTree.Dock = DockStyle.Fill
Me.Controls.Add(TestTree)
End Sub

Private Sub NodeDoubleClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs)
If e.Node.Level >= 2 Then
MsgBox(e.Node.Text, MsgBoxStyle.Information, "Info")
Else
MsgBox("由于节点Level<2,不显示Text。")
End If
End Sub
End Class

wzuomin 2008-05-15
  • 打赏
  • 举报
回复
我记得Node节点有个Level属性可以判断的
beblue 2008-05-15
  • 打赏
  • 举报
回复
把错误贴出来大家一起研究下
williams_cn 2008-05-15
  • 打赏
  • 举报
回复
我在做遍历结点的时候就会出错

beblue 2008-05-15
  • 打赏
  • 举报
回复
private void pCheckParentNodes(TreeNode treeNode)
{
TreeNode oParentNode=treeNode.Parent;
if(oParentNode!=null)
{
if(oParentNode.Parent != null)
{
//调用方法
}
}
}
beblue 2008-05-15
  • 打赏
  • 举报
回复
通过判断父节点是否存在

如果一个节点没有父节点或者只有一个父节点,,那就是一级和二级菜单了吧

TreeNode _oParentNode=treeNode.Parent;
williams_cn 2008-05-15
  • 打赏
  • 举报
回复
Mark
williams_cn 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 beblue 的回复:]
不响应事件的话,你可以先判断是不是一级或者二级菜单 ,如果是就不调用你的方法,如果不是就调用方法,,,


把事件写到一个方法里
[/Quote]

怎么判断是一级还是二级菜单????

给点代码指导一下
beblue 2008-05-15
  • 打赏
  • 举报
回复
不响应事件的话,你可以先判断是不是一级或者二级菜单 ,如果是就不调用你的方法,如果不是就调用方法,,,


把事件写到一个方法里

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧