آموزش سی شارپ C# قسمت سیزدهم
عرض سلام و وقت بخیر خدمت شما همراهان عزیز کانال برنامه نویسان و تیم ilikephp.ir !
محمد احمدی هستم با سیزدهمین جلسه از آموزش سی شارپ در خدمتتون خواهم بود .
مثل جلسه قبل توی این جلسه هم میخوام آموزش رو کاربردی خدمتتون ارائه بدم . ما تا الان فقط از حالت عادی یک فرم استفاده کردیم . یعنی بعد از اینکه یک پروژه رو ساختیم و فرم خود بخود ایجاد شد , رنگ و خصوصیاتش رو تغییر ندادیم ! این جلسه میخوایم یک مقدار روی ظاهر برنامه کار کنیم !
در مرحله اول روی فرم کلیک کنید , از پنجره properties (اگر این پنجره رو پیدا نمیکنید طبق شکل زیر عمل کنید ) روی مشخصه BackColor کلیک کنید و رنگ پس زمینه فرم رو به رنگ دلخواه خودتون تغییر بدین , من رنگ بنفش رو انتخاب کردم و شما میتونید بسته به سلیقه خودتون هر رنگی رو انتخاب کنید !
عکس 1 – پنجره properties و مشخصه BackColor
بعد از رنگ زمینه , نوبت میرسه به عنوان فرم . اگر یک مقدار توی همون لیستی که رنگ زمینه رو مشخص کردیم بگردیم به مشخصه Text میرسیم که بصورت پیشفرض اسم فرم هست ( معمولا Form1 نوشته شده ) . من عنوان فرمم رو به "فرم خوش آمدگویی" تغییر دادم . شما میتونید بسته به نوع فعالیتی که قراره توی برنامه و البته توی اون فرم انجام بشه , عنوان فرم رو به متن مناسبی تغییر بدین !
حالا از پنجره ToolBox ( یا همون پنجره ابزار که دکمه و تکست باکس رو ازش اضافه میکنیم ) یک ProgressBar و یک Timer اضافه کنید . ظاهر و کار ProgressBar بنظرم واضح میاد , با این حال اگر بخواید بدونید چیه باید بگم که یک نوار نمایش وضعیت به کاربر هست که میشه مقدار وضعیت فعلی یک مشخصه ( مثلا درصد پیشرفت پروژه , نوار لودینگ یا موارد شبیه به اینها ) رو باهاش نمایش داد !
و اما Timer : تایمر یک شمارنده ست که میتونه یک سری دستورات مشخص رو توی مدت زمان خاص تکرار کنه . برای اینکه متوجه بشید کارایی تایمر چی هست چراغ های راهنمایی رو به یاد بیارید که مثلا 60 ثانیه سبز , 100 ثانیه قرمز و مابین این دو 10 ثانیه هم نارنجی هستن , خب همه این موارد با چیزی مثل تایمر تغییر رنگ میدن ! . یکی دیگه از مواردی که میشه از تایمر استفاده کرد اینه که یک چراغ چشمک زن ( چراغی که خاموش و روشن بشه ) تولید کرد ( این مورد توی برنامه نویسی هم کاربردهایی داره ) .
و اما کاری که ما امشب با تایمر داریم . میخوایم با استفاده از تایمر مقدار progressBar رو تغییر بدیم . مثلا کاری کنیم که ProgressBar ما توی 5 ثانیه از 0 به 100 برسه .
حالا یک توضیحات تکمیلی در مورد ProgressBar باید بدم . درحال حاضر 3 تا مشخصه توی ProgressBar بدرد ما میخوره , یکی حداقل مقدار یا Minimum و دیگری حداکثر مقدار یا Maximum هست . و درنهایت مشخصه Value هست .
با این 2 تا مشخصه اول میتونیم اندازه ( حداقل و حداکثر ) ProgressBar رو تعیین کنیم و با مشخصه آخر میتونیم وضعیت فعلی رو مشخص کنیم . دقت کنید که هر سه مشخصه از نوع عددی int هستن و Value حتما باید عددی بین مشخصه های Maximum و Minimum و یا برابر با این ها باشه !!
من علاوه بر تایمر , یک دکمه هم روی فرم قرار میدم . روی دکمه دابل کلیک کنید تا به بخش کدنویسی منتقل بشید . توی این قسمت قطعه کد زیر رو یادداشت کنید :
progressBar1.Value += 15;
فکر نکنم نیاز به گفتن باشه که بجای ProgressBar1 باید اسمی که توی برنامتون نوشته شده رو بنویسید .
حالا برنامه رو اجرا کنید و چند بار روی دکمه کلیک کنید , قطعا باید متوجه تغییر بشید .
البته اگر اونقدر کلیک کنید تا مقدار value از Maximum بیشتر بشه , با پیام خطا مواجه میشید .
برای حل این مشکل باید با نوشتن شرط بررسی کنیم که بعد از افزایش مقدار value , مقدار نهایی از Maximum بیشتر نشه !!
از اونجایی که بصورت پیشفرض مقدار Maximum صد و مقدار Minimum هم صفر هست و من این مقادیر رو توی پروژه خودم تغییر ندادم , میخوام با هربار کلیک کردن 15 درصد به وضعیت موجود توی ProgressBar اضافه بشه .
پس باید چک کنیم که مقدار فعلی value + 15 از مقدار Maximum بیشتر نباشه !
در نهایت به همچین کدی نیاز داریم :
if (progressBar1.Value + 15 <= progressBar1.Maximum)
progressBar1.Value += 15;
else
progressBar1.Value = 0;
خب الان اگر کد بالا رو اجرا کنیم , بعد از چندبار کلیک رو دکمه و زمانی که progressbar به 90 درصد رسید , با کلیک بعدی مقدار نوار وضعیت به 0 تبدیل میشه و با کلیک بعدیش , مقدار به 15 میرسه !!
چیزی که الان ما میخوایم اینه که همین دستورات بصورت خودکار و توسط تایمر انجام بشه . یعنی یک سری کد رو میخوایم بصورت خودکار تکرار کنیم ( چیزی شبیه به حلقه ها ! ) این وسط ممکنه کسی بگه : خب چرا از حلقه ها استفاده نمیکنیم ؟؟ , در جواب باید بگم که ما نمیتونیم توی حلقه , دستورات رو توی یک مدت زمان خاص اجرا کنیم , مثلا تعیین کنیم که دستورات درون حلقه هر 2 ثانیه یک بار اجرا بشه و برای اینکار تایمر ساخته شد .
حالا باید دستورات درون دکمه رو بصورت کامل به تایمر انتقال بدیم . برای اینکار رو تایمری که زیر فرم اضافه شده دابل کلیک کنید ( بصورت شکل زیر ) :
شکل 2 – نوار وضعیت (ProgressBar) و تایمر (Timer)
اینجا هم بعد از دابل کلیک روی تایمر به صفحه کد نویسی منتقل میشیم . حالا کدهای درون دکمه رو به تایمر منتقل کنید .
اگر برنامه رو اجرا کنید , به هیچ نتیجه ای نمیرسید و میبینید که مقدار PrgressBar هیچ تغییری نمیکنه ! . دلیل این مشکل اینه که ما تا الان تایمر رو فعال نکردیم :/ !!
حالا بجای دستوراتی که توی دکمه ( یا Button ) بود دستوری رو باید برای فعال سازی یا غیر فعال سازی تایمر بنویسیم :
Timer1.Enabled = true;
توی کد بالا ما تایمر رو فقط فعال کردیم , و مقدار دستورات درون تایمر تا زمانی که برنامه در حال اجرا باشه تکرار میشه !
مسلما میدونید که اگر بخوایم تایمر رو غیر فعال کنیم باید بجای true از false استفاده کنیم . ولی مسئله اینجاست که اگر بخوایم توی دکمه تایمر رو درصورتی که فعال هست غیرفعال کنیم و زمانی که غیرفعال هست , اونو فعال کنیم چکاری باید انجام بدیم ؟؟
آیا باید از شرط استفاده کنیم ؟؟ آیا باید از عملگر شرطی استفاده کرد ؟؟ آیا .... ؟؟ آیا پاسخ همه ی این سوالات در گفتگو خبری امشب بدست می آوریم ؟؟
خب باید بگم که نیاز به این کارها نیست . کافیه مقدار مشخصه Enabled رو برابر با مقدار مخالف خودش قرار بدیم !! مشخصه Enabled از نوع Bool هست . همونطور که قبلا گفتم مقادیر بولین یا صحیح و یا غلط هستن , پس تنها کاری که باید بکنیم اینه :
Timer1.Enabled = !Timer1.Enabled;
خیلی ساده گفتیم که مقدار فعلی Enabled رو برعکس کن و درون خودش قرار بده !!
حالا برنامه رو اجرا کنید و چند بار با فاصله چند ثانیه روی دکمه کلیک کنید !
نظرات کاربران