کنترل Timer
کنترل Timer، دستور یا دستورات خاصی را در بازههای زمانی خاصی، که در خصوصیت interval مشخص میشود، اجرا میکند. به عنوان مثال، اگر بخواهید نامتان را هر 5 ثانیه یکبار چاپ کنید، میتوانید از این کنترل استفاده نمایید. کنترل Timer از کنترلهای غیر بصری است و در قسمت Component Tray قرار میگیرد. این کنترل خصوصیات زیادی ندارد.
وقتی که خصوصیت Enabled را برابر true قرار دهید کنترل شروع به کار و اگر برابر false قرار دهید متوقف میشود. خصوصیت interval مقدار زمانی که باید بگذرد تا دستور یا دستورات داخل رویداد tick فراخوانی شود را مشخص میکند. رویداد tick رویداد پیشفرض کنترل تایمر است. به این نکته توجه کنید که مقدار این خصوصیت (interval) بر حسب میلی ثانیه مشخص میشود. به عنوان مثال قرار دادن مقدار 5000 در جلوی این خصوصیت به معنای این است که رویداد tick هر 5 ثاینه یکبار فراخوانی شود. به یک نمونه برنامه که در آن از کنترل timer استفاده شده است توجه نمایید. برنامه شامل یک دکمه است که در جهت بالا و پایین فرم حرکت میکند. یک پروژه Windows Application با نام TimerDemo ایجاد کنید. یک دکمه را در وسط فرم مانند شکل زیر قرار دهید.
یک کنترل Timer را به روی فرم بکشید. این کنترل در قسمت Component جعبه ابزار قرار دارد. همانطور که قبلاً گفته شد این کنترل در قسمت Component Tray قرار میگیرد.
کنترل timer را انتخاب و خاصیت interval آن را برابر 50 و خاصیت Enabled آنرا برابر true قرار دهید :
این کار باعث میشود زمانی که برنامه اجرا شود کنترل 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 قرار دارد استفاده کردهایم. اگر هر کدام از شرطها درست باشند به راحتی با قرینه کردن مقدار velocity جهت حرکت دکمه را تغییر میدهیم (velocity-). اگر دکمه به سمت بالا فرم حرکت کند (به این خاطر که 5 پیکسل به سمت بالا حرکت میکند) و به بالای فرم برسد جهت حرکت آن تغییر میکند. برنامه را اجرا کنید و نتیجه را مشاهده کنید. به یک مثال ساده دیگر در مورد عملکرد این کنترل توجه کنید. یک پروژه Windows Application جدید ایجاد کنید و یک کنترل RichTextBox و یک کنترل Timer بر روی فرم قرار دهید. خاصیت Interval کنترل Timer را برابر 1000 و خاصیت Enabled آن را برابر True تنظیم کنید :
روی کنترل timer دابل کلیک کنید و در داخل رویداد tick آن کدهای زیر را بنویسید :
private void timer1_Tick(object sender, EventArgs e) { richTextBox1.Text += "Hello World!\n"; }
با تنظیم خاصیت Interval بر روی 1000 هر یک ثانیه یک بار متن !Hello World در داخل کنترل RichTextBox چاپ میشود. برنامه را اجرا و نتیجه را مشاهده کنید :
سلام من میخوام وقتی برنامه باز شد تایمر بر اساس زمان کامپیوتر فعال بشه
سلام، سوالتونو تو بخش پرسش و پاسخ مطرح بفرمایید
درود دوستان
چرا دستورات داخل تایمر تیک (در سی شارپ) ناقص اجرا می شوند؟
سلام، متوجه نشدم!!
سلام ازسرگیری دوباره تایمر چجوریه؟؟؟
سلام، واسه شروع متد ()Start و واسه پایان متد ()Stop رو استفاده کنید
چطور پنج ثانیه یه تصویرو نمایش بذه
سلام دوست عزیز خیلی ممنون از کمکی که به من کردی . thanks
خواهش می کنم…
بسیار عالی
سلام خسته نباشین من ی مشکلی با تایم دارم اینکه در مقداردادن به Interval مشکل دارم چ مقداری بدم تا تایمر برنامه ام با تایمر سیستم ام یکی باشه
سلام…سوالتونو توی انجمن مطرح بفرمایید
سلام ممنون از مطالب خوبتون.میخواستم بدونم واسه حرکت به سمت راست و چپ جه کدی باید نوشت؟اگه کمکم کنید ممنون میشم.
سلام دوست خوبم
لطفا سوالتون رو در انجمن مطرح کنید
متشکرم
سلام
من یه کد نوشتم که در صورت درست بودن شرط بعد از هر 1 ثانیه یک رشته را داخل فایل اکسس ذخیره کند ، اما فقط ردیفهای خالی ثبت میشود . مشکل از کجاست (بیرون از حلقه تایمر درست کار میکند)
سلام ؛ بسیار مفید بود . متشکرم
سلام. لطف دارین دوست عزیز