1 ضمیمه
ایجاد search و سطح بندی در tree view
باسلام و عرض خسته نباشید خدمت تمامی دوستان گرامی
دوستان بنده در فایل پیوستی یک نمونه از نمودار tree view قرار دادم که میخوام در واقع از طریق ایجاد ارتباط بین این نمودار و یک دیتابیس اکسس ، اطلاعاتم رو از طریق این نمودار وارد دیتابیس کنم
اما مشکلم در اینجاست:
1) چون حجم اطلاعات و تعداد شاخه های این نمودار در پروژه من خیلی زیاد میشه و دسترسی سریع به اطلاعات هم برام سخت میشه ، میخواستم توسط یک تکست باکس و یک دکمه برای این نمودار یه سیستم سرچ ساده درست کنم که با وارد کرد کلمه مدنظر اون شاخه منطبق با کلمه کلیدی select شود و با زدن دوباره دکمه به شاخه منطبق دیگر (منطبق با کلمه کلیدی) برود مثل find next برنامه هایی مثل word و اکسل و...
2) یک سری دکمه هم وجود دره که میخوام با کلیک بر روی اونها سطح مشخصی از نمودار به نمایش دربیاد
مثلاً وقتی رو دکمه سطح1 کلیک میکنم فقط سطح یک نمودار باز بشه و وقتی روی دکمه سطح3 کلیک میکنم نمودار فقط تا سطح3 نمایش داده بشه نه بیشتر و همینطور الی آخر
مثلاً الان زمانیکه بر روی منوی Expand کلیک میکنیم تمام سطوح نمودار نمایش داده میشه.
بعد یک سئوال دیگه هم دارم:
چرا کار با این tree view اینقدر سخته؟
آیا کنترل مشابهی وجود ندارد که کار باهاش راحت تر و برقراری ارتباطش با دیتابیس هم راحت تر باشه وجود نداره؟
ممنون
نقل قول: ایجاد search و سطح بندی در tree view
باسلام
با سرچ در اینترنت این کدها رو پیدا کردم:
Search a treeview for a item
The following code can be used to search a treeview for an item of text:
'Purpose : Performs a recallable search on a treeview.
'Inputs : tvFind The treeview to search.
' sFindItem The text to search for (supports wildcards)
' [bSearchAll] If True will search all nodes of the treeview, else
' will only search top level nodes.
' [lItemIndex] If specified will return this matching index.
' eg, if set to 2 then will return the second node which matches the search criteria.
'Outputs : Returns the a matching treeview node or nothing if the item is not found
Function TreeViewFindNode(tvFind As TreeView, ByVal sFindItem As String, Optional bSearchAll As Boolean = True, Optional lItemIndex As Long = 1) As Node
Dim oThisNode As Node, bSearch As Boolean, lInstance As Long
sFindItem = UCase$(sFindItem)
bSearch = True
For Each oThisNode In tvFind.Nodes
If bSearchAll = False Then
'Only Search Top Level Nodes
If (oThisNode.Parent Is Nothing) = False Then
bSearch = False
Else
bSearch = True
End If
End If
If bSearch Then
If (UCase$(oThisNode.Text) Like sFindItem) = True Then
lInstance = lInstance + 1
If lInstance >= lItemIndex Then
'Found matching item
Set TreeViewFindNode = oThisNode
Exit For
End If
End If
End If
Next
End Function
Sub Test()
Dim lItemIndex As Long, oFoundNode As Node
Do
lItemIndex = lItemIndex + 1
Set oFoundNode = TreeViewFindNode(tvAccounts, "Red", True, lItemIndex)
If tvAccounts Is Nothing Then
'Didn't find any more items
Exit Do
End If
oFoundNode.EnsureVisible
If MsgBox("Found " & oFoundNode.Text & vbNewLine & "Find next matching item? ", vbQuestion + vbYesNo) = vbNo Then
Exit Do
End If
Loop
End Sub
میشه از تون خواهش کنم این کدها رو در قالب یک پروژه vb بیارید.
در ضمن یک سایت رو هم پیدا کردم که درش یک sample و نمونه فایل گذاشته بود
ولی متاسفانه نتوستم اون رو در vb شبیه سازی کنم
این هم آدرسش:
http://www.dotnetheaven.com/Uploadfi...1-703568f063ff
این سایت هم درش نمونه کد هست :
http://vbcity.com/forums/p/35880/148075.aspx
ممنون میشم با الهام از منابع فوق بنده رو راهنمایی بفرمائید.
نقل قول: ایجاد search و سطح بندی در tree view
براي جستجو:
Dim j As Integer, c As Integer
Private Sub Command1_Click()
For j = c To TV1.Nodes.Count - 1
If TV1.Nodes.Item(j).Text = text1.Text Then
'MsgBox TV1.Nodes.Item(j).FullPath
c = c + 3
TV1.Nodes.Item(j).Selected = True
TV1.SetFocus
Exit For
End If
Next
End Sub
نقل قول: ایجاد search و سطح بندی در tree view
سلام
کدهارو اجرا کردم ارور داد؟
آیا این کدها سرچ رو بصورت find next هم انجام میده
آخه احتمال داره در یک نمودار شاخه درخت ما از یک اسم 3 تا داشته باشیم.
منون
3 ضمیمه
نقل قول: ایجاد search و سطح بندی در tree view
باسلام
نقل قول:
براي جستجو:
کد:
Dim j As Integer, c As Integer
Private Sub Command1_Click()
For j = c To TV1.Nodes.Count - 1
If TV1.Nodes.Item(j).Text = text1.Text Then
'MsgBox TV1.Nodes.Item(j).FullPath
c = c + 3
TV1.Nodes.Item(j).Selected = True
TV1.SetFocus
Exit For
End If
Next
End Sub
من کدها رو طبق فایل ضمیمه که خدمتتون گذاشتم جاگذاری کردم ولی خطای زیر رو دریافت کردم:
من در واقع میخوام با استفاده از یک حلقه تمامی node های این tree view مورد جستجو قرار بگیره و هر وقت که مقدارش با مقدار text1 برابر بود سلکت بشه
مثال:
فرض کنید در یک نمودار شاخه درخت من از کلمهABC چهار تا دارم
عملیات سرچ انجام میشه اولین ABC پیدا میشه بعد
https://barnamenevis.org/attach...1&d=1283364193
فقط قبلش باید یه حلقه تعریف بشه که این عملیات جستجو در تمام شاخه ها انجام بشه.
For Each node In tv1.nodes
ممنون میشم کمکم کنید
1 ضمیمه
نقل قول: ایجاد search و سطح بندی در tree view
بیا علی جان کدتو درستش کردم
مشکلش خیلی ساده بود
من فقط این قسمتو
For j = c To TV1.Nodes.Count - 1
رو به این صورت تغییر دادم
For j = 1 To TV1.Nodes.Count - 1
چون Node شماره 0 وجود نداشت ارور می داد و من بهش گفتم از node شماره 1 شروع کن
موفق باشی:قلب:
نقل قول: ایجاد search و سطح بندی در tree view
سلام
ممنون از همه شما عزیزان
ولی در همون مثال بالا مثلاً از کلمه cat دوتا در این نمودار وجود دارد
با این کد فقط یکی از اونها پیدا میشه نه هر دو اونها!؟
نقل قول: ایجاد search و سطح بندی در tree view
Dim j As Integer, c As Integer
Private Sub Command1_Click()
'TV1.Nodes(j).Text
'MsgBox TV1.Nodes.Item(9).Text
For j = c To TV1.Nodes.Count
'MsgBox CStr(j) & ": " & TV1.Nodes.Item(j).Text
If TV1.Nodes.Item(j).Text = text1.Text Then
'List1.AddItem j
'MsgBox TV1.Nodes.Item(j).FullPath
c = j + 1
'MsgBox TV1.Nodes.Item(j).Text
TV1.Nodes.Item(j).Selected = True
TV1.SetFocus
Exit For
End If
c = 1
Next
End Sub
Private Sub Form_Load()
c = 1
End Sub
نقل قول: ایجاد search و سطح بندی در tree view
ممنون parselearn عزیز از جوابی که دادی واقعاً عالی بود
فقط 3 تا درخواست کوچیک:
الف) اگر موردی یافت نشد پیغام دهد که "موردی یافت نشد"
ب) زمانیکه به پایان حلقه رسید و تمام موارد رو جستجو کرد پیغام بدهد که "پایان جستجو"
ج) آیا این امکان هست که بعد از پایان حلقه و اتمام جستجو بازدن روی کمه جستجو دوباره حلقه جستجو تکرار گردد؟
آقا شرمنده
خیلی شما رو اذیت کردم و زحمت دادم
واقعاً ممنون
نقل قول: ایجاد search و سطح بندی در tree view
1 - يك متغيير منطقي
2- شرط پاسخ 3
3- اين كد رو بعد از حلقه اضافه كنيد
If TV1.Nodes.Count + 1 = c Then c = 1
Dim b As Boolean
'TV1.Nodes(j).Text
'MsgBox TV1.Nodes.Item(11).Text
For j = c To TV1.Nodes.Count
'MsgBox CStr(j) & ": " & TV1.Nodes.Item(j).Text
If TV1.Nodes.Item(j).Text = text1.Text Then
'List1.AddItem j
'MsgBox TV1.Nodes.Item(j).FullPath
c = j + 1
'MsgBox TV1.Nodes.Item(j).Text
TV1.Nodes.Item(j).Selected = True
TV1.SetFocus
b = True
Exit For
End If
Next
If b = False Then MsgBox "Not Found"
If TV1.Nodes.Count + 1 = c Then c = 1
نقل قول: ایجاد search و سطح بندی در tree view
در مورد كد بالا در صورتي كه كلمه car را دوبار جستجو كنيد. پيغام Not Found دريافت مي كنيد
بهتره يك تابع جدا براي جستجو از ابتداي TV ايجاد كنيد كه در صورتي كه نبود پيغام دهد
If b = False and CheckExis(text1.Text) Then MsgBox "Not Found"
كدش هم با كد اوليه شما فرقي نداره
نقل قول: ایجاد search و سطح بندی در tree view
ممنون
از پاسختون
این کد رو به کدوم قسمت از sub اضافه کنم؟
نقل قول: ایجاد search و سطح بندی در tree view
If b = False Then MsgBox "Not Found"
Replace->
If b = False & CheckExis(text1.Text) Then MsgBox "Not Found"
CheckExis مثلا تابع چك كردن شما از ابتداي TV
نقل قول: ایجاد search و سطح بندی در tree view
ممنون
کد رو اجرا میکنم به من ارور میده
مگه نباید از قیل تابع CheckExis رو قبلاً ایجاد کرده باشم؟
نقل قول: ایجاد search و سطح بندی در tree view
باسلام
میخوام در text1 عملیات جستجو به تمام کلمات مشابه هم بیرون کشیده شود
مثلاً زمانی که کلمه خودکار رو سرچ میزنم
تمام کلمات زیر مثلاً سرچ شود
خودکار آبی
خودکار سبز
خودکار سیاه
خلاصه هر کلمه ای که درش خودکار وجود دارد
فکر کنم باید از عملگر like استفاده کنم
ولی نمیدونم چطوری
میشه راهنماییم کنید؟
ممنون
نقل قول: ایجاد search و سطح بندی در tree view