PDA

View Full Version : سوال: شمارش معکوس



farshadrezaei
چهارشنبه 27 خرداد 1394, 15:22 عصر
سلام

من یک لیبل دارم که داخل عدد 3600 رو نمایش میدم

حالا من میخوام با کلیک بر روی یک دکمه شروع کنه به کم کردن ( بصورت ثانیه به ثانیه که درست ظرف یک ساعت صفر بشه )

نکته اصلی اینه که میخوام قبل از اینکه به صفر برسه اگز از برنامه خارج شدم و کامپیوتر رو خاموش کردم این فرایند خودش ادامه پیدا کنه مثلا نیم ساعت بعد که کامپیوتر رو روشن کردم و برنامه رو اجرا کردم این عدد به نصف رسیده باشه

نه از اول روی دکمه کلیک کنم تا عدد دوباره معکوس بشه

نمی دونم درست توضیح دادم یا نه آیا همچین چیزی امکان داره ؟

با تشکر

asman.abi
چهارشنبه 27 خرداد 1394, 18:56 عصر
برای قسمت اول سوالت
شما یه تایمر به فرمت اضافه می کنی. بعد در قسمت tick تایمر یه واحد از textbox کم می کنی.
برای قسمت دوم سوالت
اگه می خوای برنامه ات بعد روشن شدن سیستم خودت برنامه رو اجرا کنی میشه در حینی که از مقدار textbox کم میکنی در تابع tick ، مقدار کم شده رو روی حافظه بنویسی. برای اجرا هم می تونی از اون مقدار ذخیره شده در حافظه ثانویه بخونی و از اون مقداری که قبل اینکه سیستم رو خاموش کنی شروع بشه و طبق تابع کم بشه تا به صفر برسه.
اگر روال کارت اینه بگو بیشتر توضیح بدم.

موفق باشید

ali_md110
پنج شنبه 28 خرداد 1394, 12:48 عصر
ایشون میخان وقتی برنامه شروع شد کانتر برنامه از عدد 3600 کم بشه مثلا 10 دققیه که گذشت 600 تا ازش کم شد و عدد که رسید به 3000 اگر کامپیوتر خاموش شد و 10 دقیقه دیگه روشن شد عدد 3000قبلی 600 تای دیگه که در حین خاموش بودن سپری شده رو هم ازش کم کنه و کانتر از 2400شروع بشه به کم شدن.
به نظرم شروع کار و پایان کار باید با علامت گذاری طبق ساعت روزانه و همچنین شمارنده باشه بدین صورت که هر وقت کامپیوتر خاموش شد یا برنامه بسته شد یک نقطه علامت براساس زمان کامپیوتر ذخیره بشه و موقعی که کامپیوتر روشن شد یا برنامه شروع دوباره شد بیاد زمان فعلی رو از زمانی که کامپیوتر خاموش شده کسر کنیم و ثانیه اون رو محاسبه کنیم و از اخرین عدد شمارنده که 3000 بوده کسر و همین بشه مبنای جدید کانتر برنامه

farshadrezaei
پنج شنبه 28 خرداد 1394, 13:42 عصر
آقای ali_md110 (http://barnamenevis.org/member.php?18325-ali_md110) درست میگن

اما اینجا یه مشکل هست اگر یکی تاریخ سیستمش رو تغییر بده اختلال ابجاد میشه

در کل نم دونم چطوری سورسش رو بنویسم

ممنون میشم راهنمایی کنید

farshadrezaei
پنج شنبه 28 خرداد 1394, 13:48 عصر
برای قسمت اول سوالت
شما یه تایمر به فرمت اضافه می کنی. بعد در قسمت tick تایمر یه واحد از textbox کم می کنی.
برای قسمت دوم سوالت
اگه می خوای برنامه ات بعد روشن شدن سیستم خودت برنامه رو اجرا کنی میشه در حینی که از مقدار textbox کم میکنی در تابع tick ، مقدار کم شده رو روی حافظه بنویسی. برای اجرا هم می تونی از اون مقدار ذخیره شده در حافظه ثانویه بخونی و از اون مقداری که قبل اینکه سیستم رو خاموش کنی شروع بشه و طبق تابع کم بشه تا به صفر برسه.
اگر روال کارت اینه بگو بیشتر توضیح بدم.

موفق باشید


من این رو متوجه نشدم

asman.abi
پنج شنبه 28 خرداد 1394, 22:45 عصر
این هم کد مربوط این مسئله ای که شما گفتید. یکم وقت گرفت ولی درست کار می کنه.

سوال داشتی بپرس.

این هم کد کاملش

Timer t = new Timer();
string path = "C:\\time.txt";
private void Form1_Load(object sender, EventArgs e)
{

t.Interval = 1000;

if (File.Exists(path))
{
t.Tick += t_Tick;
t.Enabled = true;
}
}

private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
File.WriteAllText(path, textBox1.Text);
t.Tick += t_Tick;
t.Enabled = true;
}
}

void t_Tick(object sender, EventArgs e)
{
string s;
int n;

s = File.ReadAllText(path);
n = Convert.ToInt32(s);
n -= 1;
textBox1.Text = n.ToString();
File.WriteAllText(path, textBox1.Text);
}

asman.abi
جمعه 29 خرداد 1394, 00:41 صبح
البته برای اینکه تا صفر بیاد و دیگه نشمره یه شرط اضافه کردم در تابع t_Tick
تابع اصلاح شده ی t_Tick

void t_Tick(object sender, EventArgs e)
{
string s;
int n;

s = File.ReadAllText(path);
n = Convert.ToInt32(s);
if (n > 0)
{
n -= 1;
textBox1.Text = n.ToString();
File.WriteAllText(path, textBox1.Text);
}
}

farshadrezaei
جمعه 29 خرداد 1394, 10:47 صبح
دست شما درد نکنه

اما هنوز یه چیز دیگه هست

وقتی از برنامه خارج میشی شمارش متوقف میشه

مثلاً اگر من روی دکمه کلیک کنم و شروع بشه به کم کردن اگز از 300 شروع بشه به کم کردن و به 200 برسه بعد از برنامه خارج بشم شمارش روی 200 باقی میمونه تا دوباره برنامه رو اجرا کنم و دوباره روی دکمه کلیک کنم تا از 200 شروع کنه به کم کردن

اما من میخوام وقتی از برنامه خارج میشیم هم به صورت خودکار این عدد کن بشه

حالا یکم از برنامه ای که دارم مینویسم توضیح میدم

من توی برنامه میخوام کاری کنم که وقتی روی یک دکمه کلیک شه ، یک عمل یا یک امکان بعد یک ساعت توی برنامه فعال شه ، حالا ممکنه طرف مقابل حوصله نداشته باشه یک ساعت صبر کنه . کامپیوتر خودش رو خاموش کنه و بره یک ساعت دیگه بیاد که اون امکان فعال شده باشه

حالا یک مثال دیگه

اگر شما بازی تراوین یا عصر پادشاهان یا جنگ خان ها رو بازی کرده باشی ، وقتی بخوای یک ساختمان رو ارتقاع بدی ممکنه چند دقیقه طول بکشه و اگر توی این بازی شما از سایت خارج شی فرایند ارتقا ادامه پیدا میکنه و لازم نیست دوباره وارد سایت بشی که عمل ارتقا ادامه پیدا کنه

حالا من تو برنامم همچین چیزی میخوای که بعد یک ساعت یا نیم ساعت یک عمل اجرا شه یا امکان فعال شه

با تشکر ؟

asman.abi
جمعه 29 خرداد 1394, 23:15 عصر
دست شما درد نکنه

اما هنوز یه چیز دیگه هست

وقتی از برنامه خارج میشی شمارش متوقف میشه

مثلاً اگر من روی دکمه کلیک کنم و شروع بشه به کم کردن اگز از 300 شروع بشه به کم کردن و به 200 برسه بعد از برنامه خارج بشم شمارش روی 200 باقی میمونه تا دوباره برنامه رو اجرا کنم و دوباره روی دکمه کلیک کنم تا از 200 شروع کنه به کم کردن

اما من میخوام وقتی از برنامه خارج میشیم هم به صورت خودکار این عدد کن بشه

حالا یکم از برنامه ای که دارم مینویسم توضیح میدم

من توی برنامه میخوام کاری کنم که وقتی روی یک دکمه کلیک شه ، یک عمل یا یک امکان بعد یک ساعت توی برنامه فعال شه ، حالا ممکنه طرف مقابل حوصله نداشته باشه یک ساعت صبر کنه . کامپیوتر خودش رو خاموش کنه و بره یک ساعت دیگه بیاد که اون امکان فعال شده باشه

حالا یک مثال دیگه

اگر شما بازی تراوین یا عصر پادشاهان یا جنگ خان ها رو بازی کرده باشی ، وقتی بخوای یک ساختمان رو ارتقاع بدی ممکنه چند دقیقه طول بکشه و اگر توی این بازی شما از سایت خارج شی فرایند ارتقا ادامه پیدا میکنه و لازم نیست دوباره وارد سایت بشی که عمل ارتقا ادامه پیدا کنه

حالا من تو برنامم همچین چیزی میخوای که بعد یک ساعت یا نیم ساعت یک عمل اجرا شه یا امکان فعال شه

با تشکر ؟

برای این کار می تونی علاوه بر زمان باقی مانده ساعت فعلی هم ذخیره کنی. بعد از اینکه از نرم افزار خارج شدید همان طور که در بالا در Form_Load نوشتم ساعت هم بخونی و از ساعت فعلی سیستم کم کنی و به ثانیه تبدیل کنی. بعد با مقداری که ازقبل مشخص کردی (مثلا 3600) مقایسه می کنی. اگر بیشتر شده باشه یعنی 1 ساعت شده و بقیه روال.