no_mercy

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

17 ردود في هذا الموضوع

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

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

dim ff as new form1

ff.mdiparent=me

ff.show

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

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

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اذا كنت تعني أنك تريد تنفيذ هذا الكود مرة واحدة فقط فما عليك سوى أعلان مثلا متغير 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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

dim ff as new form1

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

ff.mdiparent=me
ff.show

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هذه المشكلة يواجها الكثيرون مم تعودا على VB6 و مازال هنالك مناقشات كثيرة لوضع حل لها ولم اجد حتى الان حل جذري ومناسب

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

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

هذه المشكلة هي من اوائل المشاكل التي تقابل من يريد الانتقال من ال 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

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ياترى كيف لازم نشكرك على الجواب الحلو

يعطيك ألف عافية

0

شارك هذا الرد


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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

0

شارك هذا الرد


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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

السلام عليكم

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

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

أضف كلاس جديد ولتسمه مثلاً 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

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

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

:)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

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

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

تقبل تحياتى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .