PDA

View Full Version : سوال: نمایش پیغام روی فرم بدون لود شدن مجدد آن



bahar_engineer
یک شنبه 06 اردیبهشت 1388, 11:10 صبح
سلام

من یه بانک دارم که توی اون ساعت خواب بچه ها رو ذخیره می کنه

می خوام وقتی مثلاً توی بانک ساعت خواب بچه 9 شبه ... به محض اینکه ساعت 9 می شه پیغام بیاد روی صفحه که وقت خوابه

اونو توی تایمر گذاشتم کدش اینه :


private void timer1_Tick(object sender, EventArgs e)
{
second += 1;
label1.Text = second.ToString();
if (second > 0)
{
thistim = DateTime.Now.ToShortTimeString();
label2.Text = thistim.ToString();
string tim;
tim = " select * from users where sleep like '" + thistim + "'";
SqlCommand cmd3 = new SqlCommand(tim, con1);
SqlDataReader dr1;
con1.Open();
dr1 = cmd3.ExecuteReader();
if (dr1.Read())
{
MessageBox.Show("وقت خوابه");
}
con1.Close();
}

}


اما موضوع اینه که تایمر درست کار می کنه و ساعت هم توی لیبل آپدیت می شه اما وقتی ساعت آپدیت می شه و مساوی با ساعتی هم هست که توی بانکه ... mesagebox باز نمی شه...
توی لود صفحه هم که اصلاً باز نمی شه
چکار کنم که با اینکه صفحه مثلاً 10 دقیقه است که بازه پیغام خودش بیاد روی صفحه یعنی نیازی به لود شدن دوباره فرم نداشته باشه؟؟

ممنون

Unknownlive
یک شنبه 06 اردیبهشت 1388, 13:00 عصر
شما مقدار را(زمان اپدیت شده) را در یک متغیر از نوع زمان قرار دهید و ساعت 9 را هم همینطور و با هم مقایسه کنید اگر شد که هیچ و اگر نشد باید از توابع DATETIME برای مقایسه ان استفاده کنید

حامد مصافی
یک شنبه 06 اردیبهشت 1388, 13:08 عصر
1- فرمت ذخیره سازی در دیتا بیس را بررسی کنید.
2- این نکته را مد نظر داشته باشید بعید است ساعت ذخیره شده و زمان کنونی یکسان شوند. ممکن است تایمر شما یک بار در زمان 8:59 تیک بخورد و یک بار در زمان 9:01 لذا در ساعت 9:00 بررسی صورت نخواهد پذیرفت.

tdkhakpur
یک شنبه 06 اردیبهشت 1388, 13:51 عصر
سلام:
شانس آوردین که برنامتون همینطوری اجرا نشده. دو تغییر لازم داره.
یکی اینکه همانطوری که دوستان گفتند باید زمان رو درست مقایسه کنید ولی مقایستون نباید شرط مساوی بودن رو داشه باشه بلکه اگه زمان فعلی بزرگتر از زمان قبلی بود پیغام مورد نظر رو براتون بده.
دومی اینکه بعد از بررسی شرط دو تاریخ حتما یک سویچ بولین براش در نظر بگیرید که تایمر برای دومین بار بعد تایم اول که خیلی سریع وارد میشه MessageBoxشماره دوباره باز نکنه.

bahar_engineer
یک شنبه 06 اردیبهشت 1388, 15:13 عصر
من نوع فیلد توی بانکم رو varchar گذاشتم و این متغیرها هم از نوع رشته هستند... مشکلم حل شد ... زمان رو تفکیک کردم و ساعت رو جدا و دقیقه رو جدا ذخیره در بانک و سپس مقایسه کردم. با همون دستور like . در ضمن تایمر چون متغیرشو 1000 تنظیم کردم مطابق با هر ثانیه ، تایمر هم پیش می ره... مشکلی توی چک کردن پیش نمی آد

الان تنها مشکلم اینه که کادر messagebox بالا می آد سر ساعت 9 اما وقتی می شه 9 و 1 ثانیه پیغام خطا می ده... آخه دیگه شرط مساوی با 9 صدق نمی کنه... برای اینکه شرط بزرگتری بهش بدم باید چیزی شبیه به این بهش بدم : where(thistim<thistim+5) که یعنی تا 5 دقیقه بعد از اون زمان این پیغام رو روی صفحه نگهداره مگر اینکه کاربر ok کنه و ببنده .

چون متغیر من از نوع datetime نیست ، می تونم یه تایمر دیگه بزارم که بعد از اینکه شرط اول درست شد تایمر استارت بشه و به مدت 5 دقیقه شرط دوم صادق باشه تا پیغام من همونطور باقی بمونه ...

به هر حال از همگی ممنون

حامد مصافی
یک شنبه 06 اردیبهشت 1388, 16:07 عصر
وقتی شرط برقرار شد دیگر نیازی به تایمر نیست، پس می توانید پس از نمایش MessageBox تایمر را غیر فعال کنید.