تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة حيرتنى فى شروط if المشروع مرفق
#1
السلام عليكم

يارب تكونو بخير جميعا

واجهت مشكلة غريبة

واتمنى يكون الخطأ منى لكى اعرف تصحيحه

هحاول ابسط المشكلة بقدر الامكان

عندى 2 ليست فيو

وعامل حلقة دوران على الليست الاولى

بحيث انها تبحث عن نفس الاسم فى الليست التانية

ولو وجدت الاسم تنفذ امرا ما
وام لم تجد الاسم تنفذ امر اخر

واعتقد الجميع سوف يفهم اكتر عند قراءة الكود

اولا كود البحث

كود :
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

ثالثا المشروع
http://www.elmagek.net/up/do.php?id=410
الرد }}}
تم الشكر بواسطة:
#2
هل الموضوع صعب؟
الرد }}}
تم الشكر بواسطة:
#3
هل من مساعد؟
الرد }}}
تم الشكر بواسطة:
#4
ما حاجتك في هذه
PHP كود :
Return Item.Index 
اعد قيمة منطقية True بدلاً عنها
ولا انصحك باستخدام GoTo ستعاني من مشاكل معها

يمكنك تحويل Items الى  (List(Of listViewItem و بالتالي الاستفادة من دعم Ling في هذا المجال

امثلة للاستخدام
PHP كود :
   Private Function FindItem(ItemList As ListViewColumnIndex As IntegerSearchString As String)

 
       Dim query ItemList.Items.Cast(Of ListViewItem)().Where(Function(itemitem.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(itemitem.SubItems(ColumnIndex).Text SearchString)


 
   End Function 


المشروع مرفق ؟؟  Dodgy
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: الماجيك مسعد
#5
(14-07-17, 12:40 AM)ابو ليلى كتب : ما حاجتك في هذه
PHP كود :
Return Item.Index 
اعد قيمة منطقية True بدلاً عنها
ولا انصحك باستخدام GoTo ستعاني من مشاكل معها

يمكنك تحويل Items الى  (List(Of listViewItem و بالتالي الاستفادة من دعم Ling في هذا المجال

امثلة للاستخدام
PHP كود :
   Private Function FindItem(ItemList As ListViewColumnIndex As IntegerSearchString As String)

 
       Dim query ItemList.Items.Cast(Of ListViewItem)().Where(Function(itemitem.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(itemitem.SubItems(ColumnIndex).Text SearchString)


 
   End Function 


المشروع مرفق ؟؟  Dodgy

اشكرك ابو ليلى لمرورك الطيب الى الموضوع

انا بحاجة للاندكس فقط

يعنى ابحث عن القيمة ولو موجودة يجبلى رقم الاندكس بتاعها لانى بستخدمه فى اشياء اخرى

كود البحث ليس به مشكلة ولكن المشكلة فى شروط if

ثالثا المشروع
http://www.elmagek.net/up/do.php?id=410

حمل المشروع وجرب تشغل الفورم هتلاقى ان شرط if

فيه مشكلة

مثال بسيط للمشكلة

نفترض انى عرفت شئ ما
dim x = 0
الان الشرط
if not x = 0 then
x = 5
else if x = 0 then
x = 55
end if

فى الشرط دا المفروض يدينى اكس = 55 صح؟
هذا ما نعرفه جميعا
ولكن فى مشروعى
سيعطينى اكس = 5 وليس 55
وهذه هى مشكلتى

وعندما تجرب انت المشروع ستجد هذه المشكلة

لتحميل المشروع

http://www.elmagek.net/up/do.php?id=410

لم اكن انوى استخداlم go to

ولم اكن سافعل كل هذه الشروط فى الكود

كان فقط شرطين

ولكن غلب امرى فاخدت اجرب كل الطرق

ولم اصل لشئ

6 ساعات متواصلة ولم افهم السبب

لذا لجئت هنا ربما احد منكم يفهمنى

واتمنى ان اكون على خطأ فى شئ ما
الرد }}}
تم الشكر بواسطة:
#6
جرب بهذه الطريقة
كود البحث
PHP كود :
   Private Function FindItem(ItemList As ListView.ListViewItemCollectionColumnIndex As IntegerSearchString As String) As Dictionary(Of IntegerBoolean)
 
       For Each Item As ListViewItem In ItemList
            If Item
.SubItems(ColumnIndex).Text SearchString Then
                Return 
New Dictionary(Of IntegerBooleanFrom {{Item.IndexTrue}}
 
           End If
 
       Next
        Return 
New Dictionary(Of IntegerBooleanFrom {{0False}}
 
   End Function 

حلقة الدوران مع الشرط

PHP كود :
       For Each itm As ListViewItem In listView1.Items
            If Not String
.IsNullOrEmpty(itm.SubItems(1).TextThen
                Dim Found 
As Dictionary(Of IntegerBoolean) = FindItem(ListView2.Items0itm.SubItems(1).Text)
 
               If Found.ContainsValue(TrueThen
                    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 


الملفات المرفقة صورة/صور
   
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: الماجيك مسعد , الماجيك مسعد
#7
حاضر يا غالى هجرب وارد عليك

بس بردو انا معرفتش ليه فى كود الشرط لم ينفذ بالطريقة الصحيحة؟
الرد }}}
تم الشكر بواسطة: ابو ليلى
#8
السلام عليكم و رحمة الله و بركاته
هو انت لو تتبعت الكود سطر سطر اثناء التنفيذ ستلاحظ انه لا يعيد قيمة False
لننظر للكود 
اولاً 
PHP كود :
Dim z As Integer=FindItem(ListView2.Items0itm.SubItems(1).Text
ثم استدعيت التالي
PHP كود :
If IsNumeric(zThen 
هل تتوقع مثلاً ان النوع Integer ليس رقماً لتضع الشرط السابق ؟؟؟
بعد ذلك 
PHP كود :
If False Then 
هل Integer = False   ???

بعد ذلك تريد من الدالة اعادة نوعين (مرة قيمة رقمية و مرة قيمة منطقية) , لحل مثل هذه الاشكالية لديك العديد من الطرق
اولها كما في الكود السابق , اذ اعدت مصفوفة بنوع و قيمة .
او ان تستعمل اعادة نوع مجهول و عند الاستدعاء تجري عملية التحويل للنوع الذي تريده 

بالتطبيق على الكود السابق
PHP كود :
   Public Shared Function FindItem2(Of T)(ItemList As ListView.ListViewItemCollectionColumnIndex As IntegerSearchString 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).TextThen
                Dim z 
As String FindItem2(Of String)(ListView2.Items0itm.SubItems(1).Text)
 
               If IsNumeric(zThen
                    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 
هذه المقالة تسلط الضوء على التقنية - مفهوم Generics بشكل مبسطمفهوم Generics بشكل مبسط

كما و يوجد طرق اخرى و افكار للوصول الى حل مشابه.
تحياتي.

انصحك باستخدام الاسلوب الحديث في التعامل مع الملفات على السيرفرت و المواقع عبر مكتبة HttpClient
و استخدام اسلوب عدم التزامن لتتلافى مشاكل التجميد لدى الاستدعاء

PHP كود :
   Private Async Sub Button5_Click(sender As ObjectAs EventArgsHandles Button5.Click
....
....
        Dim text2 As String
        Using text22 
As New Http.HttpClient()
            text2 Await text22.GetStringAsync("https://goo.gl/iHJyWe")
        End Using

....
....

    End Sub 
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة:
#9
ياسلام عليك
والله انت استاذ
دا افضل شئ
وكمان انت فهمتنى حاجات مكنتش تخطر فى بالى خالص
ايضا سوف ابحث عن HttpClient
لكى افهمها اكتر لانى لم اسمع عنها من قبل
تسلم ايدك بجد
ربنا يجعله فى ميزان حسناتك


واجهتنى مشكلة اخرى كما بالصورة

تظهر فقط عندما تكون عناصر ليست 2
اقل من ليست 1
يريت تفدنى بالسبب والحل
وجزاك الله كل خير

(16-07-17, 01:56 AM)ابو ليلى كتب : السلام عليكم و رحمة الله و بركاته
هو انت لو تتبعت الكود سطر سطر اثناء التنفيذ ستلاحظ انه لا يعيد قيمة False
لننظر للكود 
اولاً 
PHP كود :
Dim z As Integer=FindItem(ListView2.Items0itm.SubItems(1).Text
ثم استدعيت التالي
PHP كود :
If IsNumeric(zThen 
هل تتوقع مثلاً ان النوع Integer ليس رقماً لتضع الشرط السابق ؟؟؟
بعد ذلك 
PHP كود :
If False Then 
هل Integer = False   ???

بعد ذلك تريد من الدالة اعادة نوعين (مرة قيمة رقمية و مرة قيمة منطقية) , لحل مثل هذه الاشكالية لديك العديد من الطرق
اولها كما في الكود السابق , اذ اعدت مصفوفة بنوع و قيمة .
او ان تستعمل اعادة نوع مجهول و عند الاستدعاء تجري عملية التحويل للنوع الذي تريده 

بالتطبيق على الكود السابق
PHP كود :
   Public Shared Function FindItem2(Of T)(ItemList As ListView.ListViewItemCollectionColumnIndex As IntegerSearchString 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).TextThen
                Dim z 
As String FindItem2(Of String)(ListView2.Items0itm.SubItems(1).Text)
 
               If IsNumeric(zThen
                    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 
هذه المقالة تسلط الضوء على التقنية - مفهوم Generics بشكل مبسطمفهوم Generics بشكل مبسط

كما و يوجد طرق اخرى و افكار للوصول الى حل مشابه.
تحياتي.

انصحك باستخدام الاسلوب الحديث في التعامل مع الملفات على السيرفرت و المواقع عبر مكتبة HttpClient
و استخدام اسلوب عدم التزامن لتتلافى مشاكل التجميد لدى الاستدعاء

PHP كود :
   Private Async Sub Button5_Click(sender As ObjectAs EventArgsHandles Button5.Click
....
....
        Dim text2 As String
        Using text22 
As New Http.HttpClient()
            text2 Await text22.GetStringAsync("https://goo.gl/iHJyWe")
        End Using

....
....

    End Sub 

الرد }}}
تم الشكر بواسطة: ابو ليلى
#10
خلي الشرط كده
PHP كود :
If Not String.IsNullOrEmpty(text3) And num <= flist.Count 
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 2 ) ضيف كريم