PDA

View Full Version : سوال: معکوس کردن تایمر پس از زمانی مشخص



kazem235
شنبه 11 خرداد 1392, 02:04 صبح
سلام دوستان خسته نباشید.یه سوال داشتم.
من از یه تایمر برای شمارش عداد استفاده کردم.یه متغیر تعریف کردم که یکی یکی بهش اضافه بشه اما روش کم کردنشو نمیدونم.مثلا اگه عدد به 250 رسید یکی یکی کم کنه تا به 0 برسه و دوباره اضافه تا به 250 برسه وبه همین صورت ادامه پیدا کنه.
میشه لطفا راهنمایی کنید!:خجالت::خجالت::خجالت:

mousa1992
شنبه 11 خرداد 1392, 02:08 صبح
hi
تو رویدادتیک دو کار باید انجام بدی اول اینکه ی شرط بذاری دوم اووم دوم نداره :D
ی متغیر تعریف کن از نوع bool که نشون دهنده این هست که ایا روند افزایشی هست یا کاهشی
و هربار بررسی میکنی اگه افزایشی باشه که به شمارنده یک واحد اضافه میکنی در غیر این صورت کم میکنی و وقتی شمارنده رسید به 255 روند کاهشی میشه و رسید به صفر میشه افزایشی

good night

FreeMagic
شنبه 11 خرداد 1392, 02:22 صبح
hi
تو رویدادتیک دو کار باید انجام بدی اول اینکه ی شرط بذاری دوم اووم دوم نداره :D
ی متغیر تعریف کن از نوع bool که نشون دهنده این هست که ایا روند افزایشی هست یا کاهشی
و هربار بررسی میکنی اگه افزایشی باشه که به شمارنده یک واحد اضافه میکنی در غیر این صورت کم میکنی و وقتی شمارنده رسید به 255 روند کاهشی میشه و رسید به صفر میشه افزایشی

good night
به نظر من بهتره یه متغیر سراسری از نوع عددی استفاده کنی به جای boolean
مثلا
public int add_num=1;
اگه به 255 رسید اون رو برابر با -1 کنی بعد با مقدار اون تایمر جمع کنی و وقتی به صفر رسید اون رو برابر با +1 کنی.
به همین صورت شما فقط باید چک کنی که به 255 یا صفر رسیده یا نه. اگه رسیده بود متغیر رو مقدار دهی کنی. ولی اگه از نوع boolean باشه علاوه بر چک کردن 0 و 255 باید چک کنی مقدار متغیر چی هست و بسته به اینکه مقدارش چی هست جمع یا تفریق کنی در صورتی که اینجوری شما همیشه فقط جمع میکنی
اینکه کلا تایمر هم کی از کار میفته که دست خودتون هست
موفق باشید

kazem235
شنبه 11 خرداد 1392, 10:52 صبح
سلام.
از روش اول (متغیر عددی)استفاده کردم جواب داد.روش خوبی بود.ممنون از راهنمایی هاتون .:لبخندساده:

kazem235
شنبه 11 خرداد 1392, 13:05 عصر
سلام و خسته نباشید دوباره.
من میخوام وقتی یه کنترل فوکوس را دریافت میکنه رنگ بک گراندش تغییر کنه برای همین از کد بالا استفاده کردم.منتها نمیدونم چطور باید این کارو انجام بدم.کاری که من انجام دادم که کد رو پیوست میزارم،فقط یه رنگ کنترل رو که براش تعریف کردم تغیر میده.
تعریف متغیر به صورت سراسری

public int cunter = 250;
public int timer = 1;

کد

private void timer1_Tick(object sender, EventArgs e)
{
if (timer == 1)
{
cunter -= 5;
if (cunter == 150)
timer = -1;
}
else if (timer == -1)
{
cunter += 5;
if (cunter == 250)
timer = 1;
}
this.textBox1.BackColor = Color.FromArgb(cunter, cunter, 255);
}

در این صورت فقط رنگ تکست باکس عوض میشه.
اگه بخوام رنگ هر کنترلی که فوکوس دریافت میکنه رو عوض کنم باید چیکار کنم؟
لطفا راهنمایی کنید.:خجالت:

