View Full Version : مشکل در کار با ابزار Tree View
  
Restlesa
یک شنبه 06 آذر 1390, 00:32 صبح
سلام بر همگی دوستان
در حال نوشتن برنامه ای هستم که تو از کامپوننت Tree View ابزار کدجاکس استفاده کردم
مشکل من این هستش که وقتی Tab 1 فعال هتتش و یک سری اطلاعات دید به Tree View اضافه می کنم بدون هیچ مشکلی این کار انجام می شه و همین عمل هم در Tab 2 هم بدون مشکل انجام می شه ولی وقتی که از Tab 2 به Tab 1 سوئیچ می کنم و می خوام یه سری اطلاعات جدید به Tree View تب Tab 1 اضافه کنم این عمل بر انجام نمیشه و به ابزار Tree View تب Tab 2 اضافه میشه
برای فهم بیشتر یه نمونه کد در ادامه ضمیمه کردم
خودمم 78430خیلی باهاش ور رفتم اما نتونستم راه حلش رو پیدا کنم این شد که مزاحم شما دوستان عزیز شدم
منتظر راهنمایی هاتون هستم
Restlesa
یک شنبه 06 آذر 1390, 20:43 عصر
کسی از دوستان نیست که منو راهنمایی کنه
ali190
یک شنبه 06 آذر 1390, 22:05 عصر
سلام
من با Treeview تقریباً خیلی کار کردم
فکر کنم بتونم کمکت کنم
اما به شرطی که سئوالت رو خیلی خیلی دقیق مطرح کنی ، سعی کن سئوالت رو روی نمونه مطرح کنی و دقیقاً به موارد موجود در نمونه پیوستی اشاره کنی
حقیقتش از پست اول چیزی دستگیرم نشد
یاعلی
Restlesa
دوشنبه 07 آذر 1390, 18:21 عصر
مشکلم رو با طرح یه مثال توضیح میدم
وقتی برنامه رو اجرا می کنم به طور پیش فرض یک تب با نام New DataBase 1  ایجاد میشه ... حالا می خوام وقتی که بر روی گزینه New از گروه Category  کلیک می کنم بتونم یه زیر منو به منوی اصلی URL Bookmark اضافه کنم.
اسم این زیر منو رو در پنجره Add New Category رو Barnamenevis انتخاب می  کنم و با زدن دکمه Ok این اسم رو به عنوان زیر منوی URL Bookmark به منوم  اضافه می کنم ... تا اینجا برنامه ام بدون هیچ مشکلی کار میکنه و زیر منوی  مذکور به منوی اصلی تب New DataBase 1 اضافه میشه ... حال این بار بر روی  گزینه New از منوی File کلیک می کنم و یه تب جدید به نام New DataBase 2  ایجاد می کنم و مانند قبل این بار یک زیر منو به اسم مثلا Google به منوی  اصلی تب New DataBase 2 اضافه می کنم ... این عملیات هم در تب New DataBase  2 بدون هیچ مشکلی اجرا میشه ... اما مشکلم از اینجا به بعد هستش ... یعنی  وقتی که از تب New DataBase 2 به New DataBase 1 سوییچ می کنم و می خوام یه  زیر منو به نام مثلا Yahoo رو به منوی اصلی URL Bookmark تب New DataBase 1  اضافه کنم ... اما این زیر منو در منوی اصلی تب New DataBase 1 اضافه  نمیشه بلکه در منوی اصلی تب New DataBase 2 اضافه میشه در حالی که من در تب  New DataBase 1 هستم
این مشکل در تب های بعدی که ایجاد می کنم هم وجود داره ... یعنی وقتی تب  New DataBase 3 رو ایجاد کنم و بعد از اون بخوام زیر منوهایی رو به منوی  اصلی تب های New Data Base 1 و New DataBase 2 اضافه کنم در منوی اصلی New  DataBase 3 اضافه میشه
اگر نمونه ضمیمه شده در پست 1 رو دانلود کنی کارهایی رو گه گفتم رو انجام بدی حتما متوجه مشکل خواهی شد
منتظر راهنمایی هات هستم
ali190
دوشنبه 07 آذر 1390, 19:39 عصر
سلام
به نمونه پیوستی یه نگاه بنداز و نتیجه رو بگو
یاعلی
Restlesa
سه شنبه 08 آذر 1390, 18:08 عصر
ممنونم دوست عزیز اما مشکلم هم چنان پابرجاست
میشه بگی کد زیر چی کار می کنه ؟؟؟
TreeView.Nodes.Add "main", tvwChild, "I3", "New DataBase 1"
ali190
سه شنبه 08 آذر 1390, 19:26 عصر
سلام
این کد یک زیر فرزند که گره اولیه شما اضافه مکنه
Restlesa
سه شنبه 08 آذر 1390, 21:53 عصر
دوست عزیز مثل اینکه شما بازهم با توضیحی که در پست 4 دادم متوجه مشکلم نشدی
لطفا کارهایی رو که میگم انجام بده ... برنامه رو اجرا کن ... حال بر روی دکمه Add از گروه Category کلیک کن تا پنجره Add New Category نمایش داده بشه ... یه اسمی در مقابل کادر Name انتخاب کن (مثلا Google) و روی دکمه Ok کلیک کن ... همون طوری که مشاهده می کنی کلمه Google به عنوان زیر منو در منوی URL Bookmark قرار گرفته ... حالا روی دکمه New گروه File کلیک کن تا تب New DataBase 2 ایجاد بشه ... مثل قبل یه زیر منو با همون اسم Google ایجاد کن ... تا اینجا کار در تب New DataBase 1 و  تب New DataBase 2 زیر منوی Google رو داریم ... حالا از تب New DataBase 2 به تب New DataBase 1 سوئیچ کن ... حالا یه زیر منو به اسم Yahoo ایجاد کن ... حال می بینی که اینبار زیر منوی Yahoo در منوی URL Bookmark تب New DateBase 1 نیست ... این زیر منو (Yahoo) در منوی URL Bookmark تب New DataBase 2 ایجاد شده و قرار گرفته
مشکل من هم دقیقا همینه ... وقتی که از تب فعلی به تب های قبلی سوئیچ می کنم و می خوام زیر منویی به یکی از تب ها قبلی اضافه کنم این کار صورت نمی گیره و به زیر منو منوی اصلی آخرین تب اضافه میشه
چه طوری باید این مشکل رو بر طرف کنم ؟؟؟
دوستان خواهشا کمکم کنید :گریه::گریه::گریه:
Restlesa
چهارشنبه 09 آذر 1390, 19:54 عصر
کسی نیست کمکم کنه ؟؟؟
Restlesa
جمعه 11 آذر 1390, 19:39 عصر
آقا كسي نيست كمكم كنه ؟؟؟
Restlesa
سه شنبه 15 آذر 1390, 21:20 عصر
دوستان این سومی اسپمی هستش که میزارم
تو این چمد روزه هم اینترنت رو خیلی جستجو کردم اما نتونستم مشکلم رو بر طرف کنم
خواهشا کمکم کنید
Restlesa
چهارشنبه 16 آذر 1390, 13:29 عصر
:گریه::گریه::گریه::گریه::گریه: :گریه:
محسن واژدی
شنبه 19 آذر 1390, 21:41 عصر
سلام
کدهای زیر را در ماژول فرم frmDocument جایگزین کنید:
Private mCFPB As frmPaneBookmark
Sub CreateShortcutBar()
    Dim mailIconArray As Long
    Dim Item As ShortcutBarItem, ItemMail As ShortcutBarItem
    Set mCFPB = New frmPaneBookmark
    Set FPB = mCFPB
    Set ItemMail = ShortcutBar.AddItem(888, "Bookmarks", mCFPB.hWnd)
    ShortcutBar.Icons = MainForm.ImageManager.Icons
    ShortcutBar.Selected = ItemMail
End Sub
 
Private Sub Form_Activate()
    On Error Resume Next
    Set FPB = mCFPB
End Sub
Private Sub Form_Load()
    CreateShortcutBar
End Sub
 
Private Sub Form_Resize()
    On Error Resume Next
    TabMain.Width = Me.ScaleWidth
    TabMain.Height = Me.Height - 500
    ShortcutBar.Height = TabMain.Height - 410
End Sub
موفق باشید
Restlesa
یک شنبه 20 آذر 1390, 20:57 عصر
یک دنیا ممنونم دوست عزیز
یه سوال دیگه هم در مورد این ابزار داشتم
ابزار TreeView من در هنگام اجرای برنامه دارای سه منو به اسم های URL Bookmark و Trash و  Top Sites هستش ... می خوام وقتی که یه زیر منو به منوی URL Bookmark اضافه کنم قبلش بیاد TreeView رو سرچ کنه که آیا این زیر منو قبلا اضافه شده یا خیر
خب حالا به قطعه کد زیر توجه کن :
For i = 1 To FPB.TreeView.Nodes.Count
همون طوری که خودتونم می دونی این قطعه کد میاد و تمامی منوها و زیر منو های TreeViewرو سرچ می کنه
مشکل من اینجاست که می خوام این عملیات جستو تنها در زیر شاخه منوی URL Bookmark صورت بگیره 
میشه در این زمینه هم راهنماییم کنی ؟؟؟
کد کامل :
If txtName.Text = "" Then
        txtName.SetFocus
    Else
        NewAUCFile.Name = Trim(txtName.Text)
        NewAUCFile.Created = Trim(txtCreated.Text)
        NewAUCFile.Description = Trim(txtDescription.Text)
        
        For i = 1 To FPB.TreeView.Nodes.Count
            If FPB.TreeView.Nodes.Item(i).Key = Trim(NewAUCFile.Name) Or FPB.TreeView.Nodes.Item(i).Text = Trim(NewAUCFile.Name) Then
                MsgBox "The name you entered has allready been used ...", vbExclamation + vbOKOnly
                txtName.Text = ""
                txtDescription.Text = ""
                    
                NewAUCFile.Name = ""
                NewAUCFile.Created = ""
                NewAUCFile.Description = ""
                    
                txtName.SetFocus
                Exit Sub
            End If
        Next
        
        On Error Resume Next
        If FPB.TreeView.SelectedItem.Key = "Top Sites" Then
            MsgBox "This category already exists.", vbExclamation + vbOKOnly
            Exit Sub
        End If
        If FPB.TreeView.SelectedItem.Key = "Trash" Then FPB.TreeView.Nodes.Item(1).Selected = True
        
        
        FPB.TreeView.Nodes.Add FPB.TreeView.SelectedItem.Key, 4, Trim(NewAUCFile.Name), Trim(NewAUCFile.Name)
        FPB.TreeView.Nodes.Item(FPB.TreeView.SelectedItem. Key).Expanded = True
        FState(MainForm.ActiveForm.Tag).Dirty = True
        
        Unload Me
    End If
محسن واژدی
دوشنبه 21 آذر 1390, 01:40 صبح
سلام
 کد زیر رو جایگزین کد قبل کنید:
 
 Private Sub cmdOk_Click()
     If txtName.Text = "" Then
         txtName.SetFocus
     Else
         NewAUCFile.Name = Trim(txtName.Text)
         NewAUCFile.Created = Trim(txtCreated.Text)
         NewAUCFile.Description = Trim(txtDescription.Text)
         Dim xNode As TreeViewNode
         Set xNode = FPB.TreeView.Nodes("URL Bookmark").Child
         For i = 1 To FPB.TreeView.Nodes("URL Bookmark").Children
 
             If xNode.Key = Trim(NewAUCFile.Name) Or xNode.Text = Trim(NewAUCFile.Name) Then
                 MsgBox "The name you entered has allready been used ...", vbExclamation + vbOKOnly
                 txtName.Text = ""
                 txtDescription.Text = ""
                 NewAUCFile.Name = ""
                 NewAUCFile.Created = ""
                 NewAUCFile.Description = ""
                 
                 txtName.SetFocus
                 Exit Sub
             End If
             Set xNode = xNode.Next
         Next
         
         On Error Resume Next
          
         If FPB.TreeView.SelectedItem.Key = "Top Sites" Then
             MsgBox "This category already exists.", vbExclamation + vbOKOnly
             Exit Sub
         End If
         
         If FPB.TreeView.SelectedItem.Key = "Trash" Then
             FPB.TreeView.Nodes.Item(1).Selected = True
         End If
         
         FPB.TreeView.Nodes.Add "URL Bookmark", 4, Trim(NewAUCFile.Name), Trim(NewAUCFile.Name)
         FPB.TreeView.Nodes.Item("URL Bookmark").Expanded = True
         FState(MainForm.ActiveForm.Tag).Dirty = True
         
         Unload Me
     End If
 End Sub
 
 
 موفق باشید
