نمایش نتایج 1 تا 13 از 13

نام تاپیک: مشکل در TreeView

  1. #1
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    مشکل در TreeView

    اگه در یک درختواره شاخه هائی داشته باشیم ،‌ چطور میشه تمام شاخه ها و زیر شاخه ها رو تشخیص داد یعنی یکی یکی متن اونها گرفت و در یک لیست قرار داد؟ اگه نمونه ای از این فرمول دیدید اینجا بذارید! به طور مثال ،‌TreeView دارای 100 شاخه و زیرشاخه و شاخه های فرعی است و ما می خواهیم همه آنها را با استفاده از یک حلقه For در بانک اطلاعاتی ذخیره کنیم ، باید چطور این کار را انجام دهیم؟
     
    For I =0 to tv.GetNodeCount-1
    ???????
    Next

  2. #2

    نقل قول: مشکل در TreeView

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    اگه در یک درختواره شاخه هائی داشته باشیم ،‌ چطور میشه تمام شاخه ها و زیر شاخه ها رو تشخیص داد یعنی یکی یکی متن اونها گرفت و در یک لیست قرار داد؟ اگه نمونه ای از این فرمول دیدید اینجا بذارید! به طور مثال ،‌TreeView دارای 100 شاخه و زیرشاخه و شاخه های فرعی است و ما می خواهیم همه آنها را با استفاده از یک حلقه For در بانک اطلاعاتی ذخیره کنیم ، باید چطور این کار را انجام دهیم؟
     
    For I =0 to tv.GetNodeCount-1
    ???????
    Next

    برای این کار چون شما می خاین فرزندان رو هم درنظر بگیرین باید از ساختار بازگشتی (ریکرسیو)استفاده کنید . یعنی به هر نود که می رسین اونو مانند یه درخت در نظر بگیرین و شوع به پیمایش فرزندان احتمالی اون بکنین .

    کد زیر راهگشای شما خواهد بود :

    Private Sub Trace_rec(ByVal Temp_TV As TreeView)
    Dim Temp_TN As TreeNode
    For Each Temp_TN In Temp_TV.Nodes
    Trace_Child(Temp_TN)
    Next
    End Sub

    Private Sub Trace_Child(ByVal Temp_TN As TreeNode)
    Debug.WriteLine(Temp_TN.Text)
    Dim Temp_Node As TreeNode
    For Each Temp_Node In Temp_TN.Nodes
    Trace_Child(Temp_Node)
    Next
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Trace_rec(TreeView1)
    End Sub

  3. #3
    کاربر دائمی آواتار rooshan2008
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    گیلان- لشت نشا
    سن
    37
    پست
    179

    نقل قول: مشکل در TreeView

    سلام
    به وسیله یک تابع بازگشتی می تونیم خیلی راحت این کارو انجام بدیم با تغییر مختصر این الگوریتم می تونیم جستجوی فایل و پوشه های را در هر زیر شاخه ای انجام بدیم.
    تعایف
    Dim listStr As New List(OfString)


    PublicSub Node(ByVal Tv As TreeNodeCollection)
    Dim B As TreeNode
    For Each B In Tv
    listStr.Add(B.FullPath)
    If B.Nodes.Count > 0 Then

    Node(B.Nodes)
    EndIf

    Next

    EndSub




    نحوه فراخونی

    Node(TreeView1.Nodes)
    نتیجه در لیست listStr قرار داره حالا شما می تونید با یک Forهمه اجازای این آرایه رو نشون بدین.


    ForEach s In listStr
    ListBox1.Items.Add(s)
    Next



  4. #4
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: مشکل در TreeView

    نقل قول نوشته شده توسط pirmard مشاهده تاپیک
    برای این کار چون شما می خاین فرزندان رو هم درنظر بگیرین باید از ساختار بازگشتی (ریکرسیو)استفاده کنید . یعنی به هر نود که می رسین اونو مانند یه درخت در نظر بگیرین و شوع به پیمایش فرزندان احتمالی اون بکنین .
    عالی بود ممنون
    یک مسئله دیگر هم هست و اون اینه ک اگر بخواهیم با توجه به شماره نود،‌مستقیم به به آن دسترسی داشته باشیم و این عضو فرزند فرزند ... باشد ( در شاخه دوم به پایین باشد) چطور این کار را انجام دهیم
    مثلا نود شماره 20 که در این مسیر است
    ریشه » شاخه اول » شاخه دوم » شاخه سوم.
    کد زیر فقط اونهایی که در ریشه هستندنشون میده اما زیر مجموعه هارو برنمیگردونه
     
    dim Nod as treeNode
    nod=tv.nodes(20)

    کد زیر هم فقط با نام شاخه کار می کند نه با شماره آن
     
    Nod=tv.Nodes.find("Node20",true)(0)

    من کدی نظیر همین آخری می خوام که به جای وارد کردن نام "Key" مربوط به یک نود، بتوان شماره آن عضو را وارد کرد.

  5. #5
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: مشکل در TreeView

    نقل قول نوشته شده توسط rooshan2008 مشاهده تاپیک
    سلام
    به وسیله یک تابع بازگشتی می تونیم خیلی راحت این کارو انجام بدیم با تغییر مختصر این الگوریتم می تونیم جستجوی فایل و پوشه های را در هر زیر شاخه ای انجام بدیم.
    تعایف
    Dim listStr As New List(OfString)


    PublicSub Node(ByVal Tv As TreeNodeCollection)
    Dim B As TreeNode
    For Each B In Tv
    listStr.Add(B.FullPath)
    If B.Nodes.Count > 0 Then
    Node(B.Nodes)
    EndIf
    Next
    EndSub



    نحوه فراخونی

    Node(TreeView1.Nodes)
    این الگوریتم جواب نداد

  6. #6
    کاربر دائمی آواتار tabatabaeefar
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    زمین خدا
    پست
    259

    نقل قول: مشکل در TreeView

    سلام
    به نظرم تمامي دوستاني كه در زمينه TreeView سئوال دارند اگه يه سري به برنامه اي كه توي اين تاپيك گذاشتم بزنند، يا جوابش اونجا هست يا با يه خورده تغيير به راحتي ميتونن به جواب برسن.
    https://barnamenevis.org/showthread.php?t=156060
    موفق باشيد.
    آخرین ویرایش به وسیله tabatabaeefar : جمعه 04 شهریور 1390 در 05:28 صبح

  7. #7

    نقل قول: مشکل در TreeView

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    عالی بود ممنون
    یک مسئله دیگر هم هست و اون اینه ک اگر بخواهیم با توجه به شماره نود،‌مستقیم به به آن دسترسی داشته باشیم و این عضو فرزند فرزند ... باشد ( در شاخه دوم به پایین باشد) چطور این کار را انجام دهیم
    مثلا نود شماره 20 که در این مسیر است
    ریشه » شاخه اول » شاخه دوم » شاخه سوم.
    منظورتون اینجا از شماره همون ایندکس هست ؟ من از مثالی که زدید و اینکه گفتید در شاخه دوم به پایین در دسترس نیست برداشتم اینه که شما منظورتون همون index هر نود بوده .
    اما این ایندکس رو نمیشه به این صورت که شما می خاین استفاده کرد . چون در هر گره، ایندکس گذاری فرزندان از صفر شروع میشه. یعنی اولین نود فرزند هر گره خودبخود ایندکسش صفر ه. پس ایندکس، مشخصه ی یکتایی نیست برای گره های کل یک درخت .

  8. #8
    کاربر دائمی آواتار arsalansalar
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    اتاق آبی
    پست
    974

    نقل قول: مشکل در TreeView


  9. #9
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: مشکل در TreeView

    نقل قول نوشته شده توسط pirmard مشاهده تاپیک
    منظورتون اینجا از شماره همون ایندکس هست ؟ من از مثالی که زدید و اینکه گفتید در شاخه دوم به پایین در دسترس نیست برداشتم اینه که شما منظورتون همون index هر نود بوده .
    اما این ایندکس رو نمیشه به این صورت که شما می خاین استفاده کرد . چون در هر گره، ایندکس گذاری فرزندان از صفر شروع میشه. یعنی اولین نود فرزند هر گره خودبخود ایندکسش صفر ه. پس ایندکس، مشخصه ی یکتایی نیست برای گره های کل یک درخت .
    منظورم یک چیزی تو همین چیزهاست چرا که در وی بی 6،‌ هریک از نودها ایندکس مخصوص به خود داشتند و مشکلی ایجاد نمی شد اما با این بیان شما ، دسترسی به زیر مجموعه ها با مشکل مواجه می شود
    البته یک فرق کوچک در سؤال من هست و اون اینه که :‌ ما کار به ایندکس نداریم، فرض کنید هنگامی که اعضای درخت بار می شوند،‌ به ترتیب به درخت افزوده می شوند، حال می خواهیم عضو و نودی که در رتبه 58 ( از بین 100 نود ) بوده رو با استفاده از همین شماره 58 فراخوانی کنیم،‌حال با توجه به این که از راه ایندکس نمی شود دسترسی داشت،‌آیا راه دیگری برای این کار وجود ندارد؟

  10. #10

    نقل قول: مشکل در TreeView

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    ما کار به ایندکس نداریم، فرض کنید هنگامی که اعضای درخت بار می شوند،‌ به ترتیب به درخت افزوده می شوند، حال می خواهیم عضو و نودی که در رتبه 58 ( از بین 100 نود ) بوده رو با استفاده از همین شماره 58 فراخوانی کنیم،‌حال با توجه به این که از راه ایندکس نمی شود دسترسی داشت،‌آیا راه دیگری برای این کار وجود ندارد؟
    البته روشتون زیاد درست نیست. یعنی مبنای دسترسیتون در واقع بر پایه ی زمان اضافه شده گره به نود داره نوشته میشه که خوب مسلما کارآمد نیست و اگر در زمان اجرا گره ای از وسط حذف بشه و یا اضافه بشه مشکل بیشتر میشه . مثلا گره ای با شماره ی 100 در روت قرار بگیره

    اما برای کار شما فکر می کنم استفاده از key بتونه کمکتون کنه . که در زمان اضافه کردن گره ها (چه در حلقه و یا از دیتابیس) و چه به صورت تک تک key به اونها اختصاص بدین به ترتیب

    TreeView1.Nodes.Add(0, "0")
    TreeView1.Nodes.Add(1, "1")
    TreeView1.Nodes(1).Nodes.Add(2, "1-0")
    TreeView1.Nodes(0).Nodes.Add(3, "0-0")
    Dim node As TreeNode = TreeView1.Nodes.Find(2, True)(0)
    Me.Text = node.Text

  11. #11
    کاربر دائمی آواتار Hossis
    تاریخ عضویت
    آبان 1386
    محل زندگی
    بیرجند
    پست
    1,731

    نقل قول: مشکل در TreeView

    باز هم ممنون ازجوابتون
    این خاصیت key باید رشته ای باشد و عدد قبول نمی کند.
    با بیان شما من به یک نکته دیگه پی بردم و اون اینه که خاصیت tag هر نود را به یک شماره اختصاص بدم یا همین خاصیت "key" منتها باید برای دسترسی به هر نود ، تمام اعضای درخت را بررسی کرد.

  12. #12

    نقل قول: مشکل در TreeView

    نقل قول نوشته شده توسط Hossis مشاهده تاپیک
    باز هم ممنون ازجوابتون
    این خاصیت key باید رشته ای باشد و عدد قبول نمی کند.
    بله . چون من این کدو در حالت Option Strict Off تست می کردم به خودم اجازه دادم که عدد رو به جای استرینگ قرار بدم .

  13. #13
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    1,679

    نقل قول: مشکل در TreeView

    سلام به همه.
    برای سوال اصلی این تاپیک یکی از روش هایی که وجود داره شاید روش مناسبتری هم باشه ذخیره شاخه ها با زیرشاخه هایشان بصورت XML هست که برای فراخوانی شاحه ها و زیرشاخه ها هم گزینه مناسبی اشت.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •