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

سؤال عن (Splash Screen)شاشة بداية البرنامج

مغلق
بدأه النهر في 7 أبريل 2005 · 15 رد · 1,946 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله

السلام عليكم

عندي 3 فورم

الاولى (splash): شاشة بداية البرنامج

الثانية (Form1): ادخال بيانات وفيها زر التالي

الثالثة (Form2): ايضا ادخال بيانات و فيها زر السابق

المشكلة:

انه عندما اضغط زر السابق من الفورم الثالثة، تظهر الفورم splash ثم تظهر الفورم الثانية.

وانا اريد ان تظهر splash في بداية البرنامج فقط وعندما يضغط السابق تظهر الفورم الثانية.

جرّبت اكواد من المنتدى ولكن لم تنجح لا تزال تظهر .

Private Sub Form1_Load(ByVal sender As System.Object, _
             yVal e As System.EventArgs) Handles MyBase.Load

Me.Hide()
Dim frmSplash As New splash
frmSplash.Show()
frmSplash.Update()
Thread.Sleep(5000)
frmSplash.Close()
Me.Visible = True
End Sub

ولكن لم تنجح ثم كتبت التالي في Form1

#Region " Windows Form Designer generated code "

   Public Sub New()
       MyBase.New()
       Dim frmSplash As New splash
       frmSplash.Show()
       Application.DoEvents()
       Threading.Thread.Sleep(5000)
       frmSplash.Close()
       InitializeComponent()
   End Sub

ولم تنجح

ثم استخدمت طريقة اخرى بإعلان متغير Integer و اقوم بفحصه عند تنفيذ الكود فاذا كان يساوي 0 ينفذ الكود و يضاف اليه 1 اما غير ذلك فلا ينفذ الكود، داخل الـ Class اعلنت متغير I:

Dim I as Integer = 0

ثم في Form1_Load

If I=0 Then
I+=1
dim frmSplash as new splash
frmSplash.Show()
frmSplash.Update()
Thread.Sleep(5000)
frmSplash.Close()
Me.Visible = True
Else
 Me.Visible = True
End If

ايضا لم تنجح ثم استبدلت

Dim I as Integer = 0

بـ

Public I as Integer = 0

وكلها لم تنجح ولا اعلم لماذا؟!

أرجو افادتي.

#2

أريد مساعدتكم لايجاد حل لمشكلتي.

#3

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

أولاً إسمح لي أخي الفاضل، طريقتك في إظهار الـ Splash Form خاطئة، فأنت تعتمد على تأجيل فتح الـ Form الرئيسية بإستخدام Thread.Sleep و هذه كارثة (اسمح لي)، (بالرغم من اني كنت استخدم هذا الأسلوب بالماضي :D )..

إن الهدف الأساسي للـ Splash Form هو إيحاء المستخدم ان التطبيق سريع في التحميل بالرغم من انه من الممكن أن يكون التطبيق بطيء جداً في التحميل لكن هذه الطريقة تنجح في معظم الأحوال، و الدليل على ذلك معظم برامج Microsoft :D .

خصوصاً لو كان هذا التطبيق يتصل بقاعدة بيانات وقت التحميل، أو إحتواء الـ Form الرئيسية على الكثير من الـ Controls التي تتسبب في بطئ التحميل، لذا تعتبر فكرة الـ Thread.Sleep فكرة غير صائبة تماماً، لأنها تساعد على بطئ التحميل للتطبيق.

الفكرة الأمثل لإظهار الـ Splash Form هي اعتماد التطبيق بالكامل على الـ ()Sub Main ..

الـ ()Sub Main هي نقطة البداية للتطبيق، لكن يجب أن تكون معرفة بـ Shared، كما في المثال:

Public Shared Sub Main()
    'Code

End Sub

يمكنك أن تقوم بإنشاء الـ Sub Main داخل الـ Class الخاص بالـ Form أو تقوم بإدراج Module للمشروع و تنشئ داخله الـ Sub Main و في هذه الحالة لن تحتاج الى تعريفها بـ Shared لأن الـ Module معرف بـ Shared إفتراضياً.

خارج الموضوع قليلاً --> أو تقوم بإدراج Component Class ان كنت ستستخدم الـ Database Objects مثل الـ Adapters و الـ Dataset لتقوم بإدراج هذه الكائنات على الـ Component مباشرةً مثلها مثل أي Form حتى تكتب كل الكود الخاص بالـ Database بداخل هذا الـ Component للتنظيم، و من ثم انشاء الـ ()Sub Main داخل هذ الـ Component مع تعريفها بـ Shared، و بذلك يكون هذا الـ Component يحتوي على كل العوامل المبدئية لتشغيل تطبيقك مثل الـ Splash Form و الإتصال بقواعد البيانات و الخ (عن نفسي أفضل هذه الطريقة).

مثال بإستخدام الـ Module :

أولاً إدرج Module لمشروعك عن طريق Add New Item ثم اختار Module .

قم بإنشاء الـ Sub Main الخاصة لهذا الـ Module و اكتب بداخلها الكود الخاص بتحميل الـ Splash Form أولاً ثم تحميل الـ Form الأساسية للمشروع و من ثم اغلاق الـ Splash Form و إزالتها من الذاكرة:

Module Module1

    Dim mMain As frmMain ' الفورم الأساسية للمشروع


    Public Sub main()
        Dim splash As New frmSplash
        splash.Show() 
        splash.Update()

        mMain = New frmMain
        mMain.Show()
        mMain.Update()

        splash.Close()
        splash.Dispose()


        Application.Run(mMain)
    End Sub

End Module

لا تنسى بالطبع أن تحدد الـ Start Up Object لتكون الـ Sub Main لمشروعك.

لقد أدرجت مثالاً يطبق ما تم شرحه من خلال الـ Module، و لقد وضعت الكثير من الـ Controls على الفورم الأساسية حتى يبطئ ذلك تحميل الفورم قليلاً لتستطيع رؤية الـ Splash Form.

SplashExample.zip

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

#4

شكرا جزيلا سأقوم بتجربتها .

#5

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

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

اليك يا اخي الكريم مثال اخر

ومرفق مثال على ذلك

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

Public Class Splash

    Inherits System.Windows.Forms.Form
    Public cur As New Form

    Private Sub Splash_timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Splash_timer.Tick

        ProgressBar1.Value += 2

        If ProgressBar1.Value <= 30 Then

            Label2.Text = "بداية تشغيل البرنامج ـ ـ ـ ـ"

        ElseIf ProgressBar1.Value <= 50 Then

            Label2.Text = "تحميل البرنامج ـ ـ ـ ـ"

        ElseIf ProgressBar1.Value <= 70 Then

            Label2.Text = "التحقيق من الملفات ـ ـ ـ ـ"

        ElseIf ProgressBar1.Value <= 100 Then

            Label2.Text = "الرجاء الانتظار ـ-ـ-ـ-ـ-ـ"

        End If

        If ProgressBar1.Value = 100 Then

            Splash_timer.Dispose()

            Me.Visible = False

            cur = New Form1

            cur.Show()

        End If

    End Sub

End Class

test1.zip

تم تعديل هذه المشاركة بواسطة jbsa في 12 أبريل 2005 في 11:00

#6

أخي العزيز jbsa الملف المرفق لا يعمل ويبدو أنه ينقصه الملف الذي امتداده sln

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

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

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

#7

الأخ محمد عبد العليم جزاك الله خيرا مجهود تشكر عليه.

لقد جربت الكود و اشتغل - قمت بتجربته في مشروع مستقل - ، لكن عندما كنت اريد اضافة Module في برنامجي ظهرت الرسالة المرفقة ومن ثم في أي مشروع اريد اضافة Module تظهر نفس الرسالة، لذلك اضطررت لاضافته كـ Existing item و اشتغل.

أريد تفسير لظهور هذه الرسالة؟

سؤال آخر: ما هو عمل الدالة update

splash.Update()

تم تعديل هذه المشاركة بواسطة النهر في 12 أبريل 2005 في 23:50

#8

الأخ الكريم jbsa

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

شكرا جزيلا لمساعدتك

لكن لا استطيع تشغيل المثال المرفق.

وحاولت استخدام الكود ولكن لم يضبط.

تم تعديل هذه المشاركة بواسطة النهر في 12 أبريل 2005 في 23:47

#9

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

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

الاخوة الاعزاء ، نسيت ان اذكر ان البرنامج عاملة على vb 2005 ، ولمن يريد كتابة الكود

يجب ان يستعمل في برنامجة timer ويكون اسمه splash_timer و ايضا ProgressBar ويكون اسمها

ProgressBar1 و Label ويكون اسمها label2

ويجب ان يحتوي على فورم اخر form1 وان يكون startup هو splash.

وباذن الله سيعمل البرنامج.

وقد قمت بسحب البرنامج المرفق سابقا هو يعمل بدون الملف الناقص test1.sln حيث عند عمل run يقوم بانشائه

وارفق لكم الملف الناقص

تمنياتي لكم بالتوفيق.

test2.zip

تم تعديل هذه المشاركة بواسطة jbsa في 13 أبريل 2005 في 09:46

#10

الاخ الكريم jbsa

جربت استخدم الكود ولكن لم يضبط ، الشاشة splash لا تختفي تظل ثابتة.

وقد ارفقت عملي(برنامجي 2002).

Mytest.zip

تم تعديل هذه المشاركة بواسطة النهر في 14 أبريل 2005 في 18:36

#11

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

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

اخي النهر ،

الكود المرفق صحيح 100% والحل بسيط جدا ،

اجعل splah_timer.enabled = true من شاشة تصميم الفورم

إن شاء الله سيعمل معك.

تحياتي لك.

تم تعديل هذه المشاركة بواسطة jbsa في 17 أبريل 2005 في 10:17

#12
النهر كتب:
أريد تفسير لظهور هذه الرسالة؟

و ما هي الرسالة التي تظهر لك أخي الفاضل؟؟

اقتباس
سؤال آخر: ما هو عمل الدالة update

splash.Update()

عمل الدالة Update هو إعادة رسم الـ Controls الموجودة عل الفورم لتكون ظاهرة بشكل صحيح أثناء تحميل التطبيق، لو قمت بإلغاء Splash.Update ستجد ان الـ Controls الموجود على الـ Splash Form لا تظهر بشكلها الصحيح، يمكننا أن نقول ان الـ Update مثل عملية الـ Refresh .

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

#13

الأخ الكريم محمد عبد العليم شكرا على ردك لسؤالي

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

وهي ايضا تظهر عند اضافة new item

post-22074-1116710350_thumb.jpg

تم تعديل هذه المشاركة بواسطة النهر في 22 مايو 2005 في 00:22

#14

هذه الرسالة من قبل برنامج Norton Antivirus و ليس لها علاقة بالـ Visual Studio ، و يمكنك أن تقوم بإلغاء هذه الرسالة من الـ Norton نفسه أو تقوم بإختيار Allow this script to run عندما تظهر لك الرسالة مرة أخرى...

و بالتوفيق...

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

#15

شكرا جزيلا

#16

شكرا لك يا اخ محمد عبدالعليم على هذه المجهودات الطيبة وجزالك الله كل خير

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

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