Restlesa
دوشنبه 21 آذر 1390, 15:54 عصر
بازم ممنونم دوست عزیز
میشه یه لطف دیگه هم در حقم بکنید و بگید که دو دستور زیر جی کار می کنن ؟؟؟
Set xNode = FPB.TreeView.Nodes("URL Bookmark").Child
FPB.TreeView.Nodes("URL Bookmark").Children
محسن واژدی
دوشنبه 21 آذر 1390, 17:21 عصر
سلام
Set xNode = FPB.TreeView.Nodes("URL Bookmark").Child
این دستور آیتم مجموعه فعلی (child) را به شی xNode ارجاع میدهد
البته اگر "FPB.TreeView.Nodes("URL Bookmark").Child" را جاگزین xNode کنیم هم فرقی نمیکند (مشکلی پیش نمیاد) ولی خب همانطور که مشاهده میکنید دستور بالا خیلی طولانی تر است تا زمانی که آنرا ارجاع داده ایم و به طبع با تکرار نوشتن آن در روال خوانایی و ویرایش کد مشکلتر میشود؛ اما اگر از همان ابتدا آنرا به یک شی که در اینجا xNode  است ارجاع دهیم سرعت ویرایش افزایش و کدها هم خواناتر میشوند
FPB.TreeView.Nodes("URL Bookmark").Children
این دستور هم تعداد زیرمجموعه های یک گره که در اینجا "URL Bookmark" است رو برمیگرداند
موفق باشید
Restlesa
سه شنبه 22 آذر 1390, 03:11 صبح
ممنونم
حالا سوال بعدی :لبخند:
چه طوری می تونم یه زیر منو رو از یه گروه به گروه دیگه انتقال بدم ؟؟؟
مثلا یه زیر منو با نام Barnamenevis در گروه Trash دارم ... چه طوری می تونم این زیر منو رو به گروه URL Bookmark اضافه کنم ؟؟؟
سوال بعدی هم که داشتم اینه که چه طوری می تونم یه منوی تو در تو درست کنم ؟؟؟
مثلا یه زیر منو با نام Barnamenevis به گروه URL Bookmark اضافه می کنم ... حال می خوام منوهای دیگه ای رو اینبار به گروه Barnamenevis اضافه کنم 
ممنون میشم در این رابطه هم راهنماییم کنی
Restlesa
سه شنبه 22 آذر 1390, 21:13 عصر
:ناراحت::ناراحت::ناراحت::نار حت:
محسن واژدی
پنج شنبه 24 آذر 1390, 15:12 عصر
سلام
ضمیمه را بررسی کنید
موفق باشید
Restlesa
پنج شنبه 24 آذر 1390, 20:12 عصر
چه طوری می تونم یه زیر منو رو از یه گروه به گروه دیگه انتقال بدم ؟؟؟
مثلا یه زیر منو با نام Barnamenevis در گروه Trash دارم ... چه طوری می تونم این زیر منو رو به گروه URL Bookmark اضافه کنم ؟؟؟
دوست عزیز میشه رد این رابطه هم راهنماییم کنی ؟؟؟
محسن واژدی
پنج شنبه 24 آذر 1390, 21:40 عصر
این بخش هم در نمونه ای که در پست قبل بنده مشاهده میکنید وجود دارد (آیتم مورد نظر را انتخاب کنید و به شاخه مورد نظر DragDrop کنید
موفق باشید
Restlesa
جمعه 25 آذر 1390, 06:43 صبح
دوست عزیز این کار رو می خوام با استفاده از یه فرم دیگه انجام بدم
در این صورت چی ؟؟؟
از همون کد قسمت قبل می تونم استفاده کنم یا اینکه باید تغییر کنه ؟؟؟
محسن واژدی
جمعه 25 آذر 1390, 14:15 عصر
سلام
کد زیر را در یک ماژول کپی کنید:
Option Explicit
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Enum UpDownArgs
    Up
    Down
End Enum
Public Sub NodeMove(tvTreeview As TreeView, Pos As UpDownArgs)
   On Error Resume Next
   Dim sLstIt$, sFstIt$, i%
   Dim sSel$
   Dim sRoot$
   Dim sClsN$
   Dim CItems As New Collection
   Dim bxtv As Boolean
   Dim xNode As Object
   sLstIt$ = tvTreeview.SelectedItem.LastSibling.Key
   sFstIt$ = tvTreeview.SelectedItem.FirstSibling.Key
   sSel$ = tvTreeview.SelectedItem.Key
    
   sClsN$ = String(50, Chr(0))
   GetClassName tvTreeview.hwnd, sClsN$, 50
   bxtv = Left(sClsN$, Len("SysTreeView32")) = "SysTreeView32"
   Set xNode = tvTreeview.Nodes(tvTreeview.SelectedItem.Root.Key) .Child
    
    If xNode Is Nothing Then tvTreeview.SetFocus: Exit Sub
    If tvTreeview.SelectedItem.Root.Children = 1 Then Exit Sub
 
    LockWindowUpdate tvTreeview.hwnd
    Do
            If Pos = Up Then
                If sSel$ = sFstIt$ Then Exit Do
 
                If Not xNode.Key = xNode.LastSibling.Key Then
                    If xNode.Next.Key = sSel$ Then
                        CItems.Add xNode.Next.Key
                        CItems.Add xNode.Key
                        Set xNode = xNode.Next
                    Else
                        CItems.Add xNode.Key
                    End If
                Else
                    CItems.Add xNode.Key
                End If
 
            Else
                If sSel$ = sLstIt$ Then Exit Do
                If xNode.Key = sSel$ Then
                   CItems.Add xNode.Next.Key
                   If Not xNode.Key = sLstIt$ Then
                        CItems.Add xNode.Key
                        Set xNode = xNode.Next
                   End If
    
                Else
                    CItems.Add xNode.Key
                End If
            End If
         Set xNode = xNode.Next
  
   Loop Until xNode Is Nothing
    If CItems.Count Then
        If bxtv Then
            For i = 1 To CItems.Count
                 Set tvTreeview.Nodes(CItems(i)).Parent = tvTreeview.Nodes(tvTreeview.SelectedItem.Root.Key)
            Next
        Else
            For i = CItems.Count To 1 Step -1
                 Set tvTreeview.Nodes(CItems(i)).Parent = tvTreeview.Nodes(tvTreeview.SelectedItem.Root.Key)
            Next
        End If
    End If
    
   LockWindowUpdate 0
   tvTreeview.SetFocus
   tvTreeview.Nodes(sSel$).Selected = True
End Sub
انتقال آیتم به بالای لیست:
NodeMove TreeView, Up
انتقال آیتم به پایین لیست:
NodeMove TreeView, Down
با کمی تغییر در کدها میتوانید دو خاصیت انتقال آیتم به ابتدا و انتقال به انتها را هم اضافه کنید
موفق باشید
Restlesa
شنبه 26 آذر 1390, 20:15 عصر
بازم ممنون
یه سوال دیگه هم دارم
چه طوری می تونم موقع اضافه کردن زیر منو به TreeView رو بر اساس حروف الفبای هم فارسی و هم انگلیسی Sort کنم ؟؟؟
rezavb6
پنج شنبه 21 اردیبهشت 1391, 00:34 صبح
سلام دوستان
من یک سورسی در مورد  treeview  میخوام که بتونهعنوان  child  های هر گره رو بهم بده مثلا
a
  b
     b1
     b2
  c
     c1
     c2
 
 میخام این کار را بکونه
دکمه   command  را زدم  یک msgbox  باز بشه و
بهم بگه 
aدو تا  child داره به نام b و c
b دو تا  child  داره به نام  b1 و b2
c دو تا  child  داره به نام  c1 و c2
 ممنون میشم راهنمایی کنید
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.