منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : الفئة SingleInstance لمنع البرنامج ان يفتح اكثر من مرة في نفس الوقت باسهل طريقة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته


تقديم : 

كنت طرحت موضوع عن جعل البرنامج يفتح مرة واحدة فقط في نفس الوقت 

ولكن الموضوع كان معقد بعض الشيء لذلك فكرت ان اضع الكود في Class سميته SingleInstance 

فيه طريقة Static اسمها NewInstance تقوم بالمطلوب وتعيد قيمة اذا كانت هذه نسخة جديدة من البرنامج ام النسخة الاولى

وكذلك فيه Class اسمه SingleForm يرث من الفئة Form العادية ولكن اضفت حدث NewInstanceOpened يطلق عند فتح نسخة مكررة من البرنامج ، يمكننا من فعل ما نريده عندما يقوم المستخدم بفتح نسخة مكررة من البرنامج ، نعرض رسالة مثلا او نظهر الفورم اذا كان مخفي ،


الاستخدام :

استخدام الفئة في غاية البساطة ، 

1. فقط اضف الملف SingleInstance.cs الى مشروعك  ، ومن ثم قم بعمل Build

[attachment=25617]

2. الان انتقل الى ملف Program.cs واضف السطر التالي في void main قبل كل شيء :

كود :
           if (SingleInstance.NewInstance()) return;

[attachment=25618]

3. الان انتقل الى الفورم الرئيسي ( او الفورم الذي تريد ان تستمع فيه لحدث فتح نسخة مكررة من البرنامج ) 
وافتح ملف الكود Form1.cs وغير Form في تعريف الفئة الى SingleForm لكي يرث من الفئة التي عرفناها والتي تتضمن الحدث :

[attachment=25619]

الان تجد ان الحدث موجود في قائمة الاحداث :

[attachment=25620]

يمكنك ان تكتب ماتريد فعله عندما تفتح نسخة مكررة من البرنامج ، مثلا ان تقوم باظهار النافذة اذا كانت مصغرة او بالخلف:

كود :
       private void Form1_NewInstanceOpened(object sender, EventArgs e)
       {
           if (WindowState == FormWindowState.Minimized)
               WindowState = FormWindowState.Normal;


           bool top = TopMost;
           TopMost = true;
           TopMost = top;
       }
الكود في الفئة ليس من عندي ولا الفكرة كذلك ، انا مجرد جمعتها في كلاس لسهولة الاستخدام فقط
المصدر : http://sanity-free.org/143/csharp_dotnet...ation.html