ولو وجدت الاسم تنفذ امرا ما
وام لم تجد الاسم تنفذ امر اخر
واعتقد الجميع سوف يفهم اكتر عند قراءة الكود
اولا كود البحث
كود :
Private Function FindItem(ItemList As ListView.ListViewItemCollection, ColumnIndex As Integer, SearchString As String)
For Each Item As ListViewItem In ItemList
If Item.SubItems(ColumnIndex).Text = SearchString Then
Return Item.Index
End If
Next
Return False
End Function
ثانيا كود حلقة الدوران
كود :
For Each itm As ListViewItem In listView1.Items
If Not String.IsNullOrEmpty(itm.SubItems(1).Text) Then
Dim z As Integer = FindItem(ListView2.Items, 0, itm.SubItems(1).Text)
If IsNumeric(z) Then
itm.SubItems(5).Text = "No"
'If z = False Then
' GoTo nonumber
'End If
If z < ListView2.Items.Count - 1 Then
itm.SubItems(3).Text = ListView2.Items(z).SubItems(0).Text
itm.SubItems(4).Text = ListView2.Items(z).SubItems(1).Text
End If
If itm.SubItems(1).Text = "MG-CONTROL.exe" Then
If itm.SubItems(2).Text = ListView2.Items(z).SubItems(1).Text Then
itm.SubItems(3).Text = ListView2.Items(z).SubItems(0).Text
itm.SubItems(4).Text = ListView2.Items(z).SubItems(1).Text
itm.SubItems(5).Text = "No"
ElseIf Not itm.SubItems(2).Text = ListView2.Items(z).SubItems(1).Text Then
itm.SubItems(5).Text = "Yes"
itm.BackColor = Color.DarkSlateBlue
itm.ForeColor = Color.DarkRed
End If
End If
Else
nonumber: itm.SubItems(3).Text = ""
itm.SubItems(4).Text = ""
itm.SubItems(5).Text = "Yes"
itm.BackColor = Color.DarkSlateBlue
itm.ForeColor = Color.DarkRed
End If
End If
Next
اعد قيمة منطقية True بدلاً عنها ولا انصحك باستخدام GoTo ستعاني من مشاكل معها
يمكنك تحويل Items الى (List(Of listViewItem و بالتالي الاستفادة من دعم Ling في هذا المجال
امثلة للاستخدام
PHP كود :
Private Function FindItem(ItemList As ListView, ColumnIndex As Integer, SearchString As String)
Dim query = ItemList.Items.Cast(Of ListViewItem)().Where(Function(item) item.SubItems(ColumnIndex).Text = SearchString) For Each Itm In query 'Do Any Thing Next
Dim query2 As IEnumerable(Of ListViewItem) = ItemList.Items.Cast(Of ListViewItem)() Dim Found = From itm In query2 Where itm.SubItems(ColumnIndex).Text = SearchString Select itm
'تعيد قيمة واحدة 'سترمي استثناء في حال لم تجد شيئ او وجدت اكثر من قيمة Dim query3 = ItemList.Items.Cast(Of ListViewItem)().Single(Function(item) item.SubItems(ColumnIndex).Text = SearchString) 'تعيد اول قيمة Dim query4 = ItemList.Items.Cast(Of ListViewItem)().First(Function(item) item.SubItems(ColumnIndex).Text = SearchString)
14-07-17, 01:48 AM (آخر تعديل لهذه المشاركة : 14-07-17, 01:49 AM {2} بواسطة الماجيك مسعد.)
(14-07-17, 12:40 AM)ابو ليلى كتب : ما حاجتك في هذه
PHP كود :
Return Item.Index
اعد قيمة منطقية True بدلاً عنها ولا انصحك باستخدام GoTo ستعاني من مشاكل معها
يمكنك تحويل Items الى (List(Of listViewItem و بالتالي الاستفادة من دعم Ling في هذا المجال
امثلة للاستخدام
PHP كود :
Private Function FindItem(ItemList As ListView, ColumnIndex As Integer, SearchString As String)
Dim query = ItemList.Items.Cast(Of ListViewItem)().Where(Function(item) item.SubItems(ColumnIndex).Text = SearchString) For Each Itm In query 'Do Any Thing Next
Dim query2 As IEnumerable(Of ListViewItem) = ItemList.Items.Cast(Of ListViewItem)() Dim Found = From itm In query2 Where itm.SubItems(ColumnIndex).Text = SearchString Select itm
'تعيد قيمة واحدة 'سترمي استثناء في حال لم تجد شيئ او وجدت اكثر من قيمة Dim query3 = ItemList.Items.Cast(Of ListViewItem)().Single(Function(item) item.SubItems(ColumnIndex).Text = SearchString) 'تعيد اول قيمة Dim query4 = ItemList.Items.Cast(Of ListViewItem)().First(Function(item) item.SubItems(ColumnIndex).Text = SearchString)
End Function
المشروع مرفق ؟؟
اشكرك ابو ليلى لمرورك الطيب الى الموضوع
انا بحاجة للاندكس فقط
يعنى ابحث عن القيمة ولو موجودة يجبلى رقم الاندكس بتاعها لانى بستخدمه فى اشياء اخرى
Private Function FindItem(ItemList As ListView.ListViewItemCollection, ColumnIndex As Integer, SearchString As String) As Dictionary(Of Integer, Boolean) For Each Item As ListViewItem In ItemList If Item.SubItems(ColumnIndex).Text = SearchString Then Return New Dictionary(Of Integer, Boolean) From {{Item.Index, True}} End If Next Return New Dictionary(Of Integer, Boolean) From {{0, False}} End Function
حلقة الدوران مع الشرط
PHP كود :
For Each itm As ListViewItem In listView1.Items If Not String.IsNullOrEmpty(itm.SubItems(1).Text) Then Dim Found As Dictionary(Of Integer, Boolean) = FindItem(ListView2.Items, 0, itm.SubItems(1).Text) If Found.ContainsValue(True) Then itm.SubItems(5).Text = "No" 'رقم الاندكس تحصل عليه هنا 'Found.Keys.ElementAt(0) Else itm.SubItems(3).Text = "" itm.SubItems(4).Text = "" itm.SubItems(5).Text = "Yes" itm.BackColor = Color.DarkSlateBlue itm.ForeColor = Color.DarkRed End If End If Next
16-07-17, 01:56 AM (آخر تعديل لهذه المشاركة : 16-07-17, 02:02 AM {2} بواسطة ابو ليلى.)
السلام عليكم و رحمة الله و بركاته هو انت لو تتبعت الكود سطر سطر اثناء التنفيذ ستلاحظ انه لا يعيد قيمة False لننظر للكود اولاً
PHP كود :
Dim z As Integer=FindItem(ListView2.Items, 0, itm.SubItems(1).Text)
ثم استدعيت التالي
PHP كود :
If IsNumeric(z) Then
هل تتوقع مثلاً ان النوع Integer ليس رقماً لتضع الشرط السابق ؟؟؟ بعد ذلك
PHP كود :
If z = False Then
هل Integer = False ???
بعد ذلك تريد من الدالة اعادة نوعين (مرة قيمة رقمية و مرة قيمة منطقية) , لحل مثل هذه الاشكالية لديك العديد من الطرق اولها كما في الكود السابق , اذ اعدت مصفوفة بنوع و قيمة . او ان تستعمل اعادة نوع مجهول و عند الاستدعاء تجري عملية التحويل للنوع الذي تريده
بالتطبيق على الكود السابق
PHP كود :
Public Shared Function FindItem2(Of T)(ItemList As ListView.ListViewItemCollection, ColumnIndex As Integer, SearchString As String) As T
For Each Item As ListViewItem In ItemList Dim converter = TypeDescriptor.GetConverter(GetType(T)) If converter.CanConvertFrom(GetType(String)) Then
If Item.SubItems(ColumnIndex).Text = SearchString Then Dim value As String = Item.Index Return DirectCast(converter.ConvertFromString(value), T)
End If Else Return Nothing End If Next
End Function
و الحلقة تصبح
PHP كود :
If Not String.IsNullOrEmpty(itm.SubItems(1).Text) Then Dim z As String = FindItem2(Of String)(ListView2.Items, 0, itm.SubItems(1).Text) If IsNumeric(z) Then itm.SubItems(5).Text = "No" ' MsgBox(z) Else itm.SubItems(3).Text = "" itm.SubItems(4).Text = "" itm.SubItems(5).Text = "Yes" itm.BackColor = Color.DarkSlateBlue itm.ForeColor = Color.DarkRed End If End If Next
كما و يوجد طرق اخرى و افكار للوصول الى حل مشابه. تحياتي. انصحك باستخدام الاسلوب الحديث في التعامل مع الملفات على السيرفرت و المواقع عبر مكتبة HttpClient و استخدام اسلوب عدم التزامن لتتلافى مشاكل التجميد لدى الاستدعاء
PHP كود :
Private Async Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click .... .... Dim text2 As String Using text22 As New Http.HttpClient() text2 = Await text22.GetStringAsync("https://goo.gl/iHJyWe") End Using
16-07-17, 03:10 AM (آخر تعديل لهذه المشاركة : 16-07-17, 03:14 AM {2} بواسطة الماجيك مسعد.)
ياسلام عليك
والله انت استاذ
دا افضل شئ
وكمان انت فهمتنى حاجات مكنتش تخطر فى بالى خالص
ايضا سوف ابحث عن HttpClient
لكى افهمها اكتر لانى لم اسمع عنها من قبل
تسلم ايدك بجد
ربنا يجعله فى ميزان حسناتك
واجهتنى مشكلة اخرى كما بالصورة
تظهر فقط عندما تكون عناصر ليست 2
اقل من ليست 1
يريت تفدنى بالسبب والحل
وجزاك الله كل خير
(16-07-17, 01:56 AM)ابو ليلى كتب : السلام عليكم و رحمة الله و بركاته هو انت لو تتبعت الكود سطر سطر اثناء التنفيذ ستلاحظ انه لا يعيد قيمة False لننظر للكود اولاً
PHP كود :
Dim z As Integer=FindItem(ListView2.Items, 0, itm.SubItems(1).Text)
ثم استدعيت التالي
PHP كود :
If IsNumeric(z) Then
هل تتوقع مثلاً ان النوع Integer ليس رقماً لتضع الشرط السابق ؟؟؟ بعد ذلك
PHP كود :
If z = False Then
هل Integer = False ???
بعد ذلك تريد من الدالة اعادة نوعين (مرة قيمة رقمية و مرة قيمة منطقية) , لحل مثل هذه الاشكالية لديك العديد من الطرق اولها كما في الكود السابق , اذ اعدت مصفوفة بنوع و قيمة . او ان تستعمل اعادة نوع مجهول و عند الاستدعاء تجري عملية التحويل للنوع الذي تريده
بالتطبيق على الكود السابق
PHP كود :
Public Shared Function FindItem2(Of T)(ItemList As ListView.ListViewItemCollection, ColumnIndex As Integer, SearchString As String) As T
For Each Item As ListViewItem In ItemList Dim converter = TypeDescriptor.GetConverter(GetType(T)) If converter.CanConvertFrom(GetType(String)) Then
If Item.SubItems(ColumnIndex).Text = SearchString Then Dim value As String = Item.Index Return DirectCast(converter.ConvertFromString(value), T)
End If Else Return Nothing End If Next
End Function
و الحلقة تصبح
PHP كود :
If Not String.IsNullOrEmpty(itm.SubItems(1).Text) Then Dim z As String = FindItem2(Of String)(ListView2.Items, 0, itm.SubItems(1).Text) If IsNumeric(z) Then itm.SubItems(5).Text = "No" ' MsgBox(z) Else itm.SubItems(3).Text = "" itm.SubItems(4).Text = "" itm.SubItems(5).Text = "Yes" itm.BackColor = Color.DarkSlateBlue itm.ForeColor = Color.DarkRed End If End If Next
كما و يوجد طرق اخرى و افكار للوصول الى حل مشابه. تحياتي. انصحك باستخدام الاسلوب الحديث في التعامل مع الملفات على السيرفرت و المواقع عبر مكتبة HttpClient و استخدام اسلوب عدم التزامن لتتلافى مشاكل التجميد لدى الاستدعاء
PHP كود :
Private Async Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click .... .... Dim text2 As String Using text22 As New Http.HttpClient() text2 = Await text22.GetStringAsync("https://goo.gl/iHJyWe") End Using