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

فتح الفورم مرة واحدة

مغلق
بدأه no_mercy في 6 مارس 2005 · 16 رد · 12,758 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف انفذ فتح الفورم مرة واحدة

على سيبيل المثال عند تنفيذ الامر التالي

dim ff as new form1

ff.mdiparent=me

ff.show

هذا الفورم ينفذ فتح الفورم داخل mdi form ولكن الامر يتنفذ اكثر من مرة او اذا صح القول ان يمكن ان ينفذ اكثر من مرة

المطلوب انة اريد ان يٌفتح لمرة واحدة فقط

وشكرا

#2

اذا كنت تعني أنك تريد تنفيذ هذا الكود مرة واحدة فقط فما عليك سوى أعلان مثلا متغير Integer و تقوم بفحصه عند تنفيذ الكود فاذا كان يساوي 0 ينفذ الكود و و يضاف اليه 1 اما غير ذلك فلا تنفذ الكود و هذا مثال بسيط

في منطقة General (داخل الكلاس طبعا تقوم باعلان متغير :

Dim I as Integer = 0

ثم تكتب الكود

If I=0 Then
I+=1
dim ff as new form1 
ff.mdiparent=me
ff.show
End If

أتمنى أن يكون هذا ما تريد

1
#3

تستطيع ذلك بطريقة أسهل عن طريق وضع المتغير على مستوى الفورم الأصلي:

dim ff as new form1

ومثلاً في زر الإستدعاء تكتب :

ff.mdiparent=me
ff.show

Learn Japanese :>>> http://www.nouben.com/

#5

بسم الله الرحمن الرحيم

الحمد لله والصلاة والسلام على رسول الله

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

هذه المشكلة هي من اوائل المشاكل التي تقابل من يريد الانتقال من ال vb6 إلى إصدارة الدوت نيت

ولقد واجهتني فعلاً ولكن ولله الحمد وجدت لها حلاً بفضل الله تعالى

والفكرة تتلخص في إنشاء خاصية جديدة لنموذجك وأنا أسميها Simulator أو المحاكي لأننا نستخدم فيها المحاكاة للفورم المعني ، هذه الخاصية ستغنيك عن استخدام الأكواد التي ذكرها الإخوة الكرام وهي الأسلوب التقليدي لفتح النموذج وهو تعريف نموذج جديد فورم على أنه نوع الفورم المعني ثم نقوم بالتعامل معه

الكود هو

    Private Shared FormSimulator As AboutForm
    Private Shared InitializingSimulator As Boolean

    Public Shared Property Simulator() As AboutForm
        Get
            If FormSimulator Is Nothing OrElse FormSimulator.IsDisposed Then
                InitializingSimulator = True
                FormSimulator = New AboutForm
                InitializingSimulator = False
            End If
            Simulator = FormSimulator
        End Get
        Set(ByVal Value As AboutForm)
            FormSimulator = Value
        End Set
    End Property

لاحظ أن AboutForm هو الفورم المعني ، بمعنى أننا سنضع هذه الخاصية للفورم AboutForm ، فإذا أردت استخدامها مع نموذج آخر فقط غير كل اسم للفورم في الكود الموجود ، واستبدله باسم النموذج الذي سيحتوي على هذه الخاصية

الأن نأتي للتنفيذ

فلنفرض أنني داخل الواجهة الرئيسية للبرنامج ، وأريد عند الضغط على زر معين يظهر لي النموذج فورم ، فماذا أفعل ؟

كان مبرمجو الvb6 يكتبونها هكذا

AboutForm.Show

أما نحن ومع هذه الخاصية سنفعل الآتي :

AboutForm.Simulator.Show

وأيضاً يمكن هكذا كما ذكر أخونا هارون لجعل النموذج الرئيسي أب لهذا النموذج :

            AboutForm.Simulator.MdiParent = Me
            AboutForm.Simulator.Visible = True

تأكد أنك لو استدعيت هذا الكود ألف مرة فلن يفتح الفورم غير مرة واحدة فقط ، طالما أنه مفتوح ، ولن تظهر منه نسخة أخرى حتى تغلقه

باختصار إن هذه الجملة AboutForm.Simulator إذا كتبتها داخل أي نموذج آخر تساوي بالضبط أن تكتب Me. داخل النموذج AboutForm

جربوا وأعطوني آرائكم

وفقكم الله تعالى .

1
#6

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

وأحب أن أضيف سؤال يتعلق بإجابة الأخ الفاضل محمد النحراوي. ولكن بعد إذن الأخ no_mercy

و سؤالي هو أني قد عملت فورم من خلاله أقوم بفتح حوالي 20 فورم بالضغط على الزر المخصص لكل فورم , أريد هنا أن أجعل الخاصية (Public Shared Property Simulator() As AboutForm) التي وضعتها أنت موحدة لكل الـ20فورم عن الفتح بدلا من أن أعيد كتابتها 20 مرة لكل فورم، فهل يمكن ذلك أم لا ؟

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#8
seahmad كتب:
و سؤالي هو أني قد عملت فورم من خلاله أقوم بفتح حوالي 20 فورم بالضغط على الزر المخصص لكل فورم , أريد هنا أن أجعل الخاصية (Public Shared Property Simulator() As AboutForm) التي وضعتها أنت موحدة لكل الـ20فورم عن الفتح بدلا من أن أعيد كتابتها 20 مرة لكل فورم،  فهل يمكن ذلك أم لا ؟

يمكنك أن تنشيء Class يورث من الـ System.Windows.Forms.Form و تضع به الـ Property المعنية، ثم بعد ذلك تقوم بعملية الـ Visual Inheritance للإستخدامات المستقبلية مثلها مثل الفورم العادية..

رأس الحكمة الإيمان بالله

#9

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

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

اما لسؤال أخي الحبيب أحمد ، فإجابته كما تفضل أخونا الكريم محمد عبد العليم وذكر فالحل في أن تنشيء نموذجاً خاصاً بك ثم ترث منه بعد ذلك

وفقك الله للخير

#10

الأخ الفاضل محمد عبد العليم جزاك الله خيرا على إجابتك ولكن أعتقد أن الـProperty تحتاج لبعض التعديل ، فما هو ذلك التعديل المطلوب ؟

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#11

جزاكم الله الف خير علي هيك مشاركات والا بلا

والسلام عليكم

#12
seahmad كتب:
الأخ الفاضل محمد عبد العليم جزاك الله خيرا على إجابتك ولكن أعتقد أن الـProperty  تحتاج لبعض التعديل ، فما هو ذلك التعديل المطلوب ؟

ماذا تقصد ببعض التعديل أخي الفاضل؟؟، هل حدث خطأ معين عندما وضعت الـ Property في Form موروثة ؟؟

رأس الحكمة الإيمان بالله

#13

بسم الله الرحمن الرحيم

السلام عليكم

سأضع مثال بسيط على موضوع الوراثة

افتح مشروع جديد

أضف كلاس جديد ولتسمه مثلاً SimForm

ضع هذا الكود داخل الكلاس

Public Class SimForm

    Inherits System.Windows.Forms.Form
    Private Shared FormSimulator As SimForm
    Private Shared InitializingSimulator As Boolean

    Public Shared Property Simulator() As SimForm
        Get
            If FormSimulator Is Nothing OrElse FormSimulator.IsDisposed Then
                InitializingSimulator = True
                FormSimulator = New SimForm
                InitializingSimulator = False
            End If
            Simulator = FormSimulator
        End Get
        Set(ByVal Value As SimForm)
            FormSimulator = Value
        End Set
    End Property

End Class

هل لا حظت شيئاً ؟؟؟

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

وهذه الجملة هي المسئولة عن ذلك

Inherits System.Windows.Forms.Form

المهم الآن أصبح لديك نموذج به خاصية المحاكي يمكنك أن ترث منه ألف فورم بدون أن تكرر الأكواد

الآن قم بعمل Build لبرنامجك ، حسنا الآن أصبحت جاهزاً فلنبدأ

قم بإضافة فورم جديد إلى مشروعك وليكن اسمه مثلاً Form1 وقم بإضافة فورم آخر Form2

أدخل على الكود الخاص بالنموذج Form1 وغير هذا السطر

Inherits System.Windows.Forms.Form

واجعله هكذا

Inherits SimForm

الآن افتح النموذج Form2 ، وأضف عليه زر Button1

وضع في الحدث Clickالخاص به الكود التالي

Form1.Simulator.Show()

قم بعمل Run للبرنامج ولكن قبل ذلك قم بجعل النموذج Form2 هو الذي يبدأ به البرنامج عند التشغيل وذلك من خصائص المشروع

الآن سيظهر أمامك النموذج Form2 وبه الزر Button1 قم بالضغط عليه ..

ماذا ترى ؟؟

كرر هذه العملية كثيراً

فلن ترى غير نسخة واحدة من النموذج Form1 وهي الظاهرة أمامك

أذكركم مرة أخرى بأمور هامة ، الآن يمكنك أن تورث هذه الخاصية لجميع نماذجك فقك بتغيير السطر

Inherits System.Windows.Forms.Form

لهذا السطر

Inherits SimForm

ثانياً عند استدعاءك للنموذج من أي نموذج آخر فقط اذكر اسم النموذج يليه اسم الخاصية Simulator

عموماً هذه فكرة مبدئية يمكن لك منكم أن يغير فيها حسبما يراه مناسباً له ، فمثلاً يمكنك جعل الفورم من اليمين لليسار بخاصية المرآة (من يذكرني كيف ;) )

أرجو من الله تعالى أن يكون سبحانه وفقني لإيصال المعلومة

وآخر دعوانا أن الحمد لله رب العالمين

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

#14

أخي الفاضل الكريم محمد عبد العليم أشكرك وكان مقصودي هو التفصيل الذي تقدم به أخونا محمد النحراوي فتح الله عليه وزاده بسطة في العلم

فأنا مازلت لاأتقن هذا المفهوم

بارك الله فيكم جميعا

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#15

وفتح الله عليك أخي الحبيب

بالمناسبة ربما يكون هذا الموضوع مناسب للتثبيت لأن كثيرون يسألون عن هذا الأمر ، خاصة وأن مايكروسوفت ألغت -أو شارفت - دعمها للvb6 ، وسنرى هنا شباب الvb6 كتير الأيام القادمة بإذن الله

:)

#16

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

==================

اقتباس
بالمناسبة ربما يكون هذا الموضوع مناسب للتثبيت لأن كثيرون يسألون عن هذا الأمر ، خاصة وأن مايكروسوفت ألغت -أو شارفت - دعمها للvb6 ، وسنرى هنا شباب الvb6 كتير الأيام القادمة بإذن الله

جزاك الله خيرا أخى الكريم على هذه المعلومات وفتح الله على وعليك

تقبل تحياتى

#17

جزاك الله خيري الدنيا و الآخرة و نفع بك

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

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