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

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

فقد بحثت كثيرا عن كود يجعل البرنامج عند فتحه مره اخري وكان مفتوح من قبل تظهر رساله تفيد بأن البرنامج مفتوح من قبل
هناك خياراسمه (Make single instance application) ولكن هدا الخيار يجبر البرنامج بعدم فتحه مره اخري
ولكن ممكن العميل ما ياخدش باله ان البرنامج مفتوح ويظن ان البرنامج فيه مشكله لانه بيضغط عليه ومفيش حاجه بتتفتح
فلابد من ظهور رساله تفيد بان البرنامج مفتوح 
واظن ان ده هيكون افضل
بحثت كثيرا والحمد لله وجدت حل 
قمت بشرحه لكم علشان الكل يستفيد:

1- نقوم بعمل متغير في Setting  ونسميه مثلا CheckOpen ويكون من نوع  Boolean ونجعل قيمته الافتراضيه False
2-في حدث ال Load  نقوم بكتابة الكود التالي : 


PHP كود :
If My.Settings.CheckOpen True Then
            MsgBox
("البرنامج مفتوح بالفعل")
 
           End
        Else
            My
.Settings.CheckOpen True
            My
.Settings.Save()
 
           Me.Show()
 
       End If 
3- في حدث ال Form_Close  او في زر غلق البرنامج نقوم بكتابة الكود التالي :

PHP كود :
My.Settings.CheckOpen False
        My
.Settings.Save()

 
       Close() 


مرفق مثال لعله يفيد بعض الاخوه.

[attachment=23225]
السلام عليكم و رحمة الله و بركاته
بارك الله فيك أخي الكريم على المثال الرائع و مشاركتنا إيّاه
للإضافة و تنوّع الأفكار يمكن جعل هذا الكود بأوّل فورم لودْ بالمشروع فهو يفي بالغرض بطريقة جيّدة
كود :
 Dim appProc() As Process
       Dim strModName, strProcName As String
       strModName = Process.GetCurrentProcess.MainModule.ModuleName
       strProcName = System.IO.Path.GetFileNameWithoutExtension(strModName)
       appProc = Process.GetProcessesByName(strProcName)
       If appProc.Length > 1 Then
           MessageBox.Show("توجد نسخة ثانية من المنظومة قيد التّشغيل .. سيتم الخروج نهائيًا")
           End
       End If

تحياتي
وعليكم السلام ورحمة الله وبركاته
مرحباً اخى Emam emam

جزاك الله خيراً على الاضافة الجميلة والطريقة البسيطة والرائعة
الطريقة التى تستخدمها رائعة وسهل فهمها لدا الجميع

ولكن تقع مشكلة بسيطة ممكن تقول عنها كونها نقطة ضعف بالكود
وهو اذا تم نسخ ملف البرنامج الى مجلد اخر ستتمكن من فتح البرنامج مري  اخري
وهذا كون طريقة الـ Settings تعتمد على مسار البرنامج ويتم تفريغ الـ Settings
كلما تم نقل البرنامج من مسار الى مسار اخر وهذا للافادة ولكي تعم الفائدة لك وللجميع

سيتم نقل الموضوع الى القسم الصحيح حتى يعم فائدة الموضوع للاخرين

تحياتى لك
وتمنياتى لك التوفيق
(17-10-19, 01:42 AM)عبد العزيز البسكري كتب : [ -> ]
السلام عليكم و رحمة الله و بركاته
بارك الله فيك أخي الكريم على المثال الرائع و مشاركتنا إيّاه
للإضافة و تنوّع الأفكار يمكن جعل هذا الكود بأوّل فورم لودْ بالمشروع فهو يفي بالغرض بطريقة جيّدة
كود :
 Dim appProc() As Process
       Dim strModName, strProcName As String
       strModName = Process.GetCurrentProcess.MainModule.ModuleName
       strProcName = System.IO.Path.GetFileNameWithoutExtension(strModName)
       appProc = Process.GetProcessesByName(strProcName)
       If appProc.Length > 1 Then
           MessageBox.Show("توجد نسخة ثانية من المنظومة قيد التّشغيل .. سيتم الخروج نهائيًا")
           End
       End If

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

(17-10-19, 03:45 PM)elgokr كتب : [ -> ]
وعليكم السلام ورحمة الله وبركاته
مرحباً اخى Emam emam

جزاك الله خيراً على الاضافة الجميلة والطريقة البسيطة والرائعة
الطريقة التى تستخدمها رائعة وسهل فهمها لدا الجميع

ولكن تقع مشكلة بسيطة ممكن تقول عنها كونها نقطة ضعف بالكود
وهو اذا تم نسخ ملف البرنامج الى مجلد اخر ستتمكن من فتح البرنامج مري  اخري
وهذا كون طريقة الـ Settings تعتمد على مسار البرنامج ويتم تفريغ الـ Settings
كلما تم نقل البرنامج من مسار الى مسار اخر وهذا للافادة ولكي تعم الفائدة لك وللجميع

سيتم نقل الموضوع الى القسم الصحيح حتى يعم فائدة الموضوع للاخرين

تحياتى لك
وتمنياتى لك التوفيق

الف شكر لك استادنا وجبيبنا الغالي elgoker  علي هده اللمسه والمعلومه الجميله جزاك الله خيرا
الشكر لله والحمد لله
والحمد لله على كل حال

نحن دائماً نتعلم من بعضنا اخى الحبيب
تخيل عندما يقال لكل مشكلة 1000 حل

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

تحياتى لك
وتمنياتى لك التوفيق