آموزش سی شارپ C# قسمت سیزدهم

1395/1/12 محمد احمدی 5000

عرض سلام و وقت بخیر خدمت شما همراهان عزیز کانال برنامه نویسان و تیم 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 رو برعکس کن و درون خودش قرار بده !!

حالا برنامه رو اجرا کنید و چند بار با فاصله چند ثانیه روی دکمه کلیک کنید !

آیکن دانلود دانلود PDF قسمت سوم آموزش سی شارپ C#

کانال تلگرام