کنترل تکرار اطلاعات در listbox
با درود
دوستان من با کد زیر یکسری نام فایل رو در لیکس باکس فراخوانی میکنم
Me.lstListBox1.Items.AddRange(dlgOpen.FileNames.Se lect(Function(f) IO.Path.GetFullPath(f)).ToArray)
میخواستم بدونم چطوری میتونم با کمک همین کد بگم اگر اسم فایل قبلا تو لیست باکس وجود داشت مجددا اون رو نیاره ؟
ممنون از دوستان
نقل قول: کنترل تکرار اطلاعات در listbox
کد اینلاینش رو نتونستم بنویسم ولی این کد رو ببینین میشه؟
For Each element In dlgOpen.FileNames.Select(Function(f) IO.Path.GetFullPath(f)).ToArray
If Not Me.lstListBox1.Items.Contains(element) Then Me.lstListBox1.Items.Add(element)
Next
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
hrj1981
با درود
دوستان من با کد زیر یکسری نام فایل رو در لیکس باکس فراخوانی میکنم
Me.lstListBox1.Items.AddRange(dlgOpen.FileNames.Se lect(Function(f) IO.Path.GetFullPath(f)).ToArray)
میخواستم بدونم چطوری میتونم با کمک همین کد بگم اگر اسم فایل قبلا تو لیست باکس وجود داشت مجددا اون رو نیاره ؟
ممنون از دوستان
مثلا اینطوری :
Dim items = Me.lstListBox1.Items.OfType(Of String).ToList()
items.AddRange(dlgOpen.FileNames.Select(Function(f ) IO.Path.GetFullPath(f)))
Me.lstListBox1.Items.Clear()
Me.lstListBox1.Items.AddRange(items.Distinct().ToA rray())
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
ASHKANLAEI
کد اینلاینش رو نتونستم بنویسم ولی این کد رو ببینین میشه؟
For Each element In dlgOpen.FileNames.Select(Function(f) IO.Path.GetFullPath(f)).ToArray
If Me.lstListBox1.Items.Contains(element) Then
Me.lstListBox1.Items.Add(element)
End If
Next
فکر کنم شرط باید If Not باشه، If Not Me.lstListBox1.Items.Contains(element) Then
نقل قول: کنترل تکرار اطلاعات در listbox
ممنونم دوستان
من خودم یه جا دیدم از where استفاده کرده اما هرکاری کردم نتونستم به صورت اینلاین بنویسم
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
hrj1981
ممنونم دوستان
من خودم یه جا دیدم از where استفاده کرده اما هرکاری کردم نتونستم به صورت اینلاین بنویسم
پافشاری روی مختصر مفید نوشتن معمولا کارایی رو فدای مختصر کردن کد میکنه. ظاهر کد بهتر میشه ولی عوضش کندش میکنه.
برای همینه که خود مایکروسافت در کدهای NET Framework. برای تعاریف خود Linq از Linq استفاده کرده ولی عموما برای پیاده سازی سایر موارد از Linq استفاده ای نکرده و کد های طولانی تری رو با تعریف متغیر و حلقه های for و if نوشته. کد های طولانی تر ولی با سرعت اجرای خیلی بالاتر.
Me.lstListBox1.Items.AddRange((From item In dlgOpen.FileNames.Select(Function(f) IO.Path.GetFullPath(f)) Where lstListBox1.Items.Contains(item) = False).ToArray())
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
the king
فکر کنم شرط باید If Not باشه، If Not Me.lstListBox1.Items.Contains(element) Then
بله ببخشید حواسم نبود اشتباه نوشتم ویرایشش کردم ببینید درسته؟
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
ASHKANLAEI
بله ببخشید حواسم نبود اشتباه نوشتم ویرایشش کردم ببینید درسته؟
بسیار عالی
بله درست کار میکنه
سپاس گذارم
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
the king
پافشاری روی مختصر مفید نوشتن معمولا کارایی رو فدای مختصر کردن کد میکنه. ظاهر کد بهتر میشه ولی عوضش کندش میکنه.
برای همینه که خود مایکروسافت در کدهای NET Framework. برای تعاریف خود Linq از Linq استفاده کرده ولی عموما برای پیاده سازی سایر موارد از Linq استفاده ای نکرده و کد های طولانی تری رو با تعریف متغیر و حلقه های for و if نوشته. کد های طولانی تر ولی با سرعت اجرای خیلی بالاتر.
Me.lstListBox1.Items.AddRange((From item In dlgOpen.FileNames.Select(Function(f) IO.Path.GetFullPath(f)) Where lstListBox1.Items.Contains(item) = False).ToArray())
از شما دوست عزیز هم ممنونم بابت راهنمایی
البته بیشتر خودم دوست داشتم یاد بگیرم چجوری میشد از این طریق هم کد رو نوشت که شما زحمت کشیدید.
سپاس گذارم
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
the king
پافشاری روی مختصر مفید نوشتن معمولا کارایی رو فدای مختصر کردن کد میکنه. ظاهر کد بهتر میشه ولی عوضش کندش میکنه.
برای همینه که خود مایکروسافت در کدهای NET Framework. برای تعاریف خود Linq از Linq استفاده کرده ولی عموما برای پیاده سازی سایر موارد از Linq استفاده ای نکرده و کد های طولانی تری رو با تعریف متغیر و حلقه های for و if نوشته. کد های طولانی تر ولی با سرعت اجرای خیلی بالاتر.
Me.lstListBox1.Items.AddRange((From item In dlgOpen.FileNames.Select(Function(f) IO.Path.GetFullPath(f)) Where lstListBox1.Items.Contains(item) = False).ToArray())
ببخشید جناب the king، مگه اول عبارت داخل پرانتز انجام نمیشه و بعد آرایه اش به AddRange فرستاده نمیشه؟
فکر میکردم در این صورت نمیشه برای آیتم های قبلی از لیست باکس بررسی کنیم.
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
ASHKANLAEI
ببخشید جناب the king، مگه اول عبارت داخل پرانتز انجام نمیشه و بعد آرایه اش به AddRange فرستاده نمیشه؟
فکر میکردم در این صورت نمیشه برای آیتم های قبلی از لیست باکس بررسی کنیم.
چرا همینطوره. اول محتویاتی که به AddRange میخواد ارسال بشه باید پردازش بشه تا بعد نوبت به AddRange برسه.
اما چیزی که به ما این امکان رو داده که مجموعه رو با محتویات ListBox مقایسه کنیم و فیلتر کنیم اون For In Where ئه که دستش در شرط کاملا باز ئه.
میتونه در Where به هر مجموعه خارجی مثل lstListBox1.Items رجوع کنه و موارد تکراری رو قبل از اینکه با ToArray آرایه ای شکل بگیره و به AddRange ارسالی صورت بگیره فیلتر کنه.
نقل قول: کنترل تکرار اطلاعات در listbox
نه منظورم اینه که چون آرایه بعد کامل شدن یکدفعه به لیست باکس اضافه میشه خب توی where ما داریم توی لیست خالی میگردیم درحالی که باید توی موارد قبلی آرایه بگردیم، نه؟
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
ASHKANLAEI
نه منظورم اینه که چون آرایه بعد کامل شدن یکدفعه به لیست باکس اضافه میشه خب توی where ما داریم توی لیست خالی میگردیم درحالی که باید توی موارد قبلی آرایه بگردیم، نه؟
نه، لیست خالی نبوده. فرضا قبلا file1.txt و file2.txt و file3.txt و file4.txt رو با dlgOpen انتخاب کردن و به لیست اضافه کردن.
حالا دفعه بعدی که file3.txt و file4.txt و file5.txt رو در dlgOpen انتخاب می کنند، فقط file5.txt مورد جدیدی بوده، نمی خوان file3.txt و file4.txt که تکراری هستند دوباره در لیست درج بشه.
نقل قول: کنترل تکرار اطلاعات در listbox
نقل قول:
نوشته شده توسط
the king
نه، لیست خالی نبوده. فرضا قبلا file1.txt و file2.txt و file3.txt و file4.txt رو با dlgOpen انتخاب کردن و به لیست اضافه کردن.
حالا دفعه بعدی که file3.txt و file4.txt و file5.txt رو در dlgOpen انتخاب می کنند، فقط file5.txt مورد جدیدی بوده، نمی خوان file3.txt و file4.txt که تکراری هستند دوباره در لیست درج بشه.
بله حالا متوجه شدم. ممنون