Dariuosh
شنبه 11 خرداد 1387, 10:38 صبح
سلام
يکي از مشکلاتي که هميشه با TreeView داشتم اين بود که وقتي ميخواستم RunTime به اون Node اضافه کنم اگر تعداد Nodeها زياد بود و تودرتو عزا ميگرفتم ...
هر Node يه Property داره به نام FullPath که آدرس اون Node رو برميگردونه
مثلاً اينطوري
Node0\Node1\Node2\Node3
يعني از Root شروع ميکنه تا به اون Node مورد نظر برسه و اونارو با "\" که قابل تغيير هم هست از هم جدا ميکنه
براي رفع اين مشکل من دوتا متد به TreeView اضافه کردم
اولي FullPathAdder هستش که FullPath رو ميگره و خودش تمامه مسير رو درست ميکنه
دومي هم که FullPathDescAdder هستش ، همونه فقط يه فرقي تو FullPathاش ميکنه در واقع syntaxاش فرق ميکنه
"Node1";"اسم اول"\"Node2";"اسم دوم "\.....
يعني هر آيتم رو با " ; " به دو تيکه تبديل کردم که اولي Name ميشه و دومي Text هر کدومشون رو هم تو " (دابل کتيشن) گذاشتم
نکته : شما اگه با روال اولي Node اضافه کنيد Name و Text يه چيز ميشه و از اونجايي که احتمالاً ميخواهيد Text يه متن فارسي باشه و Name يه اسم Eng ميتونيد از روال دومي استفاده کنيد
PublicClass TreeView
Inherits System.Windows.Forms.TreeView
PublicSub FullPathAdder(ByVal Path AsString)
Const PathSpliter = "\"' Chr(92)
Dim PathItem() AsString
Dim i AsInteger
PathItem = Path.Split(PathSpliter)
For i = 0 To PathItem.Length - 1
Dim nodes() As Windows.Forms.TreeNode = Nothing
Dim ChildNode AsNew System.Windows.Forms.TreeNode
Dim ParentNode AsNew System.Windows.Forms.TreeNode
ChildNode.Name = PathItem(i)
If i = 0 Then
nodes = Me.Nodes.Find(ChildNode.Name, True)
If nodes.Length = 0 Then
Me.Nodes.Add(ChildNode)
EndIf
Else
nodes = Me.Nodes.Find(ChildNode.Name, True)
If nodes.Length = 0 Then
ParentNode.Name = PathItem(i - 1)
nodes = Me.Nodes.Find(ParentNode.Name, True)
ParentNode = nodes(0)
ParentNode.Nodes.Add(ChildNode)
EndIf
EndIf
Next
EndSub
PublicSub FullPathDescAdder(ByVal Path AsString)
Const PathSpliter = "\"' Chr(92)
Const NodeSpliter = ";"' Chr(59)
Dim PathItem() AsString
Dim NodeItm() AsString
Dim i AsInteger
PathItem = Path.Split(PathSpliter)
For i = 0 To PathItem.Length - 1
Windows.Forms.Application.DoEvents()
Dim nodes() As Windows.Forms.TreeNode = Nothing
Dim ChildNode AsNew System.Windows.Forms.TreeNode
Dim ParentNode AsNew System.Windows.Forms.TreeNode
NodeItm = PathItem(i).Split(NodeSpliter)
FillNode(ChildNode, NodeItm)
If i = 0 Then
nodes = Me.Nodes.Find(ChildNode.Name, True)
If nodes.Length = 0 Then
Me.Nodes.Add(ChildNode)
EndIf
Else
nodes = Me.Nodes.Find(ChildNode.Name, True)
If nodes.Length = 0 Then
NodeItm = PathItem(i - 1).Split(NodeSpliter)
FillNode(ParentNode, NodeItm)
nodes = Me.Nodes.Find(ParentNode.Name, True)
ParentNode = nodes(0)
ParentNode.Nodes.Add(ChildNode)
EndIf
EndIf
Next
EndSub
PrivateSub FillNode(ByRef Node As Windows.Forms.TreeNode, ByValParamArray Info() AsString)
With Node
.Name = Trim(Info(0).Replace(Chr(34), Chr(32)))
.Text = Trim(Info(1).Replace(Chr(34), Chr(32)))
EndWith
EndSub
EndClass
اگه جايش مشکل داشت يا پيشنهادي برا بهتر شدنش داشتيد ممنون ميشم متذکر شيد
موفق باشيد
يکي از مشکلاتي که هميشه با TreeView داشتم اين بود که وقتي ميخواستم RunTime به اون Node اضافه کنم اگر تعداد Nodeها زياد بود و تودرتو عزا ميگرفتم ...
هر Node يه Property داره به نام FullPath که آدرس اون Node رو برميگردونه
مثلاً اينطوري
Node0\Node1\Node2\Node3
يعني از Root شروع ميکنه تا به اون Node مورد نظر برسه و اونارو با "\" که قابل تغيير هم هست از هم جدا ميکنه
براي رفع اين مشکل من دوتا متد به TreeView اضافه کردم
اولي FullPathAdder هستش که FullPath رو ميگره و خودش تمامه مسير رو درست ميکنه
دومي هم که FullPathDescAdder هستش ، همونه فقط يه فرقي تو FullPathاش ميکنه در واقع syntaxاش فرق ميکنه
"Node1";"اسم اول"\"Node2";"اسم دوم "\.....
يعني هر آيتم رو با " ; " به دو تيکه تبديل کردم که اولي Name ميشه و دومي Text هر کدومشون رو هم تو " (دابل کتيشن) گذاشتم
نکته : شما اگه با روال اولي Node اضافه کنيد Name و Text يه چيز ميشه و از اونجايي که احتمالاً ميخواهيد Text يه متن فارسي باشه و Name يه اسم Eng ميتونيد از روال دومي استفاده کنيد
PublicClass TreeView
Inherits System.Windows.Forms.TreeView
PublicSub FullPathAdder(ByVal Path AsString)
Const PathSpliter = "\"' Chr(92)
Dim PathItem() AsString
Dim i AsInteger
PathItem = Path.Split(PathSpliter)
For i = 0 To PathItem.Length - 1
Dim nodes() As Windows.Forms.TreeNode = Nothing
Dim ChildNode AsNew System.Windows.Forms.TreeNode
Dim ParentNode AsNew System.Windows.Forms.TreeNode
ChildNode.Name = PathItem(i)
If i = 0 Then
nodes = Me.Nodes.Find(ChildNode.Name, True)
If nodes.Length = 0 Then
Me.Nodes.Add(ChildNode)
EndIf
Else
nodes = Me.Nodes.Find(ChildNode.Name, True)
If nodes.Length = 0 Then
ParentNode.Name = PathItem(i - 1)
nodes = Me.Nodes.Find(ParentNode.Name, True)
ParentNode = nodes(0)
ParentNode.Nodes.Add(ChildNode)
EndIf
EndIf
Next
EndSub
PublicSub FullPathDescAdder(ByVal Path AsString)
Const PathSpliter = "\"' Chr(92)
Const NodeSpliter = ";"' Chr(59)
Dim PathItem() AsString
Dim NodeItm() AsString
Dim i AsInteger
PathItem = Path.Split(PathSpliter)
For i = 0 To PathItem.Length - 1
Windows.Forms.Application.DoEvents()
Dim nodes() As Windows.Forms.TreeNode = Nothing
Dim ChildNode AsNew System.Windows.Forms.TreeNode
Dim ParentNode AsNew System.Windows.Forms.TreeNode
NodeItm = PathItem(i).Split(NodeSpliter)
FillNode(ChildNode, NodeItm)
If i = 0 Then
nodes = Me.Nodes.Find(ChildNode.Name, True)
If nodes.Length = 0 Then
Me.Nodes.Add(ChildNode)
EndIf
Else
nodes = Me.Nodes.Find(ChildNode.Name, True)
If nodes.Length = 0 Then
NodeItm = PathItem(i - 1).Split(NodeSpliter)
FillNode(ParentNode, NodeItm)
nodes = Me.Nodes.Find(ParentNode.Name, True)
ParentNode = nodes(0)
ParentNode.Nodes.Add(ChildNode)
EndIf
EndIf
Next
EndSub
PrivateSub FillNode(ByRef Node As Windows.Forms.TreeNode, ByValParamArray Info() AsString)
With Node
.Name = Trim(Info(0).Replace(Chr(34), Chr(32)))
.Text = Trim(Info(1).Replace(Chr(34), Chr(32)))
EndWith
EndSub
EndClass
اگه جايش مشکل داشت يا پيشنهادي برا بهتر شدنش داشتيد ممنون ميشم متذکر شيد
موفق باشيد