FreeMagic
شنبه 11 خرداد 1392, 13:40 عصر
ایده جالبی بود
منظور من یه همچین چیزی بود ولی کاری که شما کردید با پیشنهاد دوستمون که گفتن boolean باشه فرقی نداشته
من کد شما رو به این صورت ویرایش کردم و دقیقا همون جواب رو میده
public int cunter = 250;
public int timer;
if (cunter == 150)
{
timer = +5;
}
else if (cunter == 250)
{
timer = -5;
}
cunter += timer;

this.textBox1.BackColor = Color.FromArgb(cunter, cunter, 255);
متغیر cunter حد بالا و پایین رو برای شرط چک میکنه و timer هم گام حرکت رو چک میکنه

FreeMagic
شنبه 11 خرداد 1392, 14:07 عصر
کد رو کامل کردم. همون طوری شده که میخوای
ولی من فرض رو بر این گرفتم که شما 3 تا تکس باکس دارید. برای هر رویداد enter و leave تکس باکس ها باید کد های مربوطه رو بزارید
اول متغیرهای سراسری:
public int cunter = 250;
public int timer;
public TextBox select_textbox;
اینم کد تایمر هست:
private void timer1_Tick(object sender, EventArgs e)
{
if (cunter == 150)
{
timer = +5;
}
else if (cunter == 250)
{
timer = -5;
}
cunter += timer;

select_textbox.BackColor = Color.FromArgb(cunter, cunter, 255);
}
اینم کد رو رویداد برای تکس باکس
private void textBox1_Enter(object sender, EventArgs e)
{
select_textbox = textBox1;
timer1.Enabled = true;
}

private void textBox1_Leave(object sender, EventArgs e)
{
timer1.Enabled = false;
this.textBox1.BackColor = Color.FromArgb(255, 255, 255);
}
به همین ترتیب برای سایر تکس باکس ها:
private void textBox2_Enter(object sender, EventArgs e)
{
select_textbox = textBox2;
timer1.Enabled = true;
}

private void textBox2_Leave(object sender, EventArgs e)
{
timer1.Enabled = false;
this.textBox2.BackColor = Color.FromArgb(255, 255, 255);
}
private void textBox3_Enter(object sender, EventArgs e)
{
select_textbox = textBox3;
timer1.Enabled = true;
}

private void textBox3_Leave(object sender, EventArgs e)
{
timer1.Enabled = false;
this.textBox3.BackColor = Color.FromArgb(255, 255, 255);
}
برو حالشو ببر:چشمک:
بازم مشکلی بود در خدمتیم:چشمک:

kazem235
شنبه 11 خرداد 1392, 17:10 عصر
ممنون کمک بزرگی کردید،اما موقع اجرا ارور میده عکس هم ضمیمه کردم.اما با try فقط موقع اجرا پیغام میده و بعد وارد کردن داده پیغام رفع میشه.
104990
منظور از Null،خالی بودن موقع اجراست؟

FreeMagic
شنبه 11 خرداد 1392, 21:08 عصر
فکر کنم منظورش اینه که متغیر cunter مقدار دهی نشده!
گاهی اوقات وقتی داخل try و catch باشه همچین مشکلاتی پیش میاد.
به صورت معمولی از کد استفاده کنید فکر نکنم مشکلی پیش بیاد. واسه من همچین مشکلی پیش نیومده که درست متوجه بشم مشکلش چیه!!!

kazem235
شنبه 11 خرداد 1392, 22:05 عصر
دوست عزیز متغیر cunter با مقدار 250 مقدار دهی شده.بعد اگه داخل try و catchنباشه برنامه اجرا نمیشه.اگه خوب دقت کنید try و catchرو غیر فعال کردم و بعد این مشکل دوباره پیش اومد.کد خطای سیستمیش هم اینه:


Object reference not set to an instance of an object.

FreeMagic
یک شنبه 12 خرداد 1392, 00:27 صبح
نمی دونم چرا اینجوریه ولی اگه اشکالی نداره پروژه رو اینجا قرار بدید نگاش کنم. شاید متغیر هم نام دیگه ای توی پروژتون انتخاب کردین! شاید به جز تکس باکس اشیای دیگه ای رو هم قرار دادین! یا ...