PDA

View Full Version : جستجو در tree



asar_001
شنبه 18 آذر 1385, 16:57 عصر
توی یک tree میخوام یکی از node هامو شناسایی کنم
البته بر اساس tag
چی کار باید بکنم

asar_001
یک شنبه 19 آذر 1385, 15:59 عصر
کسی نمی دونه باید چی کار کرد

javad_hosseiny
دوشنبه 20 آذر 1385, 08:14 صبح
می تونید با استفاده از یک حلقه و پیمایش کلیه نودهای درخت خود به مطلب موردنظر برسید
با استفاده از پارامتر 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

asar_001
یک شنبه 26 آذر 1385, 18:14 عصر
با تشکر از پاسخ شما
ولی من تازه این کد ها را تست کردم و درست کار نمی کرد
یعنی دستوراتی مثل select یا nodclick را نم شناخت
حتی count مقدار درستی را نشان نمیداد
(من درختم را در برنامه می سازم)

rezaei manesh
دوشنبه 27 آذر 1385, 08:04 صبح
treeview.Nodes.Count تعداد نود های ریشه رو نشان می دهد شما باید یک الگوریتمی بکار ببرید که نود را شناسایی و به درون زیر نود های اون رفته و عبارت را جستحو کند و بعد به نود پدر رفته و دیگر نود های فرزند رو پیمایش کند.
من الگوریتم اونو ندارم وگرنه برات میزاشتم

ghafoori
دوشنبه 27 آذر 1385, 13:59 عصر
من از یک تابع بازگشتی استفاده کردم این هم کد و برنامه


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
این هم خود برنامه5962
:چشمک:

asar_001
جمعه 01 دی 1385, 11:12 صبح
با تشکر از پاسخ شما
حالا من یه مشکل دیگه دارم
من توی درختم میخوام با RC روی هر node یک contex menue باز شود
اما مشکل اینجاست که برای انتخاب هر node باید اول روی اون کلیک کرد بعد RClick کرد
در غیر این صورتmenu مربوط به nod قبلی را می یاره
ایا راهی وجود داره که با راست کلیک روی یک نود اون نود انتخاب بشه

ghafoori
جمعه 01 دی 1385, 16:48 عصر
من خصوصیت خاصی برای اینکار پیدا نکردم ولی اگر کد زیر را در رویداد موس دان درخت قرار بدید مشکل شما حل می شود


If e.Button = Windows.Forms.MouseButtons.Right Then
Me.TreeView1.SelectedNode = e.Node
End If

asar_001
شنبه 02 دی 1385, 09:16 صبح
با سلام وتشکر مجدد از شما
این کد روی قسمت node ارور میده
اصلا e چنین خصوصیتی نداره
شاید به خاطر اینه که من از 2003 استفاده می کنم

leilav_1984
پنج شنبه 07 دی 1385, 10:37 صبح
در بعضی از رویدادهای Treeview که e از نوع TreeNode یا انواع مشابه اونه ; مثل رویداد NodeMouseClick می تونی واسه خیلی کارا از e.Node استفاده کنی
همین رویدادی که گفتم نودی رو که روش کلیک شده راحت واست مشخص می کنه و می تونی باهاش از طریق e.Node.Tag یا e.Node.Name و ... کار کنی