03-10-12, 02:20 PM
كاتب الموضوع : المؤمنة
درس: كيفية تفادي خطأ استدعاء واجهة بعد إغلاقها form1.show .... تقييمه: للمبتدئينإعداد: م/ فرحناز سجّاد حسين فاضل - مهندسة كمبيوتر ...
النسخة: 2003
_______________________________________
هي من المشاكل التي واجهتني في بداية تعاملي مع الVB.NET .. تتلخص المشكلة في استدعاء فورم تم إلغاؤه من الذاكرة بغلقه بواسطة النقر على زر الإغلاق الموجود في أعلى اليمين باللون الأحمر وفيه × بيضاء ... سأبدأ بشرح المشكلة مع تقديم الحل لها ...
لدينا في المشروع واجهتين ... لتكن form1 و form2 .. وفي كلاهما زر Button1 و Button1 أيضاً .. كلا الزرين يقومان بإعادة الضاغط على أحدهما إلى الواجهة الآخر ... ووضعنا الكود التالي في كل زر ...
كود :
[b]form2.show[/b]
كود :
[b]Dim form2 as new form2[/b]
كود :
[b]form1.show[/b]
كود :
[b]Dim form1 as new form1[/b]
كود :
[b]form2.showdialog(Me)[/b]
كود :
[b]Private Sub form2_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing[/b]
[b]e.Cancel = True[/b]
[b]Me.Hide()[/b]
[b]End Sub[/b]
شغل البرنامج .. ضغط على الزر في فورم1 ظهر فورم2 ضغط على الزر ظهرت نسخة جديدة للفورم1 ضغط على الزر ظهرت نسخة جديدة للفورم2 .. وهكذا دواليك إلا أن تمتلئ الذاكرة ويتوقف الجهاز عن المتابعة .. ويعمل إعادة تشغيل !!!
فما الحل ؟ الحل هو اللجوء لجملة Try .. Catch .. End Try وهو كالتالي ..
---- الفورم الأول ----
كود :
Windows Form designer generated code
كود :
[b]'عرف الفورم2 هنا[/b]
[b]Dim form2 As New Form2[/b]
[b]'ثم في كود زر استدعاء الفورم وليكن اسمه button1[/b]
[b]Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click[/b]
[b]Try[/b]
[b]form2.ShowDialog(Me)[/b]
[b]Catch[/b]
[b]Dim form2 As New Form2[/b]
[b]form2.ShowDialog(Me)[/b]
[b]End Try[/b]
[b]End Sub[/b]
كود :
[b]'عرف الفورم1 هنا[/b]
[b]Dim form1 As New Form1[/b]
[b]'ثم في كود زر استدعاء الفورم وليكن اسمه button1[/b]
[b]Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click[/b]
[b]Try[/b]
[b]form1.ShowDialog(Me)[/b]
[b]Catch[/b]
[b]Dim form1 As New Form1[/b]
[b]form1.ShowDialog(Me)[/b]
[b]End Try[/b]
[b]End Sub[/b]
كود :
'عرف الفورم1 هناDim form1 As New Form1
'ثم في كود زر استدعاء الفورم وليكن اسمه button1
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
Try
form1.ShowDialog(Me)
Catch
Dim form1 As New Form1
form1.ShowDialog(Me)
End Try
End Sub
اتمنى أن يكون الشرح واضحاً ....
أختكم المؤمنة ...