نمایش پیام قبل از زمان دریافت شده از کاربر با #c

mamad.noise

کاربر فعال انجمن فتوشاپ
با سلام
من میخوام کاری کنم که وقتی به 5ثانیه قبل از زمانی که کاربر توی کامپوننت persianDateTimePicker ثبت کرده رسید یه مسیج باکس یهش نشون بده !
در ضمن کلاس تبدیل شمسی به میلادی هم تعریف کردم
زبان هم #C هست
پیشاپیش ممنون:rose:
 

the_king

مدیرکل انجمن
با سلام
من میخوام کاری کنم که وقتی به 5ثانیه قبل از زمانی که کاربر توی کامپوننت persianDateTimePicker ثبت کرده رسید یه مسیج باکس یهش نشون بده !
در ضمن کلاس تبدیل شمسی به میلادی هم تعریف کردم
زبان هم #C هست
پیشاپیش ممنون:rose:

کد:
        Timer t = new Timer();

[COLOR="#A9A9A9"]        private void Form1_Load(object sender, EventArgs e)
        {
[/COLOR]            t.Tick += new EventHandler(t_Tick);
            t.Interval = 250;
[COLOR="#A9A9A9"]        }[/COLOR]

        void t_Tick(object sender, EventArgs e)
        {
            DateTime d = (DateTime)t.Tag;
            if ((int)d.Subtract(DateTime.Now).TotalSeconds == 5)
            {
                t.Enabled = false;
                MessageBox.Show("Your Message");
            }
        }

[COLOR="#A9A9A9"]        private void button1_Click(object sender, EventArgs e)
        {[/COLOR]
            DateTime d = (DateTime)persianDateTimePicker1.Value;
            t.Tag = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0);
            t.Enabled = true;
[COLOR="#A9A9A9"]        }[/COLOR]
 

mamad.noise

کاربر فعال انجمن فتوشاپ
ممنون
ولی چیز زیادی از کد ها نفهمیدم دی:
اگه میشه یکم توضیح بدین
 

the_king

مدیرکل انجمن
ممنون
ولی چیز زیادی از کد ها نفهمیدم دی:
اگه میشه یکم توضیح بدین

یک شیء Timer می سازیم تا گذشت زمان رو بصورت رخداد بررسی کنیم.
زمانی که تاریخ و ساعت خاصی رو تنظیم کردیم Timer رو فعال می کنیم.
Timer از این لحظه به بعد مدام گذشت زمان رو بصورت رخداد پیگیری می کنه.
موقعی که به تاریخ مورد نظر رسیدیم پیغام رو نمایش می دهیم و Timer رو
غیر فعال می کنیم تا دیگه کاری به گذشت زمان نداشته باشه.

این شیء Timer ما است، با اسم t. داخل کلاس فرم تعریف و ایجادش می کنیم :
کد:
        Timer t = new Timer();

این رخداد Form1_Load موقعی که فرم تازه می خواد آماده نمایش بشه اجرا خواهد شد...
کد:
[COLOR="#A9A9A9"]        private void Form1_Load(object sender, EventArgs e)
        {
[/COLOR]

ما باید توسط Timer گذشت زمان رو بصورت رخداد بررسی کنیم، پس همون ابتدا که فرم آماده نمایش میشه
رخداد Tick اون شیء t مون رو (Timer مون) رو به یک متد مثل t_Tick وصل می کنیم. موقع کد نویسی همچین موردی
لازم نیست همه کد رو شما بنویسید، تا سر همون =+ اش رو که تایپ کنید بقیه کد اون سطر و تعریف متد رو خود ویرایشگر ویژوال استدیو می نویسه،
فقط دو بار کلید Tab رو فشار دهید کد تکمیل میشه :
کد:
            t.Tick += new EventHandler(t_Tick);

باید مشخص کنیم که Timer هر چند میلی ثانیه یکبار رخداد Tick رو ایجاد کنه، 250 میلی ثانیه یکبار یعنی در هر ثانیه چهار بار :
کد:
            t.Interval = 250;
[COLOR="#A9A9A9"]        }
[/COLOR]

این تعریف متدی است که به رخداد Tick اون Timer متصلش می کنیم، اسم متدش مهم نیست، فقط باید به رخداد شیء با همین اسم متصل بشه،
لازم هم نیست تایپ بشه، چون این رو خود ویرایشگر ویژوال استدیو می تونه خودکار بنویسه :
کد:
        void t_Tick(object sender, EventArgs e)
        {

تاریخ و ساعتی که مد نظر مون هست رو از توی مشخصه Tag شیء Timer مون می خوانیم :
کد:
            DateTime d = (DateTime)t.Tag;
لازم نبود که در t.Tag باشه، من برای اینکه متغیر اضافی تعریف نکنم از Tag استفاده کردم وگرنه نه Tag مشخصه خاصی است و نه لازمه که
حتما با Tag اینکار انجام بشه. می توانستیم یک متغیر عادی تعریف کنیم و بجای Tag از اون متغیر استفاده کنیم.
مشخصه Tag کلا یک مشخصه بیکار و بدون استفاده است، هیچ کاربرد از پیش تعیین شده ای نداره، مگر اینکه خود برنامه نویس
برایش کاربردی در نظر بگیره.

زمان فعلی (DateTime.Now) رو از اون زمان مشخص کسر می کنیم (Subtract) ، اونم بر حسب ثانیه (TotalSeconds) و اگر فقط 5 ثانیه باقی بمونه،
زمان نمایش پیغام فرا رسیده :
کد:
            if ((int)d.Subtract(DateTime.Now).TotalSeconds == 5)
            {

قبل از اینکه پیغام رو نمایش بدهیم Timer رو غیر فعال می کنیم، چون رخداد Timer هنوز فعاله، کسری از ثانیه که بگذره مجددا رخداد Tick اتفاق می افته و ما
نمی خواهیم پیغام دیگری نشون داده بشه :
کد:
                t.Enabled = false;

حالا پیغام رو نمایش می دهیم :
کد:
                MessageBox.Show("Your Message");
            }
        }
این پیغام فقط یکبار نشون داده میشه چون قبلش Timer رو غیر فعال کردیم و دیگه رخداد اتفاق نمی افته.

هر وقت که تاریخ و ساعت جدید مشخص شد، فرضا موقع فشار یک دکمه، باید Timer رو فعال کنیم. من کد رو برای مثل کلیک یک دکمه button1 نوشتم،
اما شما لازم نیست حتما داخل button1_Click بنویسیدش. جایی بنویسید که تاریخ جدیدی در persianDateTimePicker تون ثبت شده :
کد:
[COLOR="#A9A9A9"]
        private void button1_Click(object sender, EventArgs e)
        {[/COLOR]

اول تاریخ و ساعت مورد نظر رو از داخل persianDateTimePicker تون بخوانید و در d قرار دهید :
کد:
            DateTime d = (DateTime)persianDateTimePicker1.Value;
این تاریخ و ساعت شامل ثانیه هم هست، درسته که در persianDateTimePicker ثانیه اش نمایش داده نمیشه ولی الزاما ثانیه اش 00 نیست.

ما تاریخ و ساعت مورد نظر رو در مشخصه Tag اون Timer مون ثبت می کنیم. البته ثانیه اش رو 0 می نویسیم :
کد:
            t.Tag = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0);

Timer رو فعال می کنیم تا رخداد Tick اش از این به بعد بررسی بشه :
کد:
            t.Enabled = true;
[COLOR="#A9A9A9"]        }[/COLOR]
 

جدیدترین ارسال ها

بالا