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

كيف أغلق عدد من الفورمس باستخدام ControlBox؟

بدأه PK1 في 19 مارس 2011 · 2 رد · 824 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله ويركاته

أبحث عن طريقة لإغلاق فورم معين باستخدام الControlBox فيغلق معه مجموعة من الفورمس دون أن يتم إغلاق البرنامج بالكامل (فقط عدد معين من الفورمس)

لكي أوضح ما أقصد يمكن أن أشرح الفكرة كالتالي:

لدي برنامج يحتوي على مجموعة من الفورمس

AddDataForm1, UpdateDataForm1, DeleteDataForm1))

عندما أفتح AddDataForm1 وأضغط على زر Next يقوم بعمل Hide ل AddDataForm1 ثم يظهر لي AddDataForm2......... وهكذا يخفي الفورم الحالي و يفتح الفورم التالي، حتى الفورم الأخير AddDataForm5

المطلوب:

عندما يقوم المستخدم بإغلاق أي من هذه الفورمس باستخدام ControlBox

يجب أن يتم إغلاق جميع الفورمس التابعة ل AddDataForm1 ( فقط – وليس البرنامج بالكامل) حيث أن بعضها مازال في وضع Hide

سبق وأن جربت استخدام Form _FormClosing لكل الفورمس و وضعت فيها أوامر إغلاق هذه الفورمس

 Private Sub AddDataForm1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        AddDataForm2.close()
        AddDataForm3.close()
        AddDataForm4.close()
        AddDataForm5.close()

    End Sub

ولكنها لا تعمل، و يبدو أنه يحصل لها loop متداخل وتظهر لي هذه ال error message:

an unhandled exception of type 'system.stackoverflowexception' occurred in system.windows.forms.dll

فهل توجد طريقة أخرى؟

وجزاكم الله خير

#2

صع كل سطر في try catch

#3

شكرا جزيلا لك KARIMSOFT

ولكني تمكنت و الحمد لله من إيجاد الإجابة

إما بالطريقة الأولى باستخدام .Dispose() في FormClosing

Private Sub AddDataForm1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

Me.Dispose()
AddDataForm2.Dispose()
AddDataForm3.Dispose()
AddDataForm4.Dispose()
AddDataForm5.Dispose()
End Sub

أو بالطريقة الثانية

وهي باستخدام List من نوع Form يتم وضع فيها الفورمس المفتوحة ثم تقوم FormClosing بتفريغها وإغلاقها، فإذا ذهبت لل FormClosing الأخرى وجدت ال List فارغة

ولكني لم أجربها ولكن جربت بدلا منها استخدام متغيرات من نوع Boolean لتعمل لي اختبار إن كانت الفورمس مفتوحة واختبار هل سبق وأغلقت أم لا

ففي Module:

     Public closeAddDataForm1 As Boolean = True
    Public closeAddDataForm2 As Boolean = True
    Public closeAddDataForm3 As Boolean = True
    Public closeAddDataForm4 As Boolean = True
    Public closeAddDataForm5 As Boolean = True

وفي أكواد الفورمس:

Dim closeform As Boolean = False

Private Sub AddDataForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        closeAddDataForm1 = False

End Sub

Private Sub AddDataForm1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        If closeform = False Then

         ' الشرط الثاني  يجب أن يتكرر في كل كود 
        ' closeAddDataForm1 على أساس نفس المتغير
        'لكي يتأكد أن الفورم الأول هل تم إغلاقه أم لا
        'فلإن كان مغلقا لم تعد هناك حاجة لتكرار الإغلاق

            If closeAddDataForm1 = False Then

                closeAddDataForm1 = True

                If closeAddDataForm2 = False Then
                    AddDataForm2.Close()
                    closeAddDataForm2 = True
                End If

                If closeAddDataForm3 = False Then
                    AddDataForm3.Close()
                    closeAddDataForm3 = True
                End If

                If closeAddDataForm4 = False Then
                    AddDataForm4.Close()
                    closeAddDataForm4 = True
                End If

                If closeAddDataForm5 = False Then
                    AddDataForm5.Close()
                    closeAddDataForm5 = True
                End If

            End If
        End If

    End Sub

وإن تم إغلاق أي من هذه الفورمس من داخل كوده و ليس إخفاءه:

مثلا : في زر Next تم إغلاق هذا الفورم قبل فتح الفورم التالي:

Private Sub NextButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NextButton.Click

        closeform = True
        AddDataForm2.Show()
        Me.Close()

End Sub

قد تحتاج هذه الأكواد لبعض التعديلات

ولكن لقد وجدت ما أحتاج له و الحمد لله

وشكرا جزيلا لكم

1

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