الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إغلاق جميع الفورم المفتوحة غير الرئيسية

مغلق
بدأه بن ملعاط في 1 أكتوبر 2006 · 6 رد · 849 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

يا كرام أنا أريد أن أغلق جميع النماذج المفتوحة غير الـ MDI واستخدمت هذا الكود بس ما نفع ممكن تصححوا لي

الرسالة دائما بتجي

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

مع أنه عند عمل الـ DEBUG تكون الـ Index داخل القيمة يعني لو الفورم المفتوحة 4 الـ Index ما يكون خارج عن الـ 4

وهذا الكود

Public Sub M_Logof_Menu_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles M_Logof_Menu.Click
		Dim oForm As Integer
		  For oForm = My.Application.OpenForms.Count To 1 Step -1
			If My.Application.OpenForms(oForm).IsMdiContainer Then
			Else
				My.Application.OpenForms(oForm).Close()
			End If
		Next
End Sub

اللهم اغفر لي و لوالدي و للمؤمنين يوم يقوم الحساب

لا إله إلا الله عدد ما كان و عدد ما يكون و عدد الحركات و السكون

#2

تصحيح كودك

		For SFrm As Integer = 0 To My.Application.OpenForms.Count - 1
			If My.Application.OpenForms(SFrm).IsMdiContainer = False Then
				My.Application.OpenForms(SFrm).Close()
			End If
		Next

وذلك بسبب أن المصفوفات في VB .net تبدأ من الصفر وليس من الواحد كما كان الحال في VB6 و تنتهي بـ index يساوي عدد العناصر الموجودة فيها ناقص واحد وهذا سبب الخطأ لديك

بس الأفضل كان لو استخدمت حلقة For each بالشكل التالي

		For Each Sfrm As Form In My.Application.OpenForms
			If Sfrm.IsMdiChild = True Then
				Sfrm.Close()
			End If
		Next

تم تعديل هذه المشاركة بواسطة samerselo في 1 أكتوبر 2006 في 20:59

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

أشكرك أخي الكريم على تصحيحك و فعلا الكود اشتغل

أما بالنسبة لحلقة For each فقد أعطاني هذا الخطأ و ما فهمته أن الـ Collections وهي الـ Openforms قد تغيرت فهل لديك تلميح ، لأني من البداية كنت ارغب في استعمالها لكن هذا الخطأ دعاني إلى تجربة الكود السابق.

وهذه هي الرسالة

System.InvalidOperationException was unhandled
  Message="Collection was modified; enumeration operation may not execute."

شكرا لتفاعلك

اللهم اغفر لي و لوالدي و للمؤمنين يوم يقوم الحساب

لا إله إلا الله عدد ما كان و عدد ما يكون و عدد الحركات و السكون

#4

الحق معك - لم أنتبه لهذا الموضوع -

فعلا تغير الـ collection الخاص بالنماذج بعد اغلاق أحدها وهذا ما سبب الخطأ

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#5

طلبك سوف يتحقق من خلال هذا الكود :

		'إغلاق كل النوافذ الأبناء
		Dim AllChildrenForm As Form
		For Each AllChildrenForm In Me.MdiChildren
			AllChildrenForm.Close()
		Next AllChildrenForm

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#6

شكرا أخ yaseralshikh

فعلا فاتت علي حكاية MdiChildren والكود أشتغل

شكرا لتفاعلك الكريم

اللهم اغفر لي و لوالدي و للمؤمنين يوم يقوم الحساب

لا إله إلا الله عدد ما كان و عدد ما يكون و عدد الحركات و السكون

#7

لا شكر على واجب ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

هذا الموضوع مغلق.

مواضيع مشابهة