توی یک tree میخوام یکی از node هامو شناسایی کنم
البته بر اساس tag
چی کار باید بکنم
توی یک tree میخوام یکی از node هامو شناسایی کنم
البته بر اساس tag
چی کار باید بکنم
کسی نمی دونه باید چی کار کرد
می تونید با استفاده از یک حلقه و پیمایش کلیه نودهای درخت خود به مطلب موردنظر برسید
با استفاده از پارامتر nodes.count تعداد کل نودها را بدست بیارید و در یک حلقه از ابتدا تا مقدار موردنظر عبارت جستجو خود را با توجه به محتوی نود (یا تگ نود موردنظر) قیاس کرده و در صورت موفقیت آمیز بودن شرط موردنظر نود موردنظر را سلکت کنید و اگر قرار است عملیاتی براثر کلیک اون نود رخ دهد آن را نیز فراخوانی کنید
مثال:
cProperty = 'word search'
_javab = 0
FOR IJ = 1 TO treeview.Nodes.Count
Tree_Text = treeview.Nodes.Item[ij].tag
IF (Tree_Text=cProperty ) then
_JAVAB = IJ
EXIT for
END IF
Next
if _javab<>0 then
treeview.Nodes(_JAVAB).Selected = true
ONODES = treeview.Nodes.Item[_JAVAB]
treeview.NOdeClick(ONODES)
treeview.SetFocus
end if
با تشکر از پاسخ شما
ولی من تازه این کد ها را تست کردم و درست کار نمی کرد
یعنی دستوراتی مثل select یا nodclick را نم شناخت
حتی count مقدار درستی را نشان نمیداد
(من درختم را در برنامه می سازم)
treeview.Nodes.Count تعداد نود های ریشه رو نشان می دهد شما باید یک الگوریتمی بکار ببرید که نود را شناسایی و به درون زیر نود های اون رفته و عبارت را جستحو کند و بعد به نود پدر رفته و دیگر نود های فرزند رو پیمایش کند.
من الگوریتم اونو ندارم وگرنه برات میزاشتم
من از یک تابع بازگشتی استفاده کردم این هم کد و برنامه
Private node As New TreeNode
Private t As New TreeNode
Public Sub search(ByVal text As String, ByVal tree As TreeNodeCollection)
For Each t In tree
If t.Tag = text Then
node.Nodes.Add(t.Text)
End If
If t.Nodes.Count > 0 Then
Me.search(text, t.Nodes)
End If
Next
End Sub
این هم خود برنامهtreenode_search.zip
با تشکر از پاسخ شما
حالا من یه مشکل دیگه دارم
من توی درختم میخوام با RC روی هر node یک contex menue باز شود
اما مشکل اینجاست که برای انتخاب هر node باید اول روی اون کلیک کرد بعد RClick کرد
در غیر این صورتmenu مربوط به nod قبلی را می یاره
ایا راهی وجود داره که با راست کلیک روی یک نود اون نود انتخاب بشه
من خصوصیت خاصی برای اینکار پیدا نکردم ولی اگر کد زیر را در رویداد موس دان درخت قرار بدید مشکل شما حل می شود
If e.Button = Windows.Forms.MouseButtons.Right Then
Me.TreeView1.SelectedNode = e.Node
End If
با سلام وتشکر مجدد از شما
این کد روی قسمت node ارور میده
اصلا e چنین خصوصیتی نداره
شاید به خاطر اینه که من از 2003 استفاده می کنم
در بعضی از رویدادهای Treeview که e از نوع TreeNode یا انواع مشابه اونه ; مثل رویداد NodeMouseClick می تونی واسه خیلی کارا از e.Node استفاده کنی
همین رویدادی که گفتم نودی رو که روش کلیک شده راحت واست مشخص می کنه و می تونی باهاش از طریق e.Node.Tag یا e.Node.Name و ... کار کنی