کنترل Timer

کنترل Timer دستور یا دستورات خاصی را در بازه های زمانی خاصی که در خصوصیت interval مشخص می شود اجرا می کند. به عنوان مثال اگه بخواهید نامتان را هر 5 ثانیه یکبار چاپ کنید می توانید از این کنترل استفاده نمایید. کنترل Timer از کنترل های غیر بصری است و در قسمت Component Tray قرار می گیرد. این کنترل خصوصیات زیادی ندارد.

وقتی که خصوصیت Enabled را برابر true قرار دهید کنترل شروع به کار و اگر برابر false قرار دهید متوقف می شود. خصوصیت interval مقدار زمانی که باید بگذرد تا دستور یا دستورات داخل رویداد tick فراخوانی شود را مشخص می کند.رویداد tick رویداد پیشفرض کنترل تایمر است. به این نکته توجه کنید که مقدار این خصوصیت(interval) بر حسب میلی ثانیه مشخص می شود. به عنوان مثال قرار دادن مقدار 5000 در جلوی این خصوصیت به معنای این است که رویداد tick هر 5 ثاینه یکبار فراخوانی شود. به یک نمونه برنامه که در آن از کنترل timer استفاده شده است توجه نمایید. برنامه شامل یک دکمه است که در جهت بالا و پایین فرم حرکت می کند. یک پروژه Windows Application با نامTimerDemo ایجاد کنید. یک دکمه را در وسط فرم مانند شکل زیر قرار دهید.
timer-control-01
یک کنترل Timer را به روی فرم بکشید. این کنترل در قسمت Component جعبه ابزار قرار دارد. همانطور که قبلا گفته شد این کنترل در قسمت Component Tray قرار می گیرد.
timer-control-02
کنترل timer را انتخاب و خاصیت interval آن را برابر 50 و خاصیت Enabled آنرا برابر true قرار دهید :
timer-control-03
این کار باعث می شود زمانی که برنامه اجرا شود کنترل timer شروع به کار کند. روی کنترل timer دابل کلیک کنید تا کنترل کننده رویداد پیشفرض آن که همان رویداد tick است ایجاد شود.به یاد داشته باشید دستورات داخل این کنترل کننده رویداد هر 50 میلی ثانیه یکبار فراخوانی می شوند.یک نمونه متغیر به شکل زیر در کلاس فرم تعریف کنید.این متغیر برای نگهداری تعداد پیکسل هایی است که در هر بار فراخوانی رویداد tick پیمایش می شوند.

private int velocity = 5;

کد های زیر را به کنترل کننده رویداد tick اضافه کنید.

private void timer1_Tick(object sender, EventArgs e)
{
    if (button1.Top <= 0 || button1.Bottom > this.ClientSize.Height)
        velocity = -velocity;

    button1.Top += velocity;
}

وقتی که رویداد tick فراخوانی می شود دستورات بدنه آن اجرا می شوند. در دستور شرط ابتدا بررسی شده است که دکمه به پایین فرم رسیده است یا به بالای فرم. برای اینکه مشخص کنیم که دکمه به بالای فرم چسبیده است از خاصیت Button.Top استفاده کرده ایم.این خصوصیت مقدار مختصات y گوشه ی بالا و چپ دکمه را مشخص می کند.
اگر مقدار این خصوصیت برابر یا کوچکتراز 0 باشد به این معنی است که دکمه به بالای فرم رسیده است. به این نکته توجه کنید که مبدا مختصات در فرم گوشه بالای و سمت چپ فرم است. قسمت دوم شرط بررسی می کند که آیا دکمه به قسمت پایین فرم رسیده است یا نه? برای این کار از خاصیت Button.Bottom که مختصات y دکمه را بر می گرداند استفاده کرده ایم.سپس بررسی کرده ایم که این مقدار را با مقدار خصوصیت Height(ارتفاع) فرم مقایسه کرده ایم.برای بدست آوردن ارتفاع فرم از خصوصیت Height که خود در خاصیت Form.ClientSize قرار دارد استفاده کرده ایم. اگر هر کدام از شرط ها درست باشند به راحتی با قرینه کردن مقدار (ضرب -1 در مقدار فعلی)velocity جهت حرکت دکمه را تغییر می دهیم.اگر دکمه به سمت بالا فرم حرکت کند (به این خاطر که 5 پیکسل به سمت بالا حرکت میکند) و به بالای فرم برسد جهت حرکت آن تغییر می کند. برنامه را اجرا کنید و نتیجه را مشاهده کنید. به یک مثال ساده دیگر در مورد عملکرد این کنترل توجه کنید. یک پروژه Windows Application جدید ایجاد کنید و یک کنترل RichTextBox و یک کنترل Timer بر روی فرم قرار دهید. خاصیت Interval کنترل Timer را برابر 1000 و خاصیت Enabled آن را برابر True تنظیم کنید :
timer-control-04

روی کنترل timer دابل کلیک کنید و در داخل رویداد tick آن کدهای زیر را بنویسید :

private void timer1_Tick(object sender, EventArgs e)
{
    richTextBox1.Text += "Hello World!\n";
}

با تنظیم خاصیت Interval بر روی 1000 هر یک ثانیه یک بار متن Hello World! در داخل کنترل RichTextBox چاپ می شود. برنامه را اجرا و نتیجه را مشاهده کنید :
timer-control-05

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

  1. محمد پاسخ دادن

    سلام ؛ بسیار مفید بود . متشکرم

    • یونس ابراهیمی پاسخ دادن

      سلام. لطف دارین دوست عزیز

  2. حسین پاسخ دادن

    سلام
    من یه کد نوشتم که در صورت درست بودن شرط بعد از هر ۱ ثانیه یک رشته را داخل فایل اکسس ذخیره کند ، اما فقط ردیفهای خالی ثبت میشود . مشکل از کجاست (بیرون از حلقه تایمر درست کار میکند)

  3. leili پاسخ دادن

    سلام ممنون از مطالب خوبتون.میخواستم بدونم واسه حرکت به سمت راست و چپ جه کدی باید نوشت؟اگه کمکم کنید ممنون میشم.

    • Developer0400 پاسخ دادن

      سلام دوست خوبم

      لطفا سوالتون رو در انجمن مطرح کنید

      متشکرم

  4. مریم پاسخ دادن

    سلام خسته نباشین من ی مشکلی با تایم دارم اینکه در مقداردادن به Interval مشکل دارم چ مقداری بدم تا تایمر برنامه ام با تایمر سیستم ام یکی باشه

    • یونس ابراهیمی پاسخ دادن

      سلام…سوالتونو توی انجمن مطرح بفرمایید

  5. علی پاسخ دادن

    بسیار عالی

  6. fatima پاسخ دادن

    سلام دوست عزیز خیلی ممنون از کمکی که به من کردی . thanks

    • یونس ابراهیمی پاسخ دادن

      خواهش می کنم…