مشاهده نسخه کامل
: آموزش C# از ابتدا تا انتها
بخش اول
اگر در زمینه برنامه نویسی کمی اطلاعات داشته باشد، احتمالاً می دانید که بعضی زبان ها همانند C++ (سی پلاس پلاس) یا C# (سی شارپ) احتمال می رود به دو صورت کلی، بنا بر خواست و نیاز برنامه نویس، اجرا شود؛ یا Console Application و یا Windows Application.
جهت آشنایی با یک نمونه بسیار ساده از Console Application، می توان به نرم افزار بسیار ساده (اما پرکاربرد) CMD اشاره کرد. اگر تا کنون محیط نرم افزار CMD به چشمانتان نخورده است، مراحل زیر را طی کنید:
• اگر از Windows 7 استفاده می کنید:
o ابتدا وارد منوی استارت شوید؛
o تایپ کنید: ‘run’؛ سپس Enter را بفشارید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در پنجره ای که برای شما باز خواهد شد، بنویسید: cmd
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
پنجره ای شبیه به DOS را مشاهده خواهید کرد. به این محیط در اصطلاح کنسول (Console) می گویند. ما در این آموزش، فقط و فقط جهت شروع به برنامه نویسی با این محیط کار خواهیم کرد. (تنها برای یک بار!)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Windows Application نیز حتماً همه شما با آن آشنایی دارید. تمامی نرم افزارهای موجود همانند: Paint، Windows Media Player، My Computer و غیره را با نام Windows Application می شناسیم.
برای شروع برنامه نویسی به زبان C#، شما می بایست نرم افزار Visual Studio را بر روی سیستم خود نصب کنید. ما برای این آموزش نسخه Visual Studio 2010 Ultimate را جهت استفاده پیشنهاد میکنیم. اگر این نسخه را ندارید، پیشنهاد می شود که به نحوی (دانلود کردن یا خرید دیسک آن) تهیه نمایید.
توجه: البته دقت کنید که میتوانید از نسخه Express و رایگان Visual Studio نیز استفاده کنید؛ که با حجم بسیار کمتر نسبت به Visual Studio 2010 Ultimate، در سایت رسمی مایکروسافت قرار دارد.
بر روی منوی Start وارد شوید، و نرم افزار Microsoft Visual Studio را اجرا کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
هنگامی که Visual Studio را اجرا نموده اید، از منوی بالا، بر روی File کلیک کرده و سپس گزینه New را برگزینید و Project را انتخاب کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در پنجره ای که برای شما باز خواهد شد، اگر که شما از Visual Studio 2010 Ultimate استفاده می کنید، از منوی سمت چپ، در بخش Installed Templates، Visual C# را انتخاب کنید.
در بخش اصلی (که در وسط پنجره قرار دارد،) بر روی Console Application کلیک کنید تا انتخاب شود.
در بخش زیر آن، مقدار مقابل Name، برای پروژه خود یک نام دلخواه انتخاب کنید.
مقدار مقابل Location، محل قرارگیری پروژه خود را مشخص کنید.
مقدار مقابل Solution Name نیز به تبع، از مقدار Name پیروی می کند. (اما می توانید آن را تغییر دهید!)
در انتها، بر روی OK کلیک کرده تا پروژه شما ساخته شود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
هنگامی که پروژه آماده شد، پنجره ای همانند پنجره زیر به شما تحویل داده میشود که شامل کدهایی هست که از پیش تعریف شده اند. با دیدن این کدها نترسید؛ هیچ چیز خاصی (فعلاً!) ندارند. پس خیالتان از بابت همه چیز راحت باشد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
علاوه بر بخشی که کدها در درون آن قرار دارند، در سمت راست، بخشی به نام Solution Explorer مشاهده می شود که یک نمای کلی از پروژه شما برایتان نمایان است. (اگر Solution Explorer را مشاهده نمی کنید، با استفاده از منوی View در بالای نرم افزار Visual Studio، گزینه Solution Explorer را برگزینید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خوب، در جایی که در عکس زیر نمایش داده می شود، بر روی علامت X کلیک کنید تا Program.cs بسته شود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال به Solution Explorer مراجعه کنید؛ بر روی Program.cs دوبار کلیک کنید. خواهید دید که پنجره کدها مجدداً نمایان می شود.
حال بر روی علامت + در کنار Properties در بخش Solution Explorer کلیک کنید تا به شکل زیر فولدر Properties باز شود. بر روی فایل AssemblyInfo.cs دوبار کلیک کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
نام این فایل AssemblyInfo می باشد که حاوی اطلاعاتی در رابطه با برنامه شما می باشد. کدهایی شبیه به کدهای زیر را خواهید دید. لازم نیست به کدها دقت کنید چون تقریباً به آن نیازی ندارید. کافیست که بر روی سربرگ AssemblyInfo.cs بروید و X را کلیک کنید تا بسته شود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تا اینجا هیچ کدی ننوشته ایم و تنها قصد معرفی Visual Studio را برای افرادی که با محیط آن آشنا نیستند، بود. دقت کنید که شاید جلسات اول (خصوصاً جلسه اول و دوم) برای خیلیها بسیار کِسِل کننده باشد. من از شما خواهش میکنم که دو جلسه اول که بیشتر معرفی و آموزش کار با Visual Studio است را کمی تحمل کنید؛ پس از آن به شما قول خواهم داد که علاوه بر شروع کدنویسی، خودِ کدنویسی نیز برای شما لذت بخش شود.
دقت کنید که جلسه به جلسه، هر سوالی را که داشته باشید، حتماً حتماً در بخش نظرات بپرسید. زیرا انباشته شدن سوالات روی هم، باعث خواهد شد که مطالب جلسات بعدی را به هیچ عنوان متوجه نشوید.
جلسه بعدیِ آموزش، بزودی قرار خواهد گرفت. به امید دیدار.
منبع: گویا آی تی
بخش دوم
در بخش پیشین از آموزش زبان برنامهنویسی سیشارپ، شما نحوهی ایجاد یک پروژه جدید و آشنایی با فایلهایی که در هنگام ساختن پروژه ایجاد میگردند را فرا گرفتید. بهطور کلی، شما فعلا در دو یا سه جلسه نخست، تنها به آموزش کار با نرمافزار Visual Studio خواهیم پرداخت و پس از آن شروع به کدنویسی میکنیم!
در این جلسه شما را نحوه ذخیره کردن پروژه خود و … میپردازیم. طبق آموزش جلسه پیش، نرمافزار Visual Studio خود را اجرا کرده و یک پروژه جدید سیشارپ بسازید.
پس از آن تصور کنید که شما تغییراتی را در آن اعمال کردهاید و میخواهید که آنها را ذخیره کنید. طبق تصویر زیر، از منوی فایل، گزینهی Save All را برگزینید. (و یا کلیدهای ترکیبی Ctrl+Shift+S را فشار دهید.)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
هنگامی که بر روی Save All کلیک میکنید، ممکن است که پنجرهی زیر برای شما به نمایش درآید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در این صورت، شما میتوانید برای پروژه خود نام موردنظرتان را قرار داده و در نهایت ذخیره کنید! دقت کنید که ممکن است که پنجرهی فوق برای شما به نمایش درنیاید، که کاملاً طبیعی میباشد و در هر صورت، کار شما ذخیره شدهاست.
برای اینکه فایلها و پوشههای پروژهی ذخیره شدهی خود را ببینید، میتوانید بسته به نوع سیستم عامل خود به فولدر Documents یا My Documents بروید و با ورود به پوشهی Visual Studio 20XX که XX نشاندهندهی ورژن نرمافزار Visual Studio شما میباشد، وارد فولدر Projects میشوید.
در انتها، میتوانید که همانند تصویر زیر، فایلها و فولدرهای مربوط به پروژهی خود را مشاهده کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
فعلاً همینجا این جلسه بسیار کوتاه را به پایان میرسانیم. در جلسه بعدی، شما اولین خط کد خود را خواهید نوشت و آرام آرام لذت برنامهنویسی با طعم سیشارپ را خواهید چشید!
بخش سوم
طبق عادت، آموزش بخش سوم از زبان برنامهنویسی سیشارپ نیز آماده شده است و در اختیار شما عزیزان میباشد. در دو بخش پیشین، شما با نحوه کارکردن ساده با نرمافزار Visual Studio را فراگرفتید و اکنون میدانید که چگونه میتوان یک پروژهای را ساخت و آن را ذخیره نمود.
در این بخش نیز، ما شروع به نوشتن اولین خط کد خواهیم پرداخت. پس با ما همراه باشید و با یک “یاعلی” شروع میکنیم.
شروع به نوشتن اولین خط کد سیشارپ
اگر در آموزش شماره ۱ بهخاطر داشته باشید، گفتیم که یکی از راههای نمایش اطلاعات برنامهنویسی شده از طریق پنجرهای به نام Console میباشد. پنجرهای که شبیه به سیستمعامل DOS کوچکشده میباشد و شما با اجرای نرمافزار CMD میتوانستید یک نمونه از آن را ببینید.
در این بخش نیز برای شروع بهکار، ابتدا یک پروژهای را ایجاد کرده و با انتخاب نوع Console Application در مراحل ساخت پروژه، صفحهای همانند نیز برای شما نمایان خواهد شد که دارای خطوطی از کدها میباشد. اینها کدهایی هستند که سیشارپ به آنها نیاز دارد تا اینکه برنامه شما را اجرا کند. لذا شما نباید به این کدها دستی بزنید و یا قسمتی از آن را حذف کنید. (در آینده خواهید توانست بعضی از بخشهای آن را که اضافیست حذف نمایید)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در ۵ سطر اول از کدها (ممکن است در پیش شما تعداد آنها کمتر باشد!)، شما مشاهده میکنید که خطوط با استفاده از کلمهی کلیدی using شروع شدهاند. فعلاً این خطها را نادیده بگیرید تا بعداً، زمانی که به یک مرحله مشخص رسیدید، بیشتر دربارهی آنها صحبت کنیم.
در خطی که با namespace شروع شدهاست، نام برنامهی شما را مشخص میکند. یک namespace روشی است که کدهای مربوط به هم را به یکدیگر ارتباط دهد. فعلاً بههیچوجه نگران این خط از کدها نباشید؛ چرا که در آینده همه اینها را فرا خواهید گرفت.
مهمترین چیزی که در این کدها میتوان یافت، کلمه کلیدی class میباشد. تمامی کدهایی که در سیشارپ مینویسید (و خواهید نوشت)، باید عضوی از یک class باشد. این class با نام program میباشد. شما کلاسهای دیگری را زمانی که مینویسید، میتوانید به آنها هرنامی را که دلتان بخواهد اعطا کنید؛ اما توجه داشته باشید نامی را که انتخاب میکنید، نباید جزو کلمات رزرو شدهی زبان سیشارپ باشد.
در داخل class program، کدهای زیر موجود است:
static void Main(string[] args)
{
}
این بخش از کد را متد (method) مینامند! نام این متد (method)، Main میباشد. هنگامی که شما با زبان سیشارپ برنامهای را مینویسید، کامپایلر شروع به یافتن متد Main میکند. سیشارپ از متد Main به عنوان محرک و آغازگر زبان استفاده میکند و عدم وجود این متد، باعث میشود که برنامه شما اجرا نشود! هر کدی که در میان دو براکت (منظورم را با پرانتز اشتباه نگیرید!) قرار گیرد، در زمان اجرای برنامه، اجرا میشوند.
اگر در عکس بالا دقت کنید، خواهید دید که کلماتی وجود دارند که با رنگ آبی از دیگر کلمات جدا شدهاند. به این کلمات که با رنگ آبی در سیشارپ از دیگر کلمات مشخص میشوند، کلمات کلیدی میگویند. شما در جلسههای آموزشی آینده در رابطه با اینها بیشتر خواهید دانست.
اکنون، نشانگر موس را بعد از براکت باز قرار داده و با فشردن کلید Enter، به خط بعدی رفته تا اولین خط از کد را بنویسید. با فشردن کلید Enter، بصورت اتوماتیک سرخط شما یک tab به سمت جلو خواهد رفت. این باعث میشود که خواندن و نوشتن کدها برای شما راحتتر باشد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر در کد بالا دقت کنید، متوجه خواهید شد که هر بخش از کد در داخل یک جفت براکت قرار دارد. جا انداختن هر کدام از آنها، باعث خواهد شد که با یک خطا (Error) مواجه خواهید شد.
تک خطی که فعلاً خواهیم نوشت، تنها خط زیر است:
Console.WriteLine(“Hello C Sharp!”);
قبل از آنکه چیزی را تایپ کنید، ابتدا تنها حرف C را تایپ کنید. خواهید دید که یک منو بهصورت اتوماتیک برای شما باز خواهد شد. این منو را اصطلاحاً IntelliSense مینامند. این منو بهصورت هوشمندانه سعی میکند که کلمات کلیدیای که میخواهید بنویسید را تشخیص دهد تا کار شما، برنامهنویس را راحتتر کند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
وقتی که منوی بالا برای شما باز میشود، در کنار نام Console، آیکون خاصی وجود دارد. هر کلمهی کلیدیای با این آیکون، نشانگر یک Class است. الان با فشردن کلید Enter، بگذارید که Visual Studio بصورت اتوماتیک برای شما کلمه Console را بنویسید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون یک نقطه قرار دهید؛ منوی IntelliSense مجدداً ظاهر میشود. شما میتوانید با کلیدهای بالا/پایین در این منو جابهجا شوید. اما شما به آرامی و حرف به حرف شروع به تایپ حروف کلمهی Write کنید؛ خواهید دید که با حرفی که جلو بروید، IntelliSense دقتش بالاتر رفته و میزان تشخیص کلمهی مورد نظر بالاتر میرود. حال شما به دنبال کلمه WriteLine بگردید. (و یا آن را بهصورت کامل تایپ کنید)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال یک پرانتز باز کنید؛ تصویری مشابه تصویر زیر برای شما باز خواهد شد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
WriteLine، یکی دیگر از متدهای موجود در زبان سیشارپ میباشد. جعبه زرد رنگی که برای شما نمایش داده میشود، نشاندهندهی این است که ۱۹ ورژن مختلف از این متد در سیشارپ وجود دارد. شما فعلاً خط زیر را وارد کنید:
“Hello C Sharp!”
فراموش نکنید که دو علامت “Double Quotes” (نقل قول) را در ابتدا و انتهای Hello C Sharp! قرار دهید. قرار دادن Double Quotes به سیشارپ این فرمان را میدهد که شما یک متن میخواهید؛ نه یک کد! بعد از وارد کدهای بالا، میبایست که شکل و شمایل کدهای شما شبیه به زیر شده باشد!
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال یک پرانتزبسته در انتهای کد خود قرار داده؛ اگر دقت کنید در انتهای پرانتز بسته، یک خط کوچک قرمز رنگی برای شما نمایش داده میشود. هر زمانی که شما به یک خط قرمز رنگی در سیشارپ مواجه شدید، بدانید که یک جای کار ایراد دارد (معمولاً یک چیزی را فراموش کردهاید و یا کلمهای را به اشتباه تایپ کردهاید.)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
قوانینی که در زبان برنامهنویسی سیشارپ وجود دارد (که شبیه آن در زبان های C++ و یا PHP نیز دیده میشود) انتهای هر کد میبایست یک “Semicolon” یعنی “;” قرار دهید. با قرار دادن آن در انتهای کد خود، خط قرمز رنگ ناپدید میشود. الان زمان آن رسیده که کد خود را اجرا کنید …
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
قبل از آنکه برنامهی خود را اجرا کنید، باید چندکار را پیش از آن انجام دهید:
از منوی بالا بر روی View کلیک کنید، بر روی Output کلیک کنید. (اگر که گزینه Output را در منوی View ندید، با رفتن به گزینه Tools و سپس با رفتن به Settings و بعد از آن Expert Settings، میبایست که Output را ببینید.)
از منوی Build بر روی Build Express کلیک کنید.
شما میبایست که یک گزارشی شبیه به گزارش پایین ببینید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
آخرین خط میبایست که متن زیر را ببینید:
Build: 1 succeeded or up-to-date, 0 failed, 0 skipped
این خط نشاندهندهی این است که همه چیز بهصورت درست انجام شده و برنامه آماده کامپایل شدن میباشد.
حال مراحل زیر را تست کنید:
Semicolon-ای که در انتهای کد خود اضافه کردید را حذف کنید.
از منوی بالا بر روی Build کلیک کرده و سپس بر روی Build Solution کلیک کنید.
این بار خواهید دید که در گزارش زیر خطاهای زیر را مشاهده خواهید کرد:
Compile complete – ۱ errors, 0 warnings
Build: 0 succeeded or up-to-date, 1 failed, 0 skipped
این خط به شما این پیغام را میدهد که برنامه نتوانست ساخته شود چون یک خطایی در کدهای شما وجود دارد. حال دوباره همان Semicolon را برگردانید.
از منوی بالا بر روی Debug کلیک کنید؛ در منوی باز شده بر روی Start Debugging کلیک کرده و آن را انتخاب کنید.
پنجرهی Console بر شما پدیدار خواهد شد؛ زود هم ناپدید میشود! فعلاً برای جلوگیری از این مشکل، از منوی Debug، گزینه Start Without Debugging را انتخاب کنید. پنجرهی زیر را خواهید دید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برنامهی شما اجرا شد! جملهی Hello C Sharp را خواهید دید!
تا اینجا این جلسه را متوقف خواهیم کرد. از جلسه بعد، طبق قولی که از قبل دادیم، بر روی Windows Application کار خواهیم کرد.
بخش چهارم
در بخش پیش از آموزش زبان سیشارپ، شما اولین کد خود را در محیط زیبا و حرفهای Visual Studio نوشتید. اگر چه دیدن کامپایل شدن برنامه یک حس خوبی دارد، اما قطعاً هنوز اول راه هست و ما تنها یک رشته (=چند کاراکتر کنار هم) را کامپایل کردیم.
در این بخش از آموزش – بخش چهارم – مطابق با قولی که قبلاً به شما داده بودم، از محیط خستهکننده Console جدا میشویم و به محیط جذاب و کاربردی Windows Form Application روی میآوریم. با یک بسمالله شروع میکنم.
اولین Windows Form Application شما!
در Windows Form Application، محیطی به نام Form وجود دارد که تقریباً تمامی کدنویسیهای شما در پشت پردهی آن انجام خواهد گرفت. در ابتدا این Form برای شما کاملاً خالی میباشد و این شمای برنامهنویس هستید که میبایست توسط ابزارها و کدها، برحسب نیازهای خودتان، از آن یک برنامهی کاربری بسازید. میدانید که اساساً در Formها، ابزارهایی همانند جعبه متن (Text Box)، لیبل (Label)، منوها (Menus) و … قرار میگیرند. سیشارپ تمامی این ابزارهای اساسی را برای شما مهیا میسازد و شما کافیست آنها را کد نویسی کنید. البته که در مراحل حرفهای کار، شما میتوانید ابزارهای مورد نیاز خودتان را بسازید و یا با استفاده از componentهای آماده، نیازهایتان را برطرف کنید.
خوب، اکنون به سراغ ساختن یک پروژهی جدید با استفاده از Windows Form Application (یا همان Windows Application) میپردازیم. برای شروع، پس از اجرای نرمافزار Visual Studio، از منوی بالا، گزینهی New Project را از File انتخاب کنید. پنجرهای همانند زیر را مشاهده خواهید کرد. (در نسخههای مختلف Visual Studio، این پنجره دارای ظاهرهای متفاوتی میباشد، اما ماهیت همهی آنها یکی است.)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
از پنجرهی باز شده، بر روی Windows Forms Application کلیک کرده تا انتخاب شود. در بخش نام پروژه، همان نام پیشفرض را، یعنی WindowsFormsApplication1، رها کنید و با کلیک بر روی OK، به ادامه فرآیند بپردازید. محیط زیر را خواهید دید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تفاوت کاملاً مشخصی که میان پروژهی Console Application و Windows Form Application وجود دارد، وجود یک Form خالی میباشد. در سمت چپ، به جعبه ابزارها (Toolbox) دقت کنید. ما توسط این بخش، کنترلرهای لازم را در Form ایجاد میکنیم و در نهایت، آنها را کدنویسی خواهیم کرد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر که احیاناً شما نمیتوانید Toolbox را ببینید، احتمالاً شما یک پنجرهی خالی همانند زیر خواهید دید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر چنین هست، موس خود را بر روی سربرگ Toolbox که در سمت چپ هست، نگهدارید. مشاهده خواهید کرد که Toolbox مجدداً ظاهر میشود. برای اینکه حالت نمایش آن را دائمی کنید، میتوانید بر روی آیکون مشخص شده (Pin) کلیک کنید تا نمایش آن بهصورت ثابت بماند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون به بخش Solution Explorer یک نیمنگاهی بیاندازید! اگر آن را با Solution Explorer پروژه قبلی که بصورت Console Application بود مقایسه کنید، متوجه خواهید شد که تمامی آیتمها همانند هم بوده؛ تنها در Windows Form Application یک آیتمی به نام Form مشاهده خواهید کرد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون بر روی Program.cs دابل-کلیک کنید. کدهای آشنایی را خواهید دید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
عکس زیر، از فایل Program.cs پروژه Console Application است
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
هر دوی آنها همان خطهای شروع شده با Using را دارند، یک namespace مشابه وجود دارد، کلاسی با نام Program نیز همچنان هست و متد (تابعی) با نام Main.
متد Main، نقطه شروع برنامه شماست. کدهایی که در میان براکتهای متد Main وجود دارند، اولین خطهایی هستند که اجرا خواهند شد. آخرین خط از آنها، همانطور که در عکسهای بالا مشخص شده است، Form1 را برای شما اجرا میکند.
شما کارهای دیگری نیز در این متد Main میتوانید انجام دهید. برای مثال، فرض کنید که شما یک برنامهای دارید که در هنگام اجرا میخواهد اتصال به اینترنت را بررسی کند. اگر یک اتصال به اینترنت را بیابد، اطلاعاتی را برای شما از طریق بانک اطلاعاتی فراخوانی میکند و به نمایش میگذارد. اینکار را دقیقاً میتواند در متد Main انجام داد. یعنی کدی بنویسید که آیا سیستم به اینترنت وصل است یا خیر؛ اگر پاسخ خیر باشد، پنجرهی دومی را نشان دهد. (مثلاً خطای عدم ارتباط با اینترنت)؛ اگر هم پاسخ بله است، Form را نمایش دهد. (همین اولین فرم منظور است.)
اما نگران این کدها که شاید کمی شما را گیج کردهاست، نباشید! چیزی که فعلاً باید حواستان به آن جمع باشد این است که متد Main در هنگام شروع برنامه، اجرا میشود و Program.cs فایلی است که متد Main در آن ذخیره میشود.
اما فعلاً ما در Program.cs کدی را نخواهیم نوشت. از طریق سربرگ فوق، بر روی Program.cs راست کلیک کرده و بر روی Close کلیک کنید. Form مجدداً نمایش داده میشود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر که میخواهید بدانید که ما بیشترین کدهایمان را در کجا خواهیم نوشت، با مراجعه مجدد به Solution Explorer، بر روی Form1.cs راست کلیک کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این منو گزینههایی با نامهای View Code و View Designer را دارا میباشد. View Designer همان فرمی است که هماکنون میبینید. View Code، محلی است که کدهای ما آنجا ذخیره خواهند شد. بر روی آن کلیک کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این کدهای خود Form میباشد و نباید به آنها دست برد.
اینبار، این کدها دارای تعداد بیشتری از کدهایی که با Using شروع شده است، میباشد. هیچ نگران اینها نباشید. استفاده از کلمه Using تنها به این معنی است که از کدهایی استفاده شود که قبلاً بهصورت آماده نوشته و تهیه شدهاند.
کدها همچنان یک بخشی با نام partial class Form1 دارد. آوردن نام Partial (=بخشی، قسمتی از) به این دلیل است که شما تنها بخشی از کدها را میبینید و قسمتی دیگر از دید شما پنهان هستند. برای دیدن قسمتهای پنهان آن، دوباره به Solution Explorer مراجعه کنید و طبق تصویر، Form1.cs را باز کرده و بر روی Form1.Designer.cs دابل کلیک کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مجدداً، partial class Form1 را خواهید دید که تمامی کدها در اینجا هستند. میتوانید با کلیک کردن بر روی علامت + در کنار Windows Form Designer generated code، کدها را ببینید که همانند زیر هستند:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
متد IntializeComponent متدی است که بهصورت اتوماتیک هنگام ساختن یک پروژه Windows Form Application برای شما تولید میشود. هنگامی که ابزارهایی را همانند دکمه، جعبه متن، لیبل و … را قرار میدهید، کدهای بیشتری بهصورت اتوماتیک برای شما تولید میشوند.
اما خیالتان را راحت کنیم که فعلاً کاری با اینجا نداریم؛ پس با خیال راحت، پنجره مربوط به Form1.Designer.cs را ببندید.
Form1 را مجدداً باز کنید. اگر آن را بسته بودید، با مراجعه به Solution Explorer و با راست کلیک کردن بر روی آن، بر روی View Designer کلیک کنید. پنجره زیر نمایان میشود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
فعلاً ما بدون اضافه نمودن هیچ ابزاری، آن را اجرا میکنیم. برای اجرا، از منوی بالای برنامه Visual Studio، Debug را باز کنید و بر روی Start Debugging کلیک کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
هنگامی که بر روی Start Debugging کلیک میکنید، Visual Studio شروع به ساخت اولین برنامه شما میکند. اگر در این میان، مشکلی وجود داشته باشد، با یک پیغام خطایی شما را مطلع میسازد.
الان که برنامهی شما اجرا شده است، میتوانید خیلی راحت ببینید که شما نیز توانستید پنجرهای همانند دیگر پنجرههای نرمافزارها بسازید … دکمه قرمز برای خروج، دکمههای Minimize و Maximize نیز وجود دارند! حال برنامه راببندید.
از این به بعد، هر زمانی که از لفظ «اجرای برنامه» استفاده کردیم، منظور آن خواهد بود که شما به منوی Debug مراجعه کنید و بر روی Start Debugging کلیک کنید.
فعلاً جلسه به همینجا خاتمه مییابد و انشاءالله در جلسه آینده، ابزارهایی را به فرم خودمان منتقل خواهیم کرد.
بخش پنجم
در بخش پیشین از آموزش زبان برنامهنویسی سیشارپ، نحوه ایجاد و کامپایل یک پروژه Windows Form Application را فرا گرفتید. در این بخش، شما فراخواهید گرفت که چگونه کنترلرهای مختلفی را به یک Form خالی خود اضافه و در ادامه، آن را کدنویسی کنید. پس با یک بسمالله با همدیگر شروع میکنیم …
اضافه کردن کنترلرها به Form خالی خود
اولین کاری که در این بخش قرار است انجام دهیم، اضافه کردن کنترلرها به فرم خود است. در ادامه، پس از اضافه کردن آنها، کدهای موردنظر خود را در آنها نوشته و درنهایت با اجرا نمودن برنامه، نحوه اجرای آن را خواهیم دید. (در بخش بعدی)
برای اضافه نمودن یک کنترلر (مانند Text Box، Button و …) میتوانید از Toolbox در کنار Form خود در سمت چپ استفاده کنید. Toolbox را باز کرده و پس از آن بر روی فلش Common Controls کلیک کنید تا موارد مربوط به آن باز شود. شما میبایست که لیستی از کنترلهای مختلف همانند تصویر زیر ببینید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی Button یکبار کلیک کرده؛ اینکار باعث میشود که Button انتخاب شود. برای اضافه کردن آن، هرکجای Form خود، یکبار کلیک کنید تا Button درج شود. اتفاقی همانند زیر برای فرم شما خواهد افتاد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Button در واقع یک شیءای است که توسط آن از دیگران میخواهید که بر روی آن کلیک کنند تا یک عمل خاصی انجام شود. وقتی که آن بر روی Button کلیک میکنند، کدهایی که در درون این Button نوشتهاید اجرا خواهند شد. متنی که بر روی Button نوشته شده است (که بهصورت پیشفرض با نام button1 معرفی شده) قابل تغییر میباشد.
تمامی ابزارهایی که در Form خود استفاده میکنید (دقیقاً همانند همین Button-ای که قرار دادهایم)، همه دارای بخشی به نام Properties، به معنی خصوصیات هستند. توسط Properties این ابزارها، شما قادر به تغییر بسیار از خصوصیات ابزارها هستید و آنها را بهشکلی که تمایل دارید، شخصیسازی کنید. مثلاً طول و یا عرض آن را تغییر دهید، رنگ آن را عوض کنید و یا نام آن را به نام دیگری تبدیل کنید.
برای دستیابی به خصوصیات، ابتدا اطمینان حاصل فرمایید که ابزار شما انتخاب شده باشید. یعنی با یکبار کلیک کردن بر روی آن، ابزار انتخاب شود. بهشکل زیر دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون، سمت راست و پایین برنامه Visual Studio را مشاهده کنید؛ دقیقاً زیر Solution Explorer. شما میبایست که پنجرهای به نام Properties را مشاهده کنید. اگر این پنجره برای شما وجود ندارد (و یا حتی اگر شاید وجود دارد و آن را نمیبینید) با راستکلیک کردن بر روی ابزار موردنظر شما، آخرین گزینه، یعنی Properties را انتخاب کنید تا پنجره Properties برای شما به نمایش درآید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای راحتی کار هنگام استفاده از Properties، پیشنهاد میشود که آن را بر اساس ترتیب حروف الفبای انگلیسی تنظیم کنید. برای اینکار، طبق تصویر زیر، بر روی آیکون AZ کلیک کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همانطور که میبینید، Property های بسیار زیادی را در اینجا خواهید دید. به سراغ حرف T بروید و Property-ای بهنام Text را پیدا کنید. این خصوصیت، نام ابزار خود را مشخص میکند. مثلاً برای همین Button، قبلاً دیدید که نامی که توسط آن، کاربر شما مشاهده میکند، button1 میباشد. شما با استفاده از این خصوصیت، میتوانید نام نمایشی را تغییر دهید تا کاربری که برنامه شما را میبینید، نامی مطابق با عملکر ابزار را مشاهده کند.
بر روی مقدار مقابل Text کلیک کنید و آن را به نام مقابل تغییر دهید: A Message
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی Enter کلیک کنید تا نام جدید ثبت شود. حال بر روی Form خود نگاهی بیاندازید؛ خواهید دید که نام آن به نام A Message تغییر یافت.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یک خصوصیت دیگری در پنجرهی Properties میتوانید پیدا کنید که نام آن Size میباشد. توسط این خصوصیت، شما مقدار طول و عرض ابزار خود را میتوانید تعیین کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اولین رقم از آن که ۷۳ میباشد، نمایانگر عرض ابزار شماست. دومین رقم که ۲۳ میباشد، نمایانگر طول ابزار شماست. آنها را بهترتیب به ۱۰۰ و ۳۰ طبق تصویر زیر تغییر دهید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Enter را مجدداً فشار دهید تا سایز جدید اعمال شود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
نکته: اگر که شما بهجای ابزار خود، خود Form را انتخاب کنید و به بخش Properties آن مراجعه کنید، خواهید دید که خود Form نیز دارای خصوصیتهای مختلفی میباشد. اگر مقدار Text را تغییر دهید، عنوان آن تغییر خواهد کرد.
بخش ششم
در این بخش شما با نحوه کد نویسی هر یک از ابزارها (button و …) آشنا خواهید شد و در نهایت یک برنامهی سادهای را کامپایل (compile) خواهیم کرد.
اضافه نمودن کدهای سیشارپ به ابزارهای خود
در ادامه بخش قبل، شما پنجرهای را که در آن یک button قرار دادهاید را مجدداً فراخوانی کرده. پنجرهای شبیه به تصویر زیر را میبایست داشته باشید.
کاری که در این بخش آموزشی خواهیم کرد این هست که میخواهیم در کاربر ما بر روی button کلیک کند؛ با کلیک کردن بر روی آن، کدی را که نوشتهایم (یک پنجرهی پیغام یا هشدار) برای او به نمایش درآید. برای دیدن کدهای پشتپردهی button، بر روی button خود دوبار کلیک کنید (دابل کلیک.) کدهای زیر را مشاهده خواهید کرد:
تنها تفاوتی که ممکن است در این پنجره نسبت به آخرین باری که آن را دیدهباشید، وجود داشته باشد این است که کدهای اضافی زیر مربوط به button شما میباشد.
private void button1_Click(object sender, EventArgs e)
{
}
اگر تعریف متدها (Method) را هنوز بهخاطر داشته باشید، احتمالاً متوجه شدهاید که این نیز یک نوع متد است که یکسری دستورات خاصی را که مابین دو براکت قرار میگیرد را اجرا میکند. نام این متد، button1_click است. نام button1 بهاین خاطر است که اگر در properties این ابزار دقت کنید، خصوصیتی به نام Name وجود دارد که در مقابل آن button1 است. دقت کنید که دو خصوصیت Name و Text کاملاً از یکدیگر جدا و عملکرد متفاوتی دارند! Text نام نمایشی است؛ اما Name، نام شیء است که درهنگام برنامهنویسی، بتوانید از آن استفاده کنید.
در قسمت دوم از نام این متد، _click وجود دارد. به این بخش اصطلاحاً Event یا رویداد میگویند. Event-های دیگری نیز وجود دارند؛ مانند LocationChanged (یعنی هنگامی که یک شیء جایش تغییر پیدا کند، کدهای نوشته شده اجرا شوند) یا TextChanged (هنگامی که مثلاً در یک جعبهمتن، متن آن تغییر کند، کدهای نوشته شده اجرا شوند) و …
شما در رابطه با Event-ها در آینده بهطور مفصلتری آشنا خواهید شد، پس فعلاً عجلهای نداشتهباشید.
اگر در داخل پرانتز دقت کنید، عبارت زیر را مییابید:
object sender, EventArgs e
به این دو عبارت، آرگومان (argument) میگویند. یکی از آنها sender است؛ دیگری e! فعلاً تا همینقدر که به این دو آرگومان میگویند، بدانید و نگران آنها نباشید؛ آرام آرام متوجه کاربرد و منظورشان میشوید.
اما برویم به سراغ اصل کار؛ نوشتن کد در میان دو براکت جهت اجرا! یک خط کد در این بین اضافه خواهیم کرد و ببینیم چه اتفاقی خواهد افتاد.
کاری که میخواهیم انجام دهیم این است که با کلیک کردن بر روی button، یک پنجره خطا، هشدار و یا اطلاعات نمایش داده شود.
حال، نشانگر موس را در میان دو براکت قرار داده و ابتدا تنها حرف «M» را وارد کنید. منوی IntelliSense مجدداً ظاهر میشود.
حال، در ادامه حرف M، سه حرف بعدی مقابل را وارد کنید: «ess». منوی IntelliSense کمی پایینتر خواهد آمد.
گزینهی مورد نظر ما، MessageBox است. آن را بهصورت کامل تایپ، یا آن را انتخاب کنید. کد زیر برای شما در مابین دو براکت قرار میگیرد:
اکنون، یک نقطه در ادامه MessageBox قرار دهید؛ خواهید دید که مجدداً منوی IntelliSense برای شما نمایان میشود.
سه گزینه برای شما قرار دارد؛ که همه آنها متد هستند، چونکه میتوانید اینطور استدلال کنید که تمامی آنها، آیکون بنفش رنگ را دارند! شما گزینه Show را انتخاب کنید. (یا آن را بنویسید)
چون Show، یک متد (Method) می باشد، پس ما نیاز به یک جفت پرانتز داریم. پس یک پرانتز باز کنید!
همینکه پرانتز را باز میکنید، یک کادر زرد رنگی برای شما نمایش داده میشود و به شما میگوید که چطور میتوانید از این متد استفاده کنید. ۲۱ حالت متفاوت برای استفاده از متد Show وجود دارد که میتوانید با استفاده از کلیدهای جهت، آنها را مشاهده کنید. اما فعلاً لازم نیست خودتان را با آنها درگیر کنید. فعلاً تنها خط زیر را در ادامه پرانتز بنویسید:
“My First Message”
در نهایت، یک پرانتز بسته قرار دهید و با گذاشتن یک semicolon (یعنی ، به سیشارپ بگویید که این خط از کد در اینجا به اتمام رسید.
حالا اگر یک نگاه کلی به کدی که نوشتهاید بیاندازید، احتمالاً متوجه میشوید که متنی که قرار است بصورت پیغام برای شخص مقابل نشان داده شود، همان متنی است که به رنگ قرمز میباشد.
اول از همه، با مراجعه به منوی File، بر روی Save all کلیک کرده تا پروژه خود را طبق بخشهای پیشین آموزش، ذخیره کنید.
اکنون وقت آن رسیدهاست که برنامه خود را اجرا کرده و از آن لذت ببرید. به منوی Debug مراجعه کنید و بر روی Start Debugging کلیک کنید. یا میتوانید کلید F5 را فشار دهید
برنامه شما همانند تصویر فوق اجرا میشود. بر روی button کلیک کنید تا ببینیم چه میشود …
بهبه! اول از همه تبریک میگم … من شخصاً وقتی در ابتدا در حال یادگیری برنامهنویسی بودم، این بخش از آموزش، جالبترین بخش بود.
فعلاً تا همینجا نگه میداریم؛ انشاءالله در بخش بعدی کمی بیشتر در رابطه با متد Show صحبت خواهیم کرد و حالتهای دیگری را بررسی میکنیم.
توجه: تصاویر پیوست شده اند.
بخش هفتم
جزئیاتی بیشتر در رابطه با Message Box
اگر بهخاطر داشته باشید، در انتهای جلسه قبلی از آموزش، جعبهی پیغامی (Message Box) همانند شکل زیر ایجاد کردیم. درصورتی که کمی به آن دقت کنید، خواهید یافت که این جعبه پیغام، یک پنجرهای بدون هیچ عنوان و یا آیکون (مثل آیکونهای اخطار، هشدار، اطلاعات و …) میباشد. سیشارپ این امکان را به ما خواهد داد که با اضافه نمودن یک کد دستوری ساده، تمامی این موارد را بهسادگی به آن اضافه کنیم.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خوب، سعی کنید که پروژه جلسهی پیش را مجدداً فراخوانی کنید (ترجیحاً از اول بنویسید که یادآوری شود). مجدداً بر روی button ایجاد شده، یعنی A Message دابل-کلیک کنید تا پنجرهی مربوط به کدهای این button برای شما نمایش داده شود.
نشانگر موس خود را دقیقاً قبل از پرانتز بسته و بعد از “My First Message” قرار دهید. میتوانید از تصویر زیر کمک بگیرید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون، یک کاما در این محل قرار دهید. همینکه شما این کاما را قرار میدهید، یکبار دیگر پنجرهی زرد رنگی برای شما به نمایش درخواهد آمد که به شما نشان خواهد داد که چه امکاناتی را میتوانید به Message Box خود اضافه کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون، رشتهی مقابل را پس از کاما تایپ کنید: “Message”
اکنون، کد شما میبایست دقیقاً همانند زیر باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر چنین بود، برای بار دیگر، برنامهی خود را اجرا کنید. بر روی A Message کلیک کنید، اینبار جعبهپیغام شما به شکل زیر خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خواهید دید که اینبار پنجرهی شما دارای یک عنوان میباشد. حال در ادامه خواهید دید که چه آپشنهای دیگری برای جعبهپیغام وجود دارد.
تغییر button های Message Box
شما میتوانید بهجای اینکه تنها یک button از نوع OK داشته باشید، button های دیگری را که مربوط به جعبهپیغامها میشود را اضافه کنید. به کدهای قبلی خود مجدداً بازگردید و اینبار، کد زیر را پس از “Message” قرار دهید. (کاما فراموش نشود!)
MessageBoxButtons
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون یک نقطه در مقابل آن قرار دهید، IntelliSense مجدداً به نمایش میآید. انواع کلیدها را میتوانید از منو انتخاب کنید. مثلاً با انتخاب YesNo، جعبهپیغام شما دارای دو گزینه Yes و No خواهد بود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اضافه کردن آیکون به MessageBox
برای اضافه کردن آیکون به Message Box، مجدد به کدهای خود بازگردید و اینبار کد زیر را پس از اضافه نمودن یک کاما، تایپ کنید:
MessageBoxIcon
دوباره، یک نقطه در مقابل آن قرار دهید و آیکون مورد نظر خود را از IntelliSense انتخاب کنید!
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
من گزینه Asterisk را انتخاب کردم. اگر برنامهی خود را اجرا کنید، پس از کلیک بر روی A Message، اینچنین خواهد شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تا اینجا برای این بخش از آموزش کفایت میکند. شما میتوانید همچنان به این گزینهها، مقادیری را اضافه کنید و کارهای بسیار زیبای دیگری را انجام دهید. پس، بقیه کارها به عهده شما خواهد بود.
در بخش بعدی نیز مبحث متغیرها را باز خواهیم کرد.
بخش هشتم
معرفی متغیرها و شروع به پروژه جدید
اصولاً نرمافزاری که تهیه میشود، با استفاده از اطلاعاتی که در درون حافظه قرار دارد، کار میکند. این بخش از حافظه که توسط نرمافزار تهیه وکنترل میشود تا اطلاعاتی را درون آن ذخیره کنیم را با نام متغیر میشناسیم.
در واقع، متغیر همانند ظرفی است که در درون آن، با توجه به نوعی که قبلاً به آن دادهایم، میتواند عدد، کارکتر یا یک رشته از کارکترها (Strings) را در درون خود ذخیره کند.
در این بخش از آموزش، ما به شما نحوه ایجاد و تعریف انواع متغیرها، نحوهی استفاده از آنها و دیگر موارد مرتبط را آموزش خواهیم داد؛ فعلاً با متغیر رشته (Strings) آموزش را شروع میکنیم.
اولین نوع از متغیرها، متغیر String میباشد. متغیر String همیشه یک متن (Text) است. ما سعی خواهیم کرد که یک برنامهی کوچکی بنویسیم که یک Text را توسط جعبهمتن (TextBox) از طریق صفحه کلید دریافت، آن را در متغیر ذخیره و سپس توسط یک جعبهپیغام (Message Box) متن وارد شده را به ما اعلام کند.
ابتدا یک پروژهی جدید از نوع Windows Application بسازید. اگر پروژهای از قبل دارید، آن را کاملاً ببندید. هنگامی که پروژهی جدید شما ساخته میشود، یک Form خالی برایتان نشان داده خواهد شد. حال، یک Button بر روی فرم خود قرار دهید. به بخش Properties مربوط به Button خود بروید و Propertyهای زیر را به مقدار مشخص شده (با رعایت حروف بزرگ و کوچک) تغییر دهید.
Name: btnStrings
Location: 90, 175
Size: 120, 30
Text: Get Text Box Data
فرم شما باید شکلی به همانند تصویر زیر داشته باشد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
اکنون شما میبایست که ۲ شیء دیگر اضافه کنید؛ اول- یک Label و دوم- یک Text Box. وقتی که Button کلیک میخورد، متن داخل Text Box را میگیرد و در یک Message Box نمایش میدهد.
یک Label نیز، همانطور که از نامش پیداست، برچسبی است که معمولاً در کنار اشیاء و ابزارها قرار میگیرد که وظیفه شیء مورد نظر را به کاربر اعلام کند. همانطور که یک Button را اضافه کردهاید، به ToolBox مراجعه کنید و یک Label قرار دهید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال فرم شما شکلی مانند زیر دارد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون به Properties مربوط بهLabel مراجعه کنید و Property های زیر را تغییر دهید:
Location: 10, 50
Text: Name
شما نیازی برای تغییر Size نخواهید داشت؛ چرا که Visual Studio بهصورت خودکار، آن را با اندازهی متن وارد شده هماهنگ میکند. اکنون Form شما این شکل خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تنها کاری که باقی میماند، اضافه کردن یک Text Box است. به ToolBox برگردید و یک Text Box اضافه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بهجای اینکه اینبار از طریق Properties مقدار Location را تغییر دهیم، با استفاده از موس خود و با نگهداشتن کلید سمت چپ، آن را دقیقاً در مقابل Label اضافه شده قرار دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر دقت کرده باشید، حتماً متوجه شدهاید که با تکان دادن ابزارها، خطوطی برای تنظیم محل قرارگیری برای شما نمایان میشوند. شما با استفاده از این خطوط، خواهید توانست که ابزارهای مورد نظر خود را بهصورت زیباتر و البته منظمتری در کنار هم قراردهید.
اکنون وقت آن رسیده است که شروع به کدنویسی بکنیم. پیش از هرکاری، ابتدا پروژه خود را ذخیره کنید. به منوی File مراجعه کنید و سپس بر روی Save All کلیک کنید.
از آنجایی که ما میخواهیم با کلیک کردن بر Button مورد نظرمان، عملیات مورد انتظار ما انجام شود، پس میبایست که کدهایمان را در درون button قرار دهیم. خوب، دوبار بر روی button کلیک کنید تا وارد بخش کدهای مربوط به button شوید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
الان ما باید یک متغیر از نوع String تعریف کنیم. بهطور کلی، در سیشارپ هنگامی که بخواهیم یک متغیر جدید تعریف کنیم، اول باید نوع آن را به Visual Studio اعلام کنیم و در ادامهی آن، به آن نامی (دلخواه) بدهیم. پ در اینجا ما میخواهیم یک متغیر از نوع String تعریف کنیم و نامش را میخواهم firstName قرار دهم. پس مینویسیم:
string firstName;
نقطه-ویرگول (semicolon) را در انتها فراموش نکنید! پس داریم:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دقت کنید که کلمه string بهصورت خودکار به رنگ آبی تغییر یافت. این بدان معناست که کلمه string جزو تقریباً ۸۰ کلمهی رزرو شده در سیشارپ میباشد. کلمات رزرو شده در سیشارپ که اصطلاحاً به آنها Keywords (کلمات کلیدی( میگویند بدین معنا هستند که این کلمات در سیشارپ وظیفهی مشخصی را دارند و نمیتوان آنها را بهعنوان نام متغیر (یا درآینده Class و …) انتخاب نمود. دیگر کلمات کلیدی مهم در سیشارپ کلمات زیر میباشند:
Private, public, protected, int, float, double, class, virtual, this, …
در هنگام انتخاب نام متغیر، یکسری قوانینی وجود دارد که میبایست حتماً آنها را رعایت کنید. بطور کلی شما متغیرتان میتواند هرنامی که دوست داشته باشید، دارا باشد اما چند قانونی هست که میبایست در ذهن داشته باشید که مهمترین آنهایی که در خاطر دارم بهشرح زیر است:
نام متغیر نباید جزو کلمات رزرو شده در سیشارپ باشد. اگر هنگام انتخاب نام متغیری، دیدید که رنگ آن تغییر پیدا کرد، پس باید از آن صرف نظر کنید.
نام متغیر نباید که با عدد شروع شود. مثل: ۱firstName
استفاده از کارکترهای ویژه در نام متغیر مجاز نیست. مانند: firstName&
نباید که فاصلهای میان نام متغیرها ایجاد شود. مانند: first Name
اینها مواردی بود که در خاطرم مانده است.
بریم سراغ اصل کاری! بعد از اینکه شما متغیر خود را تعریف نمودهاید، نوبت به استفاده از آن رسید. وقتی که شما به متغیر خود یک نام میدهید، میخواهید هنگام استفاده توسط آن نام آن را صدا بزنید. (مثل اینکه شما صاحب بچهای شدید و با نامی که به او اعطا میکنید، از آن لحظه به بعد او را صدا میزنید و زود بچهتان حواسش به شما جمع میشود. [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] )
پس کد زیر را در زیر کد قبلی بنویسید:
firstName = textbox1.Text;
کدتان باید بهشکل زیر باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
وقتی که شما میخواهید مقداری را در متغیر ذخیره کنید، آن را در سمت چپ علامت مساوی قرار میدهید. مقدار بعد از مساوی، مقداری خواهد بود که در درون متغیر لحاظ میشود. در این مثال ما میخواهید که Text مربوط به textbox1 را داخل متغیر firstName ذخیره کنیم. (متوجه شدید که چه اتفاقی افتاد؟)
اگر حواستان جمع باشد، یک مشکلی وجود دارد! یک نگاهی به کدهایتان بندازید؛ زیر textbox1 یک خط آبی وجود دارد!
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
نشانگر موس خود را بر روی آن نگه دارید؛ خواهید دید که Visual Studio خطا را بهصورت زیر برای شما شرح میکند:
The name ‘textbox1’ does not exist in the current context.
Visual Studio تصور میکند که ما چیزی به نام textbox1 نداریم؛ خوب واقعاً هم نداریم! جعبهمتنی که ما در برنامهی خودمان قرار دادیم نامش textBox1 است! همیشه دقت کنید که در سیشارپ حروف بزرگ و کوچک خیلی مهم هستند و سیشارپ این دو را دو شیء متفاوت تلقی میکند. خوب، از این بگذریم، فقط کافیست که اگر اشتباه بالا را انجام دادهاید، آن را اصلاح کنید تا خط آبیرنگ زیر textbox1 از بین برود.
خوب، همانطور که در بالا ذکر کردیم، بعد از آنکه متغیر firstName را تعریف کردیم، در خط بعدی توانستیم که از آن استفاده کنیم؛ بدین صورت که به سیشارپ دستور دادیم که مقدار بعد از علامت مساوی ‘=’ را در firstName ذخیره کند.
دقت کنید که متغیر ما از نوع رشته تعریف شدهاست، پس ما فقط خواهیم توانست که مقادیری که متنگونه هستند (text) را در این متغیر و متغیرهای امثال آن ذخیره کنیم. بهاین دلیل ما با اضافه کردن .text به انتهای textBox1 به سیشارپ اعلام کردیم که ما میخواهیم متن وارد شده در جعبهمتن را در متغیر ذخیره کنیم.
اکنون که کار ما بهاینجا رسید، فقط کافیست که یک خط کد اضافیای بنویسم تا با ساختن یک پنجره پیغام، متن داخل متغیر firstName را بهنمایش بگذارد. خط کد زیر را در خط بعدی کد خود اضافه کنید:
MessageBox.Show(firstName);
در رابطه با متد MessageBox.Show() قبلاً به اندازه کافی صحبت کردهایم. پرانتز موجود در این متد هم میتواند خود متن را از برنامهنویس دریافت کند (که باید همراه با دابل-کوتیشن double-quotes همراه باشد)، و یا اینکه متغیری را دریافت کند که از همان جنس متن (رشته یا String) باشد. پس ما اصطلاحاً به متد MessageBox.Show، متغیر firstName را پاس دادهایم.
برنامه خود را اجرا کنید. در جعبه متن کلمهای را وارد کنید و سپس بر روی Get Text Box Data کلیک کنید. اینطور خواهد شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تا اینجا که بهنظر من خیلی خوب پیشرفتهاید! حتماً کسانی که دوست دارند سیشارپ یا کلاً هر زبان برنامهنویسی دیگری را یاد بگیرند، قطعاً لذت این بخشها را خواهند چشید. امیدوارم که تا اینجا مطالب آموزشی بهنحو احسن پیش برده باشم.
بخش نهم
اتصال دو رشته
یکی از مواردی که در سیشارپ میتوانید انجام دهید، الحاق (اتصال) دو رشته در کنار هم میباشد. شما میتوانید یک رشتهی مستقیم را به یک متغیر رشتهای الحاق کنید؛ یا دو رشتهی مستقیم را به هم الحاق کنید؛ یا دو متغیر رشتهای را با یکدیگر الحاق کنید. یک نمونهکد میتواند تمام این موارد را بطور واضح برای شما روشن کند.
پروژهی قبلی خود را باز کنید؛ شما یک متغیر با نام firstName داشتهاید. یک متغیر جدید از نوع رشته بسازید و نام آن را messageText قرار دهید. اینطور:
string messageText;
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
ما میخواهیم در متغیر messageText یک رشته بهصورت دستی وارد کنیم و در درون آن ذخیره کنیم. پس طبق روال، اینطور مینویسیم:
messageText = “Your name is: “;
کد شما به شکل زیر خواهد شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
کاری که ما میخواهیم از این اعمال انجام دهیم، این است که با کلیک بر روی button مورد نظر، متنی بهشکل زیر بنویسد:
Your name is John.
متغیری که هماکنون تعریف کردیم، بخش اول پیام بالا را کنترل خواهد کرد؛ یعنی Your name is. و در انتها ما نام فرد را توسط جعبه متنی که از قبل قرار دادهایم خواهیم گرفت – توسط کد زیر که از قبل نوشتهایم:
firstName = textBox1.Text;
نام فرد در متغیر firstName ذخیره خواهد شد. پس برای اینکه این دو رشته را با یکدیگر الحاق کنیم، فقط و فقط کافیست که از علامت جمع (+) استفاده کنیم؛ یعنی:
messageText + firstName
اکنون بهجای firstName تنها در داخل پرانتز در متد MessageBox.Show()، ما میتوانیم کد بالا را قرار دهیم؛ بدین صورت که:
MessageBox.Show(messageText + firstName);
کدهای شما باید اینگونه شده باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
برنامه خود را اجرا کنید؛ نام خود را در جعبه متن وارد کنید و بر روی Get Text Box Data کلیک کنید. شما باید چیزی شبیه به این ببینید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
تبریک میگویم! شاید یک کاری سادهای بود، اما قطعاً همین علامت جمع (+)، خود یکی از موارد بسیار مهم در برنامهنویسی میباشد.
کاری که ما اینجا کردیم این بود که یک متغیر جدید تعریف کردیم که یک رشتهی مستقیم را در خود ذخیره کند (یعنی Your name is) و یک متغیر نیز از قبل داشتیم که نام فرد را بگیرد؛ سپس این دو متغیر را با هم الحاق کردیم.
تمرین: سعی کنید که شما بدون استفاده از متغیر messageText، دقیقاً پروژهی بالا را پیادهسازی کنید.
کامنتگذاری در سیشارپ
شما مجبور نیستید که نمایش اسم افراد را در یک Message Box نمایش دهید! شما میتوانید همینکارها را با استفاده از یک Label ساده انجام دهید.
با استفاده از Tool Box، یک Label جدید اضافه کنید. Properties مربوط به Label جدید خود را بدین شکل قرار دهید:
Name: TextMessage
Location: 87, 126
Text: Message Area
به پنجره کدهای خود برگردید. دوتا خط مورب (Slash) پشت آخرین خط از کد شما، یعنی MessageBox.Show() اضافه کنید. به شکل زیر دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
علت اینکه این خط از کد شما بعد از قرار دادن Slashها به رنگ سبز تبدیل شد، این است که به این اتفاق کامنتگذاری میگویند. شما تقریباً در تمامی زبانهای برنامهنویسی چنین چیزی را خواهید داشت.
کامنت به این معنیاست که سیشارپ این بخش از کدهای شما را نادیده خواهد گرفت و از آنها رد خواهد شد. فایدهی کامنت گذاشتن برای این است که هنگامی که شما یک پروژهای را مینویسید، شاید بعد از یک ماه با دیدن کدهای آن، خیلی از دلایل کارهایتان را فراموش کنید. البته به این پروژههای کوچک دقت نکنید؛ شما در آینده برنامههایی را خواهید نوشت که ۱۰ها هزار خط کد خواهد داشت و با یک دید نخواهید توانست عملیات کدها را بهیاد آورید.
شما میبایست از همین اول که در ابتدای راه هستید، به خودتان عادت دهید که در تمامی برنامهها، هرچقدر هم کوچک باشند، کامنتگذاری کنید. پس ما هم چنین خواهیم کرد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
اکنون که شما آخرین خط از کدتان را به یک کامنت تبدیل کردهاید، این کد دیگر اجرا نخواهد شد؛ یعنی دیگر با کلیک بر روی button، جعبهپیغام برای شما نمایش داده نخواهد شد. اینبار با استفاده از Label که تازه اضافه کردهایم، نام خودمان را بر روی آن چاپ خواهیم کرد. پس خط زیر را اضافه کنید:
TextMessage.Text = messageText + firstName;
فکر میکنم که کد بالا کاملاً برای شما آشنا باشد. این کد میگوید که یک شیء با نام TextMessage وجود دارد (که همان Label است) که میخواهیم مقدار Text آن، برابر باشد با الحاق دو رشتهی messageText و firstName.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
مجدداً نرمافزار خود را اجرا کنید. نام خود را وارد کنید؛ چنین خواهد شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
خواهید دید که خیلی ساده شما توانستهاید بهجای استفاده از یک Message Box، از یک Label استفاده کنید و نام خودتان را بر روی آن چاپ کنید. اکنون تمرین زیر را سعی کنید خودتان حل کنید:
تمرین: اینبار علاوه بر Label، یک Text Box جدید اضافه کنید و سعی کنید که نامتان همراه با الحاق دو رشته در یک جعبهمتن نمایش داده شود؛ چیزی شبیه به شکل زیر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
بخش دهم
متغیرهای عددی
علاوه بر آنکه شما میتوانید در متغیرهای خود، رشته و یا متن ذخیره کنید، خواهید توانست که اعداد را نیز ذخیره کنید. تعداد قابل ملاحظهای متغیر برای ذخیرهی اعداد موجود میباشد، اما آنهایی را که شما با آنها سروکار خواهید داشت به ترتیب Integer (اعداد صحیح)، Double و Float (اعداد اعشاری). شاید در رابطه با تفاوت Double و Float برای شما سوالی پیش بیاید که اگر هر دو از نوع «اعداد اعشاری» هستند، پس چه تفاوتی میان آنهاست! به زودی متوجه خواهید شد …
اول از همه یک پروژه جدید را در Visual Studio شروع کنید. فراموش نکنید که پروژهی جدید – مثل همیشه – از نوع Windows Form Application باشد.
Integer ها یعنی همه اعداد! البته همه اعداد منظور اعدادی که اعشار نداشته باشند و به اصطلاح به آنها اعداد صحیح میگویند؛ همانند: ۲۵، ۱۰۰، و …
به ToolBox خود مراجعه کنید و یک Button بر روی Form خود قرار دهید و Propertyهای زیر را بر روی button خود اعمال کنید:
Name: btnIntegers
Text: Integers
Location: 110, 20
در ادامه، پس از تطبیق مشخصههای فوق، بر روی button خود دابل-کلیک (Double-Click) کنید تا وارد بخش کدنویسی شوید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
در بخشهای قبلی از آموزش به خاطر دارید که هنگامی که ما متغیری از نوع string تعریف میکردیم، مینوشتیم:
string myText;
شما برای تعریف متغیر از نوع عدد Integer نیز دقیقاً بههمین شکل عمل خواهید کرد؛ تنها بهجای استفاده از نوع string، از نوع int (کوتاهشدهی عبارت integers) استفاده خواهید کرد.
پس برای شروع، در میان براکتهای کد مربوط به button بنویسید int؛ منوی IntelliSense برای شما نمایش دادهخواهدشد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
با فشردن کلید Enter و یا Space،بگذارید که عبارت int نوشته شود و در مقابل آن، نام متغیر خود را انتخاب کنید. ما در این آموزش، این متغیر را myInteger نامگذاری خواهیمکرد. بدین شکل:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
اگر به تصویر ماقبل تصویر فوق نگاه کنید، خواهید دید که جعبه زرد رنگ حاوی متنی به شرح زیر است:
Represents a 32-bit signed integer.
متغیرهای علامتدار integer را اصطلاحاً به آنها Signed میگویند. یعنی اعداد منفی مثل ۱-، ۲۵-، و …
در مقابل اعداد علامتدار، اعداد بیعلامت هستند که به آنها Un-Signed میگویند و فقط حاوی اعداد مثبت هستند.
بخشی که با ۳۲-bit در جملهی بالا به آن اشاره میشود، به رنج شمارههایی اشاره میکند که یک متغیر Integer میتواند در خود ذخیره کنید. متغیر int قابلیت نگاه داری از اعدادی ما بین ۲۱۴۷۴۸۳۶۸۴- تا ۲۱۴۷۴۸۳۶۸۴ هستند.
برای ذخیره در متغیری که در بالا تعریف کردهایم، همانند متغیر string عمل کنید. نام متغیر را در سمت چپ بیاورید، پس از آن علامت مساوی و در مقابل آن مقدار عدد را وارد کنید. بدین شکل:
myInteger = 25;
کدهای شما بهشکل زیر خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
خوب، کار بعدی ما نمایش دادن عدد ذخیره شده در متغیر myInteger میباشد. مثل جلسات قبل مینویسیم:
MessageBox.Show(myInteger);
خوب، برنامه خود را اجرا کنید؛ باید خطای زیر برای شما رخ دهد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
شما باید یک خط آبی رنگ زیر آخرین خط کدتان ببینید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
نشانگر موس را بر روی متغیر داخل پرانتز، یعنی myInteger ببرید، شرح خطا بهصورت زیر است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
اگر کمی انگلیسیتان خوب باشد، متوجه معنی خطا میشوید. این خطا میگوید که «نمیتوان مقدار int را به یک string تبدیل کرد.»
چرا؟! دلیلش این است که متد MessageBox.Show() مقداری را که دریافت میکند، باید فقط و فقط از نوع string باشد؛ برای اینکه مقدار عدد را به یک مقدار string تبدیل کنیم، به روش زیر عمل میکنیم:
در مقابل متغیر عددی خود، یعنی myInteger یک نقطه قرار دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
متد ToString را انتخاب کنید. چونکه ToString یک متد است، پس باید حواستان جمع باشد که در مقابل آن پرانتز باز-و-بسته را قرار دهید. پس خواهید داشت:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
همانطور که از نام این متد مشخص است، کارش این است که یکچیزی را به string تبدیل میکند. چیزی که ما اینجا در حال تبدیل آن هستیم، یک Integer هست!
مجدداً برنامه خود را اجرا کنید؛ بر روی button ای که اضافه کردهاید، یعنی Integers کلیک کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
متغیرهای Float و Double
دو متغیر جدید Float و Double، بر خلاف متغیر Integer، قابلیت ذخیرهسازی اعداد اعشاری را نیز دارند! یعنی اعدادی مثل: ۳.۴۵، ۱۲.۰۰۴، و …
برای تعریف متغیرهای Float و Double نیز دقیقاً به همان شکلی که Integer و String را تعریف میکردیم، تعریف خواهیم کرد. یعنی:
float myFloat;
double myDouble;
تفاوتی که میان این دو وجود دارد، تنها مقداری هست که قابلیت ذخیرهسازی آن را دارند میباشد! مثلاً در float شما میتوانید به اندازه هفت رقم عدد داشته باشید، اما در double، میتوانید حداکثر تا ۱۶ رقم داشته باشید!
Float یک متغیر ۳۲ بیتی میباشد؛ اما متغیر Double یک متغیر ۶۴ بیتی است.
برای ذخیرهی یک عدد اعشاری در یک متغیر float، شکل زیر عمل میکنیم:
myFloat = 0.42F;
دقت کنید که حرف F که در انتهای عدد میآید، به سیشارپ این مفهوم را میرساند که این یک عدد Float است. اگر که این حرف را نگذارید، سیشارپ این عدد را بهعنوان double تلقی خواهد کرد.
تمرین: همانطور که در رابطه با اعداد Integer، یک button اضافه کردیم و اعداد را توسط یک MessageBox نمایش دادیم، سعی کنید که دو button دیگر با نامهای Floats و Doubles اضافه کنید و اعداد Double و Float را در آنها نمایش دهید.
بخش یازدهم
جمع و تفریق
با استفاده از تعریف متغیرهایی که در جلسات پیش فراگرفتید، ابتدا عملیات جمع ریاضی را در سیشارپ انجام خواهیم داد و سپس نحوه تفریق، ضرب و تقسیم را فرا خواهید گرفت.
ابتدا یک پروژه جدید از نوع Windows Application بسازید. با استفاده از ToolBox یک button اضافه کرده و propertyهای زیر را اعمال کنید:
Name: btnAdd
Size: 100, 30
Text: Integer – Add
بر روی button-ای که اضافه کردهاید، Double-Click کرده تا وارد بخش کدنویسی مربوط به این button شوید. با توجه به کدهای زیر، سه متغیر از نوع int تعریف میکنیم:
int firstNumber;
int secondNumber;
int integerAnswer;
با توجه به متغیرهای بالا، احتمالاً متوجه شدهاید که قرار است دو عدد در دو متغیر firstNumber و secondNumber اضافه کنیم و نتیجه جمع را در متغیر integerAnswer ذخیره کنیم.
کدهای شما باید بهشکل زیر شده باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
در قدم بعدی، میبایست در دو متغیرهای firstNumber و secondNumber عددی را ذخیره کنیم. پس بدون آنکه لازم باشد برای شما کدها را بنویسم، خودتان عدد ۱۰ را در متغیر اول و عدد ۳۲ را در متغیر دوم اضافه کنید. (عددها دلخواه هستند!)
کدهای شما بهشکل زیر خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
خوب؛ توسط شمارههایی که در دو متغیر ذخیره شدهاند، میخواهیم که آندو با یکدیگر جمع شوند و پاسخ آنها را در متغیر integerAnswer ذخیره کنیم. خوشبختانه زبان سیشارپ همانند بسیار از زبانهای دیگر، برای جمع اعداد از علامت جمع ‘+’ استفاده میکنیم. برای اینکار، خطکد زیر را اضافه کنید:
integerAnswer = firstNumber + secondNumber;
و میبایست که کد شما اینطور شده باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
برای اینکه از کارکرد صحیح کدتان مطمئن شوید، با استفاده از یک MessageBox، حاصل را بهنمایش درمیآوریم:
MessageBox.Show(integerAnswer.ToString());
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
کد خودتان را اجرا کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
شما برای جمع اعداد، هیچ لزومی برای استفاده از متغیر نیست. شما میتوانید یک متغیر را با یک عدد، دو عدد با هم و یا از چند متغیر با هم استفاده کنید.
برای اینکه حجم آموزش ما بالاتر نرود و همچنین این مطلب مُمِل نباشد، لزومی در توضیح تکتک عملیات ریاضی نمیبینم و فقط این را میبایست بدانید که برای تفریق از علامت ‘-’ استفاده کنید؛ برای ضرب از ‘*’ استفاده کنید؛ و برای تقسیم از ‘/’ استفاده میکنیم.
نکتهی دیگری که میبایست در نظر داشته باشید، ترتیب عملیات ریاضی است. در ریاضی حق تقدم عملیات ابتدا با ضرب و تقسیم، پس از آن جمع و تفریق است. پس هنگامی که کدهای خود را مینویسید حتماً به این مورد دقت بفرمایید …
تمرین: نتیجه عملیات ریاضی زیر را با استفاده از سیشارپ (در MessageBox یا هر شیء دیگر) مشاهده و یادداشت کنید و نتیجه حاصل شده را با استفاده از نکته فوق مقایسه کنید:
A) ۲۳*۲۴/۲
B) ۲۳*(۲۴/۲)
C) ۲۳*۲/۲+۴
D) ۲۳*۲/(۲+۴)
بخش دوازدهم
نحوه دریافت عدد از Text Box و ذخیره آن در متغیر
ذخیره محتوای داخل یک Text Box در یک متغیر String بهراحتی امکانپذیر بود. فرض کنید که یک Text Box با نام txtBox1 و یک متغیر از نوع String با نام strText داشته باشیم. برای ذخیره محتوای داخل Text Box در متغیر کد آن بدین شکل بود:
strText = txtBox1.Text;
اما در رابطه با عدد چطور؟ اولاً یک شماره هم میتواند عدد باشد، هم میتواند یک متن. مثلاً داخل جعبه متن میتوانید بنویسید ۲۳ و در در داخل متغیر اینگونه جمع خواهد شد:
strText = “۲۳”;
اما اینگونه ذخیره عدد بدرد ما نخواهد خورد! زیرا در عملیات ریاضی جمع دو عدد که به شکل string باشند امکانپذیر نیست و باید دو عدد از نوع int، float یا … باشد.
پس ابتدا برای شروع یک پروژه جدید از نوع Windows Application بسازید. یک button و یک Text Box قرار دهید و Property های Text Box به شکل ذیل باشد:
Name: tbFirstName
Size: 50, 20
Location: 40, 30
Text: 10
و Property های button به شکل زیر باشد:
Name: btnAnswer
Size: 75, 25
Location: 90, 90
Text: Answer
شکل فرم شما اینطور خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
کاری که میخواهیم انجام دهیم این است که عدد ۱۰ را به شکل int دریافت کنیم و در یک متغیر از نوع int ذخیره کنیم. چون قصد داریم این اتفاقات با کلیک بر روی button انجام شوند، پس دوبار بر روی Button کلیک کنید و وارد بخش کدنویسی شوید. دو متغیر زیر را تعریف کنید:
int firstTextBoxNumber;
int answer;
همانند تصویر زیر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
برای اینکه محتوای وارد شده در TextBox را دریافت کنیم، کد زیر را مثل همیشه وارد کنید:
firstTextBoxNumber = tbFirstNumber.Text;
این کد میگوید: یک Text Box با نام tbFirstNumber را پیدا کن، وارد property با نام Text آن شو، وقتی که به Text آن دسترسی پیدا کردی، محتوای آن را وارد متغیر firstTextBoxNumber کن.
برای نمایش عدد وارد شده در Text Box در یک Message Box، کد زیر را وارد کنید:
MessageBox.Show(firstTextBoxNumber.ToString());
کدتان را اجرا کنید … سیشارپ به شما اجازه اجرا نخواهد داد و خطای زیر را خواهید دید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
اگر متوجه شده باشید، این خطا میگوید که شما نمیتوانید یک مقدار string را به یک مقدار int تبدیل کنید! اگر بخاطر داشته باشید ما قبلاً گفتیم که مقداری که وارد یک Text Box میشود، هرطور آن را وارد کنید (چه عدد خالی، چه متن خالی و چه مختلط) آخرسر یک مقدار String خواهد بود و سیشارپ این قابلیت را ندارد که یک مقدار string را به int تبدیل کند.
راه حل این مشکل، استفاده از یک شیء به نام Parse است. خدا را شکر این شیء، هیچ چیز عجیبی نیست و هیچ سختیای جز نوشتن کلمه Parse برای برنامهنویس ندارد! اکنون چون ما میخواهیم که از یک مقدار خاص از هر نوعی، به یک نوع معلومی (در اینجا میخواهیم به int) تبدیل کنیم، ما باید از int.Parse استفاده کنیم. پس کدتان را بهشکل زیر تغییر دهید:
firstTextBoxNumber = int.Parse(tbFirstNumber.Text);
کدتان را اجرا کنید و شاهد نتیجه درست آن باشید!
این نکته را دقت کنید که حتی میتوانید یک string مستقیم که حاوی عدد است را به int تبدیل کنید؛ مثلاً به کد زیر دقت کنید:
int aRandomNumber;
aRandomNumber = int.Parse(“۱۰”);
این کد بدین شکل عمل میکند که شماره ۱۰ از نوع string را دریافت میکند و به عدد ۱۰ تبدیل میکند.
یک Text Box دیگر اضافه کنید و Property های آن را بهشکل زیر تنظیم کنید:
Name: tbSecondNumber
Size: 50, 20
Location: 165, 35
Text: 5
فرم شما بدیل شکل خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
مجدداً با دابل-کلیک بر روی button، وارد بخش کدنویسی شوید. یک متغیر دیگر از نوع int با نام secondTextBoxNumber تعریف کنید. برای ذخیره سازی عدد از Text Box دوم، کد زیر را بنویسید:
secondTextBoxNumber = int.Parse(tbSecondNumber.Text);
اکنون بیایید با هم جمع دو متغیری که عددهای اول و دوم را از Text Box های اول و دوم را دریافت میکنند در متغیر answer ذخیره کنیم:
answer = firstTextBoxNumber + secondTextBoxNumber;
با استفاده از یک MessageBox، مقدار answer را نمایش میدهیم:
MessageBox.Show(answer.ToString());
تمامی کدها باید به شکل زیر نوشته شدهباشند:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
نرمافزار خود را اجرا کنید؛ شما باید جمع دو عدد وارد شده را در یک Message Box مشاهده کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
تمرینهای زیر را سعی کنید انجام دهید تا در جلسه بعد که شروع یک پروژه جدی (ماشینحساب) خواهد بود، آماده باشید:
تمرین: سعی کنید Text Box های دیگری را تعریف کرده و با استفاده از آنها، عملیات حسابی دیگری همانند تفریق، ضرب، تقسیم و مخلوطی از آنها را با هم انجام دهید
بخش سیزدهم
طراحی ظاهری و شروع
اولین قدم در انجام پروژه ماشینحساب، طراحی ظاهری آن بهشکلی که به سلیقه شما سازگار باشد، خواهد بود. من در اینجا بهصورت یک ظاهر بسیار بسیار ساده آموزش خودم را شروع میکنم.
نسخهی شماره ۱ نرمافزار ماشینحساب شما، بهشکل زیر خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
همانطور که در تصویر فوق مشاهده میکنید، شما یک Text Boxجهت نمایش اعداد و ارقام (هنگام نوشتن و دریافت نتیجه)، button هایی برای نمایش اعداد از ۰ تا ۹، یک ممیز (point) که در اعداد انگلیسی بهصورت نقطه میباشد و دو button برای جمع و مساوی را اضافه خواهید کرد.
خوب، اولین کار باید پروژهی خود را شروع کنید. از منوی File، وارد بخش New Project شوید و پروژهی خود را بهصورت Windows Application بسازید. برای Form ایجاد شده، Property های زیر را تنظیم کنید:
Size: 440, 487
Text: Calculator
برای اینکه به فرم خود کمی رنگ اضافه کرده باشیم و آن را از حالت پیشفرض خارج کنیم، شما باید Property ای با نام BackColor را تغییر دهید. به تصویر زیر دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
من رنگ مورد نظر خودم را انتخاب کردهام؛ شما میتوانید رنگ دلخواه و سازگار با سلیقه خودتان را انتخاب کنید، پس راحت باشید!
اکنون، یک Text Box اضافه کنید و تنظیمات زیر را بر روی آن اعمال کنید:
Name: txtDisplay
Location: 66, 52
Size: 200, 26
TextAlign: Right
الان وقت اضافه کردن button ها که اعداد ۰ تا ۹ را برای شما نمایش دهند. شما برای اینکار به ۱۰ button نیاز خواهید داشت. اولین button را اضافه کنید و تنظیمات زیر را برای button مشخص شده اعمال کنید:
Name: btnZero
Font: Microsoft Sans Serif, Bold, 12
Location: 49, 40
Text: 0
این button برای نمایش عدد ۰ بود. Button بعدی را جهت نمایش عدد ۱ اضافه کنید و تنظیمات زیر را بر روی آن اعمال کنید:
Name: btnOne
Font: Micorosft Sans Serif, Bold, 12
Location: 49, 40
Text: 1
یکی از راههای آسان برای اضافه کردن چندین button، استفاده از Copy/Past میباشد. برای اینکار، button شماره ۱ را انتخاب کنید و بر روی آن Right Click کنید و Copy را انتخاب کنید. الان نشانگر موس را روی یک جای خالی از فرم خود قرار دهید و مجدداً Right Click کنید و Past را برگزینید. شما فقط کافیست که دو مشخصه را تغییر دهید؛ یکی Name را به btnTwo تغییر دهید و دیگری مشخصه Text آن را به ۲ تغییر دهید.
برای Button ممیز نیز مشخصه Name آن را به btnPoint تغییر دهید و مشخصه Text را به یک نقطه تغییر دهید.
فقط ۳ button دیگر مانده؛ این سهتا را هم اضافه کنید و به ترتیب Property های زیر را تغییر دهید:
Name: btnPlus
Font: Microsoft Sans Serif, Bold, 12
Location: 324, 159
Size: 49, 40
Text: +
Name: btnEquals
Font: Microsoft Sans Serif, Bold, 12
Location: 324, 230
Size: 49, 40
Text: =
Name: btnClear
Font: Microsoft Sans Serif, Bold, 12
Location: 324, 305
Size: 49, 40
Text: Clear
تا اینجا، ما کار طراحی ظاهری نرمافزار خودمان را تمام کردهایم. پروژهی خود را ذخیره کنید (قبل از اینکه برق بره!) تا کدنویسی آن را شروع کنیم.
شروع کدنویسی ماشین حساب
قبل از اینکه کار خودمان را شروع کنیم، اجازه دهید که یک نقشه کلی از پروژهی خودمان داشته باشیم و مراحل کار را یکبهیک با همدیگر بررسی کنیم.
شخص بر روی شمارهها کلیک میکند تا اولین رقم مورد نظر خود برای انجام عمل جمع را مشخص سازد.
اولین رقمی که کاربر ایجاد میکند، باید در Text Box نمایش داده شود.
بر روی کلید + کلیک میکند تا به سیشارپ این را بگوید که میخواهد عمل جمع را انجام دهد.
بعد از کلیک بر روی +، باید Text Box پاک شود تا برای رقم دوم آماده شود.
دوباره با استفاده از کلیدهای ۰ تا ۹، رقم دوم خود را مشخص میکند.
بر روی کلید مساوی کلیک میکند تا نتیجه در Text Box ظاهر شود.
خوب با اولین مرحله شروع میکنیم.
بر روی button شماره ۱ دابل-کلیک کنید تا اینکه وارد کدنویسی شوید. ما در این مرحله، میخواهیم برای تمامی buttonها اینکار را انجام دهید که وقتی یکی از button های اعداد کلیک بخورند، عدد آنها در Text Box نمایش داده شود. پس برای button با نام btnOne، کد زیر را اضافه میکنیم:
txtDisplay.Text = btnOne.Text;
این کد میگوید: «مقدار Text مربوط به Text Box با نام txtDisplay را به مقدار Text برای button ای با نام btnOne (که ۱ است) تغییر بده.» به یاد داشته باشید که هرچیزی که در سمت راست مساوی در کدنویسی است، دقیقاً برابر مقداری خواهد بود که در سمت چپ آن خواهد بود.
برنامهی خود را اجرا کنید؛ بر روی شماره ۱ کلیک کنید. خواهید دید که شماره ۱ در Text Box شما نمایش داده خواهد شد. چند بار دیگر بر روی شماره ۱ کلیک کنید؛ متوجه اشکال برنامه شدید؟ شما احتمالاً فکر میکردید که مثلاً اگر دوبار button شماره ۱ را کلیک کنید، باید عدد ۱۱ را نمایش دهد. چرا؟
دلیل ایراد نرمافزار این است که شما به سیشارپ نگفته بودید که مقداری که قبلاً در Text Box را نگهدار و مقدار جدید را در کنارش قرار بده! پس دوباره با دابل-کلیک کردن بر روی btnOne، وارد بخش کد شوید و کد قبلی خود را به کد زیر تغییر دهید:
txtDisplay.Text = txtDisplay.Text + btnOne.Text;
در این کد، علامت جمع نمایانگر عمل جمع نیست؛ بلکه چونکه هر دو متغیر از نوع String هستند، پس این دو را در کنار هم میآورد و به اصطلاح، یکدیگر را به هم الصاق میکند.
یکبار دیگر برنامه خود را اجرا کنید و عملیات فوق را امتحان کنید، خواهید دید که اینبار نمایش عددهای ۱، ۱۱، ۱۱۱، و … بدون مشکل خواهد بود.
الان به برنامه خود بازگردید و اینبار بر روی btnTwo دابل-کلیک کنید و کد زیر را اضافه کنید:
txtDisplay.Text = txtDisplay.Text + btnTwo.Text;
تنها تفاوتی که کد بالا با کد قبلی دارد این هست که نام button شما از btnOne به btnTwo تغییر پیدا کرد. تمامی اینکارها را برای تمامی اعداد (از ۲ تا ۹) انجام دهید. در نهایت، باید کدهای شما به شکل زیر باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
یکبار دیگر جهت اطمینان، برنامه خود را اجرا کنید و از صحت کارکرد تمامی button ها مطمئن شوید. پس از اطمینان حاصل کردن از تمامی button ها به محیط برنامه خود بازگردید و بر روی button مربوط به Clear دابل-کلیک کنید و کد زیر را اضافه کنید:
txtDisplay.Clear();
بعد از نام Text Box، شما یک نقطه قرار دادید و کلمه Clear را نوشتید و در مقابل آن دو پرانتز قرار دادید؛ این بدین معنیاست که Clear یک method است که مقدار داخل txtDisplay را خالی میکند.
مجدداً برنامه خود را اجرا کنید و پس از وارد کردن چندین عدد، button پاککردن را امتحان کنید و از صحت کارکرد آن مطمئن شوید.
الان که کار نمایش اعداد ما به پایان رسید، وقت آن است که عدد وارد شده را در یک متغیر ذخیره کنیم؛ پس از آنکه کلید مساوی کلیک خورد، عمل جمع انجام شود. (توجه کنید که عمل جمع با کلیک کردن بر روی button مربوط به مساوی باید انجام شود؛ نه خود کلید جمع!)
Button جمع، باید عدد وارد شده را از Text Box دریافت کند و چونکه این مقدار بصورت String دریافت میشود، باید آن را به عدد تبدیل کرد. سپس این عدد را در یک متغیر عددی ذخیره میکنیم. در نهایت باید در انتهای کد خود، یک خط کد دیگری اضافه کنیم که مقدار داخل Text Box را خالی کند تا آماده دریافت رقم بعدی باشد.
اولین رقم وارد شده میبایست که در یک متغیر ذخیره شود. ما برای اینکار از متغیر نوع Double استفاده خواهیم کرد تا ما بتوانیم مقدار بزرگی را از اعداد پشتیبانی کنیم. (همچنان بتوانیم از ارقام دارای ممیز نیز پشتیبانی کنیم.)
از آنجایی که تمامی button های داخل فرم میبایست که متغیر را ببینند، میبایست که این متغیر خارج از هرگونه کدی مربوط به button تعریف شود. یعنی تعریف این متغیر در چنین جایی کاملاً اشتباه است:
private void btnOne_Click(object sender, EventArgs e)
{
Double total1 = 0;
}
اگر شما چنین کاری را بکنید، تنها btnOne خواهد توانست که متغیر total1 را بشناسد؛ ولی دیگر اشیاء دسترسی به total1 نخواهند داشت و برای آنها تعریف نشده خواهد ماند. روش درست تعریف متغیری که میبایست اصطلاحاً بهصورت Global تعریف شود، بهشکل زیر است:
double total1 = 0;
private void btnPlus_Click(object sender, EventArgs e)
{
}
کدی که باید برای خود btnPlus تعریف شود، به شکل زیر است: (کدهای آبی رنگ)
double total1 = 0;
private void btnPlus_Click(object sender, EventArgs e)
{
total1 = total1 + double.Parse(txtDisplay.Text);
txtDisplay.Clear();
}
تنها کاری که در کدهای بالا انجام میدهیم این است که مقدار Text را از txtDisplay میگیرم، آن را به double تغییر میدهیم و در نهایت در متغیر total1 ذخیره میکنیم. دقت کنیم که ما مجدداً این خط کد را نوشتیم:
total1 = total1 +
درست همانند کاری که در رابطه با نمایش اعداد کردیم، در اینجا هم انجام میدهیم. با این تفاوت چونکه هر دو مقدار از نوع عدد هستند، متغیر total1 مقدار قبلی خود را حفظ میکند و توسط علامت +، مقدار جدید را به خود اضافه میکند.
یکی از راههای متداول در سیشارپ، چیزی شبیه به کد زیر است:
Total1 += double.Parse(txtDisplay.Text);
این کد، دقیقاً همان کاری را میکند که کد زیر انجام میدهد:
total1 = total1 + double.Parse(txtDisplay.Text);
پس آنکه کد مربوط به button جمع را نوشتهایم، به سراع کدهای مربوط به Button مساوی میپردازیم.
Button مساوی، محلیاست که عمل جمع باید در آن اتفاق بیفتد؛ اینجاست که ما واقعاً عمل جمع را انجام خواهید داد. برای اینکه پاسخ نهایی را جایی ذخیره کنیم، ما یک متغیر دیگر به شکل زیر اضافه خواهیم کرد:
double total1 = 0;
double total2 = 0;
private void btnPlus_Click(object sender, EventArgs e)
{
total1 = total1 + double.Parse(txtDisplay.Text);
txtDisplay.Clear();
}
پس ما یک متغیر با نام total2 از نوع double تعریف کردیم.
به فرم خود برگردید و بر روی button مساوی دابل-کلیک کنید؛ کدهای زیر را اضافه کنید:
total2 = total1 + double.Parse( txtDisplay.Text );
txtDisplay.Text = total2.ToString( );
total1 = 0;
فکر نمیکنم نیازی به توضیح دادن کدهای بالا باشد! همه چیز کاملاً واضح است!
الان وقت آن است که برنامه خود را اجرا کنید و چند عمل جمع را انجام دهید و از صحت آن مطمئن شوید.
تمرین: ما هنوز کدی را برای ممیز ننوشتهایم. اینکار را به عهده شما خواهیم گذاشت! (راهنمایی: شما تنها و تنها باید ۱ خط کد اضافه کنید!)
بخش چهاردهم
دستورات شرطی IF
میتوان دستورات شرطی را در کلمه IF خلاصه نمود! دستورات شرطی یکی از مهمترین و پرکاربردترین دستورات در بیشتر زبانهای برنامهنویسی میباشد؛ بطوریکه که شما تقریباً هیچ برنامهی کاربردیای را بدون دستور IF نمیتوانید طراحی و برنامهنویسی کنید. اصطلاح انگلیسی این دستورات را Conditional Logic میگویند. پس حتماً آن را بخاطر بسپارید.
برای شروع، ابتدا اجازه دهید که یک مثالی بزنیم. پروژهی ماشینحساب را که یادتان هست؟ ماشینحساب ما تنها یک عمل ریاضی (جمع) را انجام میداد. در آینده ما عملیات جدیدتری را اضافه خواهیم کرد. در حال حاضر، شما نمیتوانید ماشینحساب را با بیشتر از یک عمل ریاضی تکمیل کنید؛ چراکه نمیدانید که کاربر بر روی کدام button (جمع یا تفریق) کلیک کرده است! شما باید قادر باشید کدی را بنویسید که دستورات زیر را اجرا کند:
۱. اگر کلید جمع کلیک خورد، جمع بزن!
۲. اگر کلید تفریق کلیک خورد، کم کن!
شما میتوانید جملات بالا را هم بهنحوی به شکل زیر بگویید:
۱. آیا کلید جمع کلیک خورد؟ بله، یا خیر؟
۲. آیا کلید تفریق کلیک خورد؟ بله، یا خیر؟
در هرصورت، جواب هر سوالی یا بله خواهد بود یا خیر. Button مربوطه یا کلیک خورده یا نخوده! (دو حالت بیشتر وجود ندارد)
برای پاسخ به سوالات بالا، ما باید با دستور IF کار کنیم. دستور IF اصولاً به شکل زیر استفاده میشود:
if ()
{
…
}
پس شما ابتدا با کلمه if (حروف کوچک) شروع میکنید و یک جفت پرانتز را روبروی آن قرار میدهید. در بین این جفت پرانتز، شما باید سوال خودتان را بنویسید تا سیشارپ درستی یا عدمدرستی آن را چک کنید. در بین دو براکتی که برای دستور if نوشته میشود، باید عملیاتی را که میخواهید در صورت صحیح بودن شرط داخل پرانتز اجرا شود را مینویسید. واضحتر بگویم؛ اگر که شرط داخل if درست باشد، سیشارپ به داخل دستور if میرود و کدهای نوشتهشده را اجرا میکند؛ اگر شرط داخل if غلط باشد، سیشارپ کدهای داخل if را نادیده میگیرد و برنامه به روال عادی خود اجرا میشود.
مثلاً برای چک کردن اینکه آیا Buttonای کلیک خورد یا نه، کدی شبیه زیر را باید داشته باشیم:
bool buttonClicked = true;
if (buttonClicked == true)
{
MessageBox.Show(“The button was clicked!”)
}
به اولین خط از کد بالا دقت کنید:
bool buttonClicked = true;
در این کد ما یک متغیری را با نام buttonClicked تعریف کردهایم. اما bool چیست؟ Bool یک نوع دیگری از متغیرهاست که اینجا اولین باریاست که شما با آن مواجه میشوید. کلمه bool کوتاه شدهی کلمه Boolean میباشد. شما از bool برای مواقعی استفاده میکنید که True (صحیح) یا False (غلط) بودن را میخواهید بررسی میکنید. این نوع متغیر، بر خلاف سایر متغیرهای پیشین که با آنها آشنا شدید، فقط و فقط میتوانید مقدار True یا False را داشته باشد. در ادامهی کد بالا، کد زیر را داریم:
if (buttonClicked == true)
{
MessageBox.Show(“The button was clicked!”)
}
اگر در داخل پرانتز دقت کنید، ما از علامت مساوی را دوبار استفاده کردیم (==). از این علامت معمولاً وقتی که از دستور if استفاده میکنید، زیاد بهکارتان خواهد آمد. استفاده از دو علامت مساوی در کنار هم، به این معنی هست که «مقداری برابر با … را دارد؟». اگر میخواهید که کد داخل پرانتز را ترجمه کنیم، اینطور باید بگوییم: «اگر که متغیر buttonClicked دارای ارزشی برابر با True باشد …»
اگر شما یکی از علامتهای مساوی را فراموش کنید و یک عدد مساوی را قرار دهید، آنگاه دستور شما به دستور مقدار دهی تبدیل میشود. یعنی دستور (buttonClicked = True) این را میگوید که مقدار buttonClicked را برابر با True قرار بده، اما (buttonClicked == True) در حال بررسی وجود مقدار True در متغیر buttonClicked میباشد.
مابین براکتهای دستور If، ما یک خط کد بسیار سادهای را داریم. یک MessageBox تعریف کردهایم که اگر buttonClicked مقدارش True باشد، این Message Box نمایش داده شود. پس بیاید با هم این کار را امتحان کنیم.
یک پروژه جدید از نوع Windows Application بسازید و یک button به فرم خود اضافه کنید. Text آن را به IF Statement تغییر دهید. بر روی آن دابل-کلیک کنید و کدهای زیر را طبق تصویر نشانداده شده، اضافه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
برنامه خود را اجرا کنید و بر روی Button کلیک کنید؛ باید Message Box برای شما نشان داده شود. حال از برنامهی اجرا شده خارج شوید و کد زیر را :
bool buttonClicked = True;
به کد زیر تبدیل کنید:
bool buttonClicked = False;
الان برنامهی خود را یکبار دیگر اجرا کنید و بر روی Button کلیک کنید؛ اتفاقی نخواهد افتاد!
اجرا نشدن Message Box به این دلیل است که ما دستور شرطی خودمان را طوری تعریف کردیم که اگر:
buttonClicked == True
آنگاه دستورات اجرا شوند. شما اگر کدهای خودتان را به کد زیر تغییر دهید:
bool buttonClicked = False;
if (buttonClicked == False)
{
MessageBox.Show(“buttonClicked has a value of False.”);
}
و برنامه را یکبار دیگر اجرا کنید، خواهید دید که پنجره MessageBox نمایش داده خواهد شد. درست است که buttonClicked مقدار False را دارد، اما ما دقیقاً در دستور If خودمان، همین مورد را میخواستیم امتحان کنیم؛ که اگر buttonClicked مقداری برابر با False داشته باشد، آنگاه درست است.
بخش پانزدهم
دستورات شرطی Else
درستور Else، یکی دیگر از دستورات شرطی میباشد. البته دقت داشته باشید که دستور Else به تنهایی قابل استفاده نیست و باید همراه با دستور شرطی IF استفاده شود. اگر کمی با زبان انگلیسی آشنایی داشته باشید، میدانید که کلمه Else، معانیای همچون: درغیراینصورت، دیگر، و … را دارد. حال به جملهی انگلیسی زیر دقت کنید (بسیار ساده نوشته شده) و ترجمه فارسی آن را نیز مدنظر قرار دهید:
If Y is greater than or equal to 0 (Y >= 0), then Y is positive. Else, Y is negative.
ترجمه فارسی: اگر Y بزرگتر از یا مساوی با صفر باشد، آنگاه Y مثبت است. درغیر اینصورت، Y منفی است.
همانطور که در جملهی فوق ملاحظه نمودهاید، زیر سه کلمه IF، THEN و ELSE خط کشیده شده است. کلمهی IF استفاده شده در جمله بالا، همان IF ای است که در کد استفاده میکنیم تا معنی «اگر» را به ما برساند. کلمه THEN، نشاندهندهی دستورات داخل بدنهی IF میباشد. اما ELSE که به معنی «درغیر اینصورت» است، بدین معنیاست که اگر شرط ما (IF) غلط باشد، پس حتماً بعد از ELSE درست است!
در واقع شما با استفاده از دستورات IF و ELSE، میتوانید این را به سیشارپ بیان کنید که اگر شرط IF غلط باشد، چه اتفاقی باید بیفتد. نحوه استفاده از کد این دستورات در کنار هم، بهشکل زیر است:
if (buttonClicked == true)
{
…
}
else
{
…
}
با توجه به پروژهی ایجاد شده در جلسه ۱۴، کدهایتان را به شکل زیر تغییر دهید:
if (buttonClicked == true)
{
MessageBox.Show(“buttonClicked has a value of true.”);
}
else
{
MessageBox.Show(“buttonClicked has a value of false.”);
}
کد بالا به صورت زیر توسط سیشارپ تفسیر میشود:
«اگر که True بودن مقدار متغیر buttonClicked درست باشد، وارد بدنهی if شو و دستورات داخل آن را انجام بده؛ درغیر اینصورت، اگر چنین چیزی درست نبود، کار دیگری را انجام بده. (که وارد بدنه else میشود.)»
الان برنامهی خود را اجرا کنید؛ خواهید دید که MessageBox برای شما نمایان میشود. به محیط کد خود بازگردید؛ وضعیت متغیر buttonClicked خود را تغییر دهید. یعنی اگر قبلاً True بود، به False تغییر دهید؛ اگر False بود به True تبدیل کنید.
دوباره برنامه خود را اجرا کنید؛ خواهید دید که اینبار هم MessageBox برای شما نمایان میشود، اما محتوای آن سازگار با کدهایتان تغییر کرد.
اکنون که با Else به طور کامل آشنا شدید، باید بدانید که ما یک دستور شرطی دیگری را نیز داریم با نام Else If. در واقع Else If یک نوع If هست اما باز هم به تنهایی کاربرد ندارد و فقط هنگامی که از If استفاده میشود، باید از آن استفاده نمود. اول به جملهی زیر دقت کنید:
If X is greater than 0 (X > 0), then X is positive. Else, if X is equal to 0 (X = 0), then X is Zero. Else, X is negative. (X < 0)
ترجمه فارسی: اگر X بزرگتر از صفر باشد، آنگاه X مثبت است. درغیر اینصورت اگر X برابر با صفر باشد، آنگاه X مساوی صفر است. درغیر اینصورت، X منفی است.
فکر میکنم نحوه و موقعیت استفاده از Else If را متوجه شده باشید. ما با استفاده از این Else If، در جلسه بعد ماشینحساب خودمان را تکمیل خواهیم کرد. پس اگر هنوز با Else If مشکل دارید، نگران نباشید! در جلسه بعدی بصورت کاربردی نحوه استفاده از آن را متوجه خواهید شد.
بخش شانزدهم
تکمیل پروژهی ماشینحساب
اول از همه، پروژهی ماشینحسابی که قبلاً با هم آماده کردیم بودیم را فراخوانی کنید. برای فراخوانی پروژهیهای ایجاد شده، شما میتوانید که با استفاده از گزینه Open Project از منوی File، به محل ذخیرهسازی پروژهی خود بروید و به دنبال فایلی با پسوند «.sln» باشید.
یک button جدید به ماشینحساب خود اضافه کنید (جهت انجام عمل تفریق) و Property های زیر را برای آن اعمال کنید:
Name: btnMinus
Font: Microsoft Sans Serif, 16, Bold
Location: آن را در سمت عمل جمع قرار دهید
Size: 49, 40
Text: -
بر روی button تفریق خود دابل-کلیک کنید تا وارد بخش کدنویسی شوید. دو متغیر از نوع Bool به شکل زیر خارج از کدهای مربوط به button تفریق قرار دهید؛ درست بالای سر آن! به شکل زیر هم توجه کنید تا بهتر متوجه منظور من شوید:
bool plusButtonClicked = false;
bool minusButtonClicked = false;
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
اکنون کدهای زیر را در داخل کدهای مربوط به button تفریق خود قرار دهید.
total1 = total1 + double.Parse(txtDisplay.Text);
txtDisplay.Clear();
plusButtonClicked = false;
minusButtonClicked = true;
کدهایتان باید شکلی شبیه به تصویر زیر داشته باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
تنها کاری که ما در این پروژه اضافه کردیم تا بتوانیم به خواستهی خودمان برسیم، اضافه کردن دو متغیر از نوع Boolean میباشد. همانطور که میبینید، هنگامی که این دو متغیر را تعریف کردیم، هر دو را حاوی مقدار False (غلط) به سیشارپ معرفی نمودیم. همچنین آنها را بیرون از یک button ایجاد کردیم تا تمامی button های مربوط به عملیات ریاضی ما بتوانند به خود متغیرها و مقادیر آنها دسترسی پیدا کنند. دلیل اینکه هر دو را false کردیم آن است که اول شروع برنامه، نه button جمع کلیک خورده است و نه button تفریق؛ پس هر دو false هستند.
وقتی که مثلاً button تفریق کلیک بخورد، ما اینکار را خواهیم کرد: متغیر minusButtonClicked را True میکنیم و plusButtonClicked را False. شبیه همینکار را نیز برای button مربوط به جمع نیز انجام خواهیم داد.
اکنون برای کدهای مربوط به button جمع خود نیز، کدهای زیر را طبق تصویر اضافه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
اکنون، کاری که باید انجام دهیم، اصلاح بخش button مساوی است. پس به آن بخش مراجعه کنید و کدهای داخل آن را به کدهایی همانند تصویر زیر تغییر دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
فکر میکنم همه چیز در رابطه با کدها واضح است و نیازی به توضیح دادن آنها نمیبینم.
الان ماشینحساب خود را اجرا کنید و آن را تست کنید. اگر که تمامی مراحل فوق را درست انجام داده باشید، خواهید دید که تمامی محاسبات شما درست جواب داده خواهند شد.
تمرین: پروژهی ماشینحسابتان را با اضافه کردن دو عمل اصلی دیگر، یعنی ضرب و تقسیم، کامل کنید. برای این تمرین، شما تنها دو متغیر دیگر از نوع Boolean در کنار متغیرهای Boolean قبلی تعریف خواهید کرد و با اضافه کردن ELSE IF های اضافی، خواهید توانست که این ماشینحساب را تکمیل کنید. مابقی کارها نیز فکر میکنم تماماً واضح باشد و نیازی به راهنمایی نیست. به تصویر زیر که کدهای مربوط به عمل تفریق را پس از اضافه کردن دو عمل ضرب و تقسیم در کنار جمع و تفریق است، دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
بخش هفدهم
دستور Switch – Case
یکی از راههای راحتتری که میتوانیم با آن ماشینحساب خودمان را تکمیل کنیم، استفاده از عبارت «Switch» بهجای Else If های متوالی بود. دستور Switch به شما این قابلیت را میدهد که بتوانید چندین حالت را برای یک شیء چک کنیم و برای هر کدام یک دستور جداگانهای تعریف کنیم. (دقیقاً شبیه Else If های متوالی است.( ساختمان و ساختار دستور Switch به شکل زیر است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعد از کلمه Switch، شما یک جفت پرانتز خواهید گذاشت. در داخل پرانتز، شما چیزی را که میخواهید مقدارش را چک کنید را مینویسید. شما معمولاً مقادیر داخل یک متغیر را چک خواهید کرد. سپس شما یک جفت براکت قرار خواهید داد تا محدودهی مربوط به کدهای switch را مشخص کنید. در داخل Switch شما بهازای هر یک مقدار ممکنی که متغیر شما ممکن است داشته باشد، یک Case (=حالت) داشته باشید. پس از هر Case، شما کدهایی را مینویسید که اگر این حالت True باشد، (یعنی متغیر شما یکی از مقادیر مورد انتظار شما را داشته باشد) آن کد اجرا شود؛ و مابقی کدها بهصورت خودکار نادیده گرفته میشوند. نادیده گرفته شدن مابقی کدها توسط دستور Break که در آخر هر Case قرار دارد اتفاق میافتد. Break به سیشارپ میگوید که از این محدوده خارج شو! پس اگر Break را نگذارید، در عمل با مشکل مواجه خواهید شد.
پس ما هم با استفاده از این دستور، ماشینحساب خود را کدنویسی مجدد میکنیم.
ما در ماشینحساب، چهار متغیر از نوع Bool تعریف کردیم که بتوانیم با استفاده از مقادیر True یا False آنها، عمل ریاضی انتخاب شده را متوجه شویم و نتیجهی صحیحی را به کاربر ارائه دهیم. به جای اینکار، ما میتوانیم با تعریف یک متغیر از نوع String (مثلاً متغیر theOperator)، کاراکتر موجود در buttonهای مربوط به عملیات ریاضی را (یعنی کاراکتر جمع “+”، کاراکتر تفریق “-“، و …) هنگام انتخاب آن عمل ریاضی، در این متغیر ذخیره کنیم. چیزی شبیه کد زیر:
string theOperator;
private void btnPlus_Click(object sender, EventArgs e)
{
total1 = total1 + double.Parse(txtDisplay.Text);
txtDisplay.Clear();
theOperator = “+”;
}
ما با استفاده از کد بالا ( که در button مربوط به عمل جمع نوشته شده؛ بهجز تعریف متغیر که در خارج از همه تعریف شده است) توانستیم که کاری کنیم که کاربر با انتخاب عمل جمع، کاراکتر + در متغیر theOperator ذخیره شود. همین کارها را میتوانیم برای تمامی عملیات ریاضی خود انجام دهیم و فقط مقدار ذخیره شده در theOperator را تغییر دهیم.
حالا با استفاده از دستور Switch – Case که در button مربوط به عمل مساوی قرار میدهیم، تعیین میکنیم که کاربر در هنگامی که کلید مساوی را کلیک کند، کدام عمل ریاضی را انتخاب کرده بود. به کد زیر دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در بین پرانتزهای Switch، متغیر theOperator را قرار دهیم؛ چونکه میخواهیم مقدار ذخیره شده در این متغیر (حالتهایی که ما میدانیم در آن ذخیره میشود) را بررسی کنیم. تنها حالاتی که میتواند متغیر theOperator در خود ذخیره کند، علامتهای جمع، تفریق، ضرب یا تقسیم خواهد بود. پس برای اولین حالت خود (یعنی جمع) یک Case مینویسیم و پس آن یک جفت Double-Quotes قرار میدهیم و بین آن اولین حالت ممکن (یعنی کاراکتر حمع) را قرار میدهیم. سپس قبل از هر Break مخصوص به آن Case، عمل مورد انتظار ما، که در اینجا انجام عملیات جمع، تفریق، ضرب و یا تقسیم است را مینویسیم.
اگر در کد بالا دقت کنید، علاوه بر چهار حالت ممکن که برای هر کدام یک Case تعریف کردهایم، یک حالت Default وجود دارد. معمولاً بهتر است که در هنگام استفاده از Switch – Case، از Default نیز استفاده کنید. Default در واقع چیزی شبیه به دستور ELSE است؛ یعنی اگر هیچکدام از حالتهای بالا پیش نیامد (یعنی کاربر میخواست در برنامه خطا ایجاد کند و بدون اینکه کلیدهای حمع، تفریق، ضرب یا تقسیم را کلیک نزده و مستقیماً بر روی مساوی کلیک کرده) یک اتفاق خاصی بیفتد. مثلاً شما در چنین حالتی میتوانید یک MessageBox تعریف کنید و به کاربر بگویید که در هنگام کار با ماشینحساب دقت بیشتر کند.
فعلاً این جلسه به همینجا خاتمه داده میشود. فقط دقت کنید که Switch یکی از دستورات خیلی منظم و مفید در سیشارپ (و سایر زبانهای شبیه مثل C، C++ و …) است. هنگامی که حالتهای مختلفی برایتان پیش میآید، به جای استفاده از IF، ELSE IF های متوالی و ELSE، میتوانید از دستور Switch – Case استفاده کنید.
بخش هجدهم
Conditional Operators
شما تاکنون با یک Conditional Operator (عملگر مقایسهای)، یعنی دو-مساوی (==) آشنا شدهاید. شما از این عملگر در دستورات شرطی IF از آن استفاده میکنید و مقدار داخل یک متغیر را توسط جملهای شبیه به «آیا دارای مقدار … است؟» بررسی میکنید. مثلاً:
if ( myVariable ==10)
{
//EXECUTE SOME CODES
}
پس در کد بالا درواقع مقدار داخل myVariable را بررسی میکنیم که آیا دارای مقدار ۱۰ است یا خیر! سپس اگر دارای چنین مقداری بود، کدهای داخل دستور شرطی IF اجر شوند. از جمله Conditional Operator های دیگر که احتمالاً در آینده بسیار بدرد خواهند خورد و کاربرد آنها بسیار زیاد است، دستورات زیر میباشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون که شما این چند Conditional Operators مهم را فراگرفتید، اجازه دهید که باهمدیگر اینها را تمرین کنیم تا دقیقاً متوجه کاربرد آنها شوید.
یک پروژهی جدید بسازید و در آن دو عدد Text Box قرار دهید. یک button هم اضافه کنید. در propertyهای Text مربوط به Text Box ها، در اولین Text Box عدد ۸ را وارد کنید و در دومی، عدد ۷.
Text مربوط به button رو نیز به عبارت Compare (=مقایسه) تغییر دهید. اکنون فرم شما به شکل زیر است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی button دابل-کلیک کنید تا وارد بخش کدها شوید. کاری که ما انجام میدهیم این است که شمارهها را از Text Box ها میگیرم و آنها را با یکدیگر مقایسه میکنیم. پس اولین کار ما، تعریف دو متغیر از نوع int است.
int firstNumber;
int secondNumber;
سپس عددهای داخل Text Box را دریافت میکنیم (که بصورت String هستند) و با استفاده از متد Parse، آنها را به مقدار int تغییر میدهیم.
firstNumber = int.Parse(textBox1.Text);
secondNumber = int.Parse(textBox2.Text);
الان ما باید کدی بنویسیم که این دو عدد را با یکدیگر مقایسه کند و تعیین کند که کدام یک از ارقام، از دیگری بزرگتر است. درواقع سوال را باید بدین شکل طرح کرد؛ «آیا رقم اول، از رقم دوم بزرگتر است؟»
برای پاسخ دادن به این سوال بهشکل برنامهنویسی، میتوان از دستور شرطی IF استفاده نمود. همچنین برای تعیین بزرگتر با کوچکتر بودن ارقام، میتوان از Conditional Operator که در بالا معرفی کردیم، استفاده کنیم. پس بدینشکل کدهایمان را مینویسیم:
if (firstNumber > secondNumber)
{
MessageBox.Show(“The first number was greater than the second number”);
}
اکنون باید بخش کدنویسی شما شبیه به زیر شده باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال بهسراغ تشریح کدهایی که نوشتیم بپردازیم؛ در داخل دستور if بین دو پرانتز، ما در واقع دو متغیری را که قبلاً تعریف کردهبودیم را با یکدیگر مقایسه میکنیم. با استفاده از Conditional Operator که در اول آموزش در رابطه با آن توصیح دادیم، ما با استفاده از علامت بزرگتر، سعی کردیم که رابطهای میان این دو متغیر ایجاد کنیم؛ در واقع این دو را با یکدیگر مقایسه کنیم.
برنامهی خود را اجرا کنید. بر روی button کلیک کنید؛ خواهید دید که MessageBox که در کدهایتان تعریف کردهاید برای شما نمایش داده میشود. اکنون در اولین Text Box عدد ۶ را بنویسید. دوباره بر روی Button کلیک کنید؛ اینبار اتفاقی نمیافتد. دلیل آن، این است که در دستور IF ما فقط این موضوع را بررسی کردیم که آیا متغیر firstNumber از secondNumber بزرگتر است یا خیر، اما حالت برعکس آن را بررسی نکردیم. پس کدی را به کدهایمان اضافه میکنیم. داریم:
if (firstNumber < secondNumbe)
{
MessageBox.Show(“The first number was less than the second number.”);
}
دوباره برنامه خود را اجرا کنید و حالتهای مختلف را امتحان کنید. خواهید دید که در همه حال (تنها حالتی که دو رقم با هم برابر باشند) Message Box برای شما نمایش داده خواهد شد.
برای حالت مساوی، یکی از روشها استفاده از علامت دومساوی (==) میباشد. اما حالت دیگر استفاده از نماد بزرگتر مساوی و یا کوچکتر مساوی میباشد (<= و یا >=)
دستور Conditional Operator بعدی ما، علامت مساوی نیست (!=) میباشد. با استفاده از این عملگر، شما تعیین میکنید که آیا دو متغیر (یا دو مقدار) با هم برابر هستند یا نه. به کد زیر دقت کنید:
if (firstNumber != secondNumber)
{
//SOME CODE HERE
}
پس کد بالا با این مفهوم ترجمه میشود: «اگر مقدار firstNumber برابر نباشد با مقدار secondNumber، پس کدهای داخل دستور IF را اجرا کن.»
در رابطه با عملگرهای منطقی همانند OR، NOT، AND و …، اگر کمی با ریاضیات آشنایی داشته باشید، میدانید که چگونه در عمل از آنها استفاده میشود. بنابراین ترجیح میدهم که اگر با آنها آشنایی ندارید، در اینترنت جستجو کرده و کمی با آنها آشنا شوید.
علامت عملگر منطقی NOT، بهشکل علامت تعجب (!) میباشد. به کد زیر دقت کنید:
bool testValue = false;
if (!testValue)
{
MessageBox.Show(“Value was false.”);
}
عملگر NOT، مقدار True را به False، و مقدار False را به True تبدیل میکند. پس در کد بالا وقتی که عملگر NOT را همراه با متغیر testValue میآوریم، مقدار آن را از False به True تبدیل میکند؛ درنتیجه نتیجه داخل پرانتز مربوط به IF بهصورت True خواهد شد، پس کدهای درون آن اجرا میشوند.
بخش نوزدهم
حلقهها (Loops)
حلقهها، که از این به بعد سعی میکنیم آنها را با نام Loops صدا بزنیم، یکی دیگر از مهمترین مواردی است که در برنامهنویسی بطور بسیار زیادی از آن استفاده میشود؛ سیشارپ هم از آنها استثنا نشده است. اما حلقهها در واقع چه هستند؟
حلقه در واقع کاری میکند که عملی را بارها و بارها آن را تکرار کنید تا به یک شرطی برسد که متوقف شود و دیگر آن عمل بدلیل عدم صحیح بودن شرط، انجام نگیرد.
برای مثال، شما فرض کنید میخواهید اعداد ۱ تا ۱۰ را با یکدیگر جمع کنید. اگر بخواهید با اطلاعاتی که تا کنون داشتهاید، چنین کاری را بکنید، احتمالاً کاری که خواهید کرد بهشکل زیر خواهد بود:
int answer;
answer = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10;
اما میبینید که چنین کاری اصلاً با عقل آدمی جور در نمیآید؛ خصوصاً اگر تعداد ارقام بیشتر باشد؛ برای مثال ۱ تا ۹۹۹. پس برای اینکه خواستهی ما برآورده شود، ما از Loops استفاده میکنیم.
اولین حلقه: حلقهی For
اولین حلقهای را که شما فرا خواهید گرفت، حلقه For است. حلقههای دیگری هم وجود دارند، مانند While و یا Do-While. اما فعلاً رایجترین و پرکاربرد ترین حلقه، حلقهی For میباشد.
یک پروژهی جدیدی از نوع Windows Application را در Visual Studio شروع کنید. یک button به فرم خود اضافه کنید و وارد بخش کد مربوط به button ها شوید.
در میان دو براکت مربوط به button که قبلاً اضافه کردید، راست کلیک کنید و بر روی Insert Snippet کلیک کنید. همانند تصویر زیر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
وقتی که بر روی Insert Snippet کلیک میکنید، همانند تصویر زیر لیستی برای شما نمایش داده میشود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کمی پایین بیایید و بر روی For دابل-کلیک کنید. یکسری کد برای شما بصورت خودکار ایجاد و درج خواهد شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
شاید اگر اولین بار شما باشد که به این کد نگاه کرده باشید، کمی برای شما پیچیده بهنظر برسد. پس بگذارید قدم به قدم برای شما این کدها را توضیح دهم که ببینید که چقدر ساده است.
ساختار کلی حلقه For بهشکل زیر است:
for ( )
{
//SOME CODE
}
پس شما یک For مینویسید و جلوی آن دو پرانتز باز و بسته قرار میدهید. سپس با استفاده از جفت براکت باز و بسته، محدودهی حلقه For را برای سیشارپ مشخص میکنید. چیزی که میان دو پرانتز For قرار میگیرد، درواقع کدی خواهد بود که به سیشارپ بگوید کدهای داخل حلقه For چند بار پشت سر هم اجرا شوند.
بهصورت پیشفرض، قالب شرطی که Visual Studio برای شما در بین دو پرانتز قرار داد، بهشکل زیر است:
int = 0; i < length; i++
کد بالا، در واقع از سه بخش که توسط دو Semicolon ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] از هم جدا شدهاند، ساخته شده است.
۱. از چه شمارهای این حلقه شروع به کار کند؟
۲. چندبار میخواهید که کد اجرا شود؟
۳. مقدار اولیه را پس از اتمام هر حلقه، چطور باید بروز شود؟
این سه بخش، تعریفی از سه بخش بالاست. به عکسهای زیر دقت کنید. اولین بخش بهصورت زیر است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بخش دوم نیز بهشکل زیر است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و بخش سوم نیز:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بخش اول (شماره ۱) به سیشارپ میگوید که حلقه من از چه شمارهای باید شروع شود:
int i = 0;
کاری که در بخش اول می کنید، تعریف یک متغیری است که معمولاً آنها را با نامهای i، j، k و … نامگذاری میکنند. البته هر نامی را میتوانید انتخاب کنید؛ بهشرطی که از قوانین نامگذاری متغیرها پیروی کند. البته دقت کنید که میتوانید متغیر مربوط به حلقه را بیرون از حلقه تعریف کنید. به شکل زیر:
int i;
for (i = 0; i < length; i++)
{
}
سپس، بعد از تعریف متغیر، در همان جا آن را مقدار دهی میکنیم. مقداری که به آن بهصورت پیشفرض داده شده، عدد صفر است.
بخش دوم کد (شماره ۲)، نشاندهنده شرطیست که به سیشارپ میگوید که این حلقه چند بار باید اجرا شود! بهصورت پیشفرض کد زیر قرار داده شده است:
i < length;
اگر مبحث جلسه قبل را بهخاطر داشته باشید، این کد میگوید «زمانی که مقدار i از مقدار length کوچکتر باشد.» دقت کنید که جای length باید عدد یا متغیر عددی قرار گیرد؛ پس length یک کلمهکلیدی نیست که خواهید بر اساس آن تصمیمی بگیرید. مثلاً کدمان را بهشکل زیر تغییر میدهیم:
int length = 101;
for (int i = 0; i < length; i++)
{
}
دقت کنید که لازم نیست حتماً نام متغیری که بر اساس آن شرط تعیین میشود، length باشد. نام آن میتواند بهدلخواه شما تعیین شود.
بخش سوم کد (شماره ۳)، به سیشارپ میگوید که پس از هربار که کد داخل حلقه (درصورت برقرار بودن شرط در مرحله قبل) اجرا میشود، چه اتفاقی باید بیفتد. ما در کد بالا اینطور نوشتیم که پس از هرباری که حلقه اجرا میشود، یک مقدار به مقدار متغیر i اضافه کند ( i++ یعنی اینکه عددی را که i در خود ذخیره میکند را با عدد ۱ جمع کند.)
سیشارپ تا زمانی که بخش دوم کد (شماره ۲) شرطش درست باشد، حلقه را در حال اجرا قرار میدهد و پس از پایان هر بار اجرا، یک مقدار به i اضافه میکند.
الان وقت آن است که بهصورت کاربردی، استفاده از حلقه و مفهوم آن را متوجه شوید. کدهایتان را دقیقاً بهشکل زیر درآورید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کدی که میخواهیم در هر بار در Loop اجرا شود، answer = answer + i است.
ما در کد بالا، در واقع میخواهیم اعداد ۱ تا ۱۰۰ را با یکدیگر جمع کنیم. پس اگر کدهای بالا را اجرا کنیم، دور اولی که حلقه شروع به کار میکند، مقادیر زیر را دارد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
پس از اتمام دور اول، دور دوم شروع میشود. اینبار مقادیر بهشکل زیر است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دور سوم نیز بدین شکل است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و دور چهارم:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دقت کنید که چگونه مقدار i در هر بار اجرا، تغییر میکند. این افزایش مقدار i ناشی از بخش سوم کد (شماره ۳) میباشد.
کدهایتان را اجرا کنید و بر روی button کلیک کنید. مقداری را که برای شما باید نمایش دهد، عدد ۵۰۵۰ است؛ که جمع اعداد از ۱ تا ۱۰۰ میباشد.
در بخش بعدی، بیشتر در رابطه با مقدار آغازین حلقه و مقدار پایانی آن صحبت خواهیم کرد.
بخش بیستم
تعیین شروع و پایان یک حلقه توسط کاربر
یک پروژه جدید از نوع Windows Application بسازید و سپس دو عدد Text Box را در درون فرم خود قرار دهید. همچنین دو Label و یک Button را اضافه کنید. اولین Label را Loop Start نامگذاری کرده؛ دومی را Loop End. فرم شما شکلی شبیه به شکل زیر را داشته باشد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کاری که قرار است انجام دهیم، گرفتن مقدار شروع و پایان حلقهها هستند. پس بر روی Button خود دابل-کلیک کرده و پس از ورود به بخش کدها، سه متغیر از نوع int به شکل زیر تعریف کنید:
int loopStart;
int loopEnd;
int answer = 0;
اکنون، مقادیری که توسط Text Box ها دریافت میشود را در داخل این دو متغیر ذخیره میکنیم.
loopStart = int.Parse(textBox1.Text);
loopEnd = int.Parse(textBox2.Text);
حالا که ما رقمهای وارد شده در Text Box ها را داریم، میتوانیم از آنها در حلقه استفاده کنیم. یک حلقه For به شکل زیر ایجاد میکنیم:
for (int i = loopStart; i < loopEnd; i++)
{
answer = answer + i;
}
حال میتوانید که پاسخ این محاسبه را توسط مثلاً یک MessageBox در button نمایش دهید؛ که این کار را بر عهده شما قرار خواهم داد.
ساخت یک جدول ضرب ساده توسط حلقه For
اکنون که ما استفاده از حلقهها را فرا گرفتیم، میتوانیم یک پروژهی کوچکی را شروع کنیم؛ آن هم جدول ضرب (یا اصطلاح انگلیسی آن Times Table).
ما توسط فرمی که در بالا ساختیم، از کاربر خواهیم خواست که یک مقداری را برای شروع و مقداری را برای پایان برای برنامه تعیین کند، آنگاه ما مقادیر ضرایب ۱۰ را در این عدد به کاربر نشان خواهیم داد. چیزی شبیه به جدول زیر خواهیم داشت:
۱ times 10 = 10
2 times 10 = 20
3 times 10 = 30
4 times 10 = 40
5 times 10 = 50
دقت کنید که در انگلیسی به ضرب، Times میگویند. مثلاً ۱ Times 10، یعنی ۱ ضربدر ۱۰.
بهجای استفاده از یک MessageBox، اینبار از یک List Box استفاده خواهیم کرد. پس به Tool Box مراجعه کنید و یک ListBox اضافه کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
فرم شما شکلی شبیه به زیر را خواهد داشت:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی button دابل-کلیک کنید تا مجدداً وارد بخش کدها شوید. برای اضافه کردن یک item به این List Box، میتوانیم از کد زیر استفاده کنیم:
listBox1.Items.Add(answer.ToString());
پس اولین کار، نوشتن نام شیء هست. سپس یک نقطه قرار میدهیم که IntelliSense ظاهر شود؛ Items را انتخاب میکنیم (یا مینویسیم)؛ و در انتها، از متد Add برای اضافه کردن آیتم استفاده میکنیم. پس کد بالا را در حلقه اضافه کنید. یعنی:
for (int i = loopStart; i <= loopEnd; i++)
{
answer = answer + i;
listBox1.Items.Add(answer.ToString());
}
شما میتوانید که Message Boxای را که از قبل برای نمایش محتوا از آن استفاده کرده بودید را حذف کنید. برنامهی خودتان را اجرا کنید و در loopStart بنوسید ۱ و در loopEnd بنویسید ۵؛ بر روی button کلیک کنید، نتیجه را در listBox مشاهده کنید.
برای اینکه نتیجه کارمان را کمی واضح تر کنیم، کد مربوط به List Box را به شکل زیر تغییر دهید:
listBox1.Items.Add(“answer = “ + answer.ToString());
برنامهتان را اجرا کنید؛ خواهید دید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای اینکه باز هم نتیجه کارمان را قابل فهمتر کنیم، اول از همه یک نوع متغیر برای تعیین مقدار ضریب تعریف میکنیم:
int multipyBy = 10;
الان باید کدهای مربوط به List Box را به شکل زیر تغییر دهیم:
answer = multiplyBy * i;
listBox1.Items.Add(i + ” times ” + multiplyBy + ” = ” + answer.ToString());
برنامه را اجرا کنید … خواهید دید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تمرین: اینبار فرم خودتان را بهشکل زیر درآورده و سعی کنید که مقدار ضریب نیز توسط خود کاربر تعیین شود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
نکته: برای پاک کردن List View توسط کدهای سیشارپ، از کد زیر استفاده میکنیم:
listBox1.Items.Clear();
بخش بیست و یکم
حلقه Do-While
در سیشارپ، هر حلقهای را که استفاده میکنید، معمولاً یک کار مشابهی را انجام میدهند و تفاوت آنچنانیای میان آنها وجود ندارد. همه آنها شرطی را خواهند داشت که تا زمان برقراری آن شرط (صحیح بودن آن برقرار باشد)، حلقه کدهای درون خود را اجرا خواهد کرد.
یکی دیگر از حلقههای موجود در سیشارپ، حلقه Do – While میباشد. ساختمان این حلقه بهشکل زیر است:
do
{
} while(true);
ابتدا دقت کنید که علامت Semicolon بعد از while آمده است. ما این حلقه را با عبارت do شروع میکنیم و سپس دو براکت باز و بسته قرار داده و کدهای مورد نیاز را در درون آن قرار میدهیم تا هنگام صحیح بودن شرط مورد بررسی، این کدهای اجرا شوند. شرطی که باید بررسی شود پس از نوشتن عبارت while و گذاشتن جفت پرانتزها، نوشته میشود.
برای مثال، در پروژهای که در بحث قبلی آموزشی خودمان داشتیم (جدولضرب)، ما میتوانیم کدمان را بهشکل زیر اجرا کنیم:
do
{
answer = multiplyBy * i;
listBox1.Items.Add(answer.ToString());
i++;
} while (i <= loopEnd);
این بار، بهجای آنکه از حلقه For استفاده کنیم، از حلقه Do-While استفاده کردیم. میبینید که این حلقه اجرا میشود تا زمانی که دستور مابین پرانتزهای while غلط شود. دقت کنید که جایی که باید متغیر i را مقدار دهی کنیم تا در حلقه از آن استفاده شود، باید خارج از این حلقه باشد؛ چرا که اگر قرار باشد داخل حلقه این مقداردهی صورت گیرد، هربار که حلقه اجرا میشود، این مقداردهی مجدداً تکرار میشود.
در کدهای بالا میبینید که مقدار i در داخل کد مقدارش افزایش داده میشود، چون حلقه Do-While مثل حلقه For نیست که از همان اول ۳ دستور لازم نوشته شود.
حلقه While
حلقهی While نیز یکی دیگر از حلقههای مورد استفاده در زبان سیشارپ میباشد. این حلقه نیز ساختار و عملکری بسیار شبیه به Do – While را دارد. ساختار نوشتاری آن بهشکل زیر میباشد:
while (true)
{
}
و اینبار کدهای مربوط به پروژه جدولضرب نیز با این حلقه مینویسیم:
while ( i <= loopEnd)
{
answer = multipyBy * i;
listBox1.Items.Add(answer.ToString());
i++;
}
معمولاً استفاده از حلقههای While راحتتر از Do – While میباشد. اگر به دو حلقهی While و Do – While دقت کنید، شاید متوجه شدهباشد که در حلقه While، قبل از اجرای کدهای داخل حلقه، ابتدا شرط بررسی میشود و در صورتی که شرط صحیح میباشد، کدهای درون آن اجرا میشود. اما در حلقه Do – While ابتدا برای یکبار کدهای داخل حلقه اجرا میشود و در انتها شرط بررسی میشود؛ درصورتی که صحیح باشد، دوباره به بالا برمیگردد و کدها را یکبار دیگر اجرا و شرط را نیز بار دیگر بررسی میکند و به همین ترتیب …
شاید یکی از مسائلی که ذهن شما را مشغول ساخته است، این باشد که «خوب؛ من چطوری بفهمم که کدوم حلقه توی موقعیتهای مختلف باید استفاده شه؟» پاسخ این سوال این هست: بیشتر مواقع همیشه میتوانید از هر حلقهای که بخواهید استفاده کنید، اما شاید بعضی مواقع برای شما شرایطی بوجود میآید که مجبور میشوید از یک حلقهی خاص استفاده کنید؛ یا اینکه نمیتوانید از حلقهی خاصی استفاده کنید!
وقتی که تجربهی شما در سیشارپ بیشتر میشود، خودتان متوجه خواهید شد که کدام حلقه مناسبتر هست و لازم نیست که نگران آن باشید. اینها مهارتهایی هستند که در آینده بهصورت ناخودآگاه به آنها مسلط خواهید شد.
بخش بیست و دوم
کنترل خالی بودن Text Box
پروژهی جدیدی را در Visual Studio بهصورت Windows Application ایجاد کنید و فرمی شبیه به شکل زیر تهیه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی Buttonای که در فرم خود قرار دادهاید، دوبار کلیک کنید و کدهای زیر را در داخل آن بنویسید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کدهایی را که همانند بالا در نرمافزار خود نوشتهاید را اجرا کنید. در واقع، کدهای بالا این عمل را انجام میدهند که یک شمارهای را بصورت int از یک Text Box دریافت میکند و بهصورت یک String به MessageBox ارسال خواهد کرد.
اگر کدهای بالا را اجرا کردید، ابتدا یک شماره را در Text Box وارد کرده و بر روی Button کلیک کنید؛ باید همان عدد را در قالب یک MessageBox ببینید. اینبار، Text Box را کاملاً خالی کرده و بر روی Button کلیک کنید! چه خواهد شد؟ باید خطایی شبیه به خطای زیر ببینید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
شاید خطاها بهشکلهای متفاوتی (بستگی به نسخه Visual Studio شما) نمایش داده شود، اما در هر صورت، خطا ناشی از خالی بودن این Text Box است.
برای جلوگیری از این مشکل، ما از یک متد با نام TryParse استفاده میکنیم. برای تبدیل ارقام ما قبلاً بدین شکل عمل میکردیم:
textBoxNumber = int.Parse(textBox1.Text);
متد Parse خالی بودن یا نبودن یک Text Box را بررسی نمیکند و مستقیماً میخواهد که مقدار داخل Text Box تعیین شده را به مقدار خواسته شده تبدیل کند، بنابراین ممکن است که در بعضی مواقع، بهخاطر اشتباه کاربر که یک Text Box را خالی گذاشته، با خطایی روبرو شود.
بنابراین در متد TryParse به سیشارپ میگوییم که اول ببیند آیا مقدار داخل Text Box قابل تبدیل است یا نه. کدهای ما شکلی شبیه به زیر را خواهند داشت:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کد فوق به شکل زیر است:
متغیر outputValue، مقدار تغییر یافته را در خود نگهداری خواهد کرد. یک متغیر از نوع Bool نیز تعریف میکنیم که ببینیم آیا متد TryParse میتواند مقدار داخل را تبدیل کند یا نه! اگر جواب مثبت بود، مقدار آن True میشود؛ در غیراینصورت False خواهد بود.
پس از آنکه از TryParse استفاده میکنید، باید بررسی کنید که آیا مقدار، قابل تبدیل است یا خیر! پس با استفاده از دستور IF … ELSE، این شرط را بررسی میکنیم.
در داخل IF، ما کد را بهاین شکل نوشتیم که اگر مقدار قابل تبدیل بود، با استفاده از علامت NOT (!)، مقدار را False میکنیم تا وارد کدهای درون IF نشود و کدهای ELSE را اجرا کند. اما اگر مقدار ما قابل تبدیل نبود، پس مقدار isNumber برابر با False خواهد شد و با استفاده از دستور منطقی NOT، به True تبدیل میشود و وارد بدنه IF میشود.
بخش بیست و سوم
یکی از موارد بسیار مهم و کاربردی که بیشتر مخصوص Windows Form Application میباشد، وجود یک منو در بالای هر Form میباشد. در این بخش ما سعی خواهیم کرد که بیشتر بخشهای مربوط به این منو را در این آموزشها پوشش دهیم. در نهایت ما با یک فرمی شبیه به شکل زیر مواجه خواهیم شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اضافه کردن منو به Windows Form
ابتدا برای شروع، یک پروژه از نوع Windows Form Application بسازید و نام آن را بهدلخواه خود انتخاب کنید. پس از ساخته شدن پروژه، نگاهی به ToolBox خود در سمت چپ بیاندازید. یک بخشی با نام Menus & Toolbars وجود دارد که بر روی علامت + آن کلیک کنید تا باز شود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
از بین انتخابهای موجود، ما MenuStrip را برای فرم خود میخواهیم. دوبار بر روی آن کلیک کنید؛ همانند تصویر زیر خواهید دید که روی فرم شما یک منو بهطور خودکار اضافه خواهد شد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دقت کنید که در پایین Visual Studio چه چیزی ظاهر میشود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این خود شیء MenuStrip است که بهصورت خودکار، دارای نام menuStrip1 میباشد. اگر که Menu Strip شما انتخاب نشده باشد، میتوانید با کلیک کردن بر روی آن، تمامی Properties موجود برای آن را در پنجره مربوط به Properties را مشاهده کنید.
اضافه کردن منوها و آیتمها برای فرم خود بسیار کار سادهای میباشد؛ فقط کافیست که در داخل Text Box موجود در این منوها کلیک کنید تا بتوانید منوهای خودتان را اضافه کنید.
به تصویر زیر دقت کنید؛ طبق تصویر بر روی اولین منو کلیک کنید و نام File را وارد کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کلید Enter را بفشارید و منوی فرم شما چنین خواهد شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کاری که شما کردید، اضافه کردن منوی اصلی در فرم خود میباشد (منوی File). برای آنکه منوهای زیر شاخهای را برای منوهای اصلی در نظر بگیرید، میتوانید در زیر آنها، نام زیرمنو را تعریف کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
وقتی که بر روی یک زیر منو کلیک میکنید، فقط آن انتخاب میشود و Properties مربوط به آن را میتوان در پنجره Properties مشاهده کرد. به تصویر زیر دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Property ای که ما به آن توجه میکنیم، (Name) میباشد. اگر دقت کنید، میبینید که نام آن کمی بلند است، لذا آن را تغییر میدهیم:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یک زیر منوی دیگری را با نام Open اضافه کنید؛ طبق تصویر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اینبار نیز Open را انتخاب کنید و در پنجرهی Properties، مشخصه (Name) را آن همانند مرحله پیش تغییر دهید. نام آن را قرار دهید: mnuOpen
یک زیر منوی دیگری با نام Save نیز ایجاد کرده و (Name) آن را تغییر دهید به:mnuSave
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون فقط دو کار مانده؛ آن هم اضافه کردن دو شیء دیگر به منو است. اولین شیء، یک خط جداکننده (Dividing Line) و یک منوی خروج (Quit). برای ایجاد یک خط جداکننده، به همان روشی که میخواهید یک زیر منو ایجاد کنید، عمل میکنیم؛ فقط کافیست بهجای نوشتن نام، یک خطتیره (کنار کلید شماره صفر) قرار دهید، پس از آن بهصورت خودکار یک خط جداکننده برای شما ایجاد خواهد شد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یک گزینه Quit نیز برای منوی خود قرار دهید؛ و (Name) آن را به mnuquit تغییر دهید. منوی File شما اکنون تکمیل است. کافیست که یکبار برنامه خود را اجرا کنید و ببینید که چگونه عمل میکند:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
البته بدیهی است که هیچیک از این منوها کار نخواهند کرد، چرا که برای هیچکدام از آنها کدی ننوشتهایم. بهزودی برای آنها کدهایی را خواهیم نوشت تا بتوانیم از آنها بهصورت کاربردی استفاده کنیم.
تغییر شکل و شمایل منو را میتوانید از پنجره Properties در مشخصه RenderMode تغییر دهید تا به یک نمای مناسب از منو دست پیدا کنید.
اضافه کردن زیر منو به یک زیر منو نیز به راحتی قابل انجام است. کافیست همانند تصویر زیر، در زیر منوی New، یک زیر منو با نام دلخواه ایجاد کنید. موارد زیر را همانند تصویر ایجاد کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر در برنامههای معروف موجود در ویندوز دقت کردهباشد، میدانید که تقریباً بیشتر منوها دارای یک کلید ترکیبی برای دسترسی سریع به منو است. برای مثال، در اغلب برنامهها، با فشردن کلیدهای ترکیبی ctrl و N، یک سند و یا فایل جدیدی را خلق میکنید. و یا با فشردن کلیدهای ctrl و Z، عمل برگشت (Undo) انجام میشود.
کار دیگری نیز که در منوها قابل انجام است، کشیدن خطوطی زیر حرفهای شاخص هر زیر منو است. با اینکار، هنگامی که کلید ALT را فشار میدهید، میتوانید با استفاده از حروف شاخص تعیین شده به منوی دلخواه دسترسی سریعتری را داشته باشید. برای مثال، در خود برنامه Visual Studio، کلید ALT را فشار دهید؛ خواهید دید که منوی File باز میشود، اما به حروف مشخص شده که زیر آنها خط کشیده شده است دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ابتدا، برای ایجاد این حروف شاخص، کافیست که با انتخاب هر منو، به پنجرهی Properties مراجعه کرده و در مشخصه Text آن، قبل از نام منو، یک علامت & قرار دهید. بدین شکل:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای اضافه کردن کلیدهای ترکیبی به منوی خود، کافیست که در پنجره Properties، در مشخصه ShortcutKeys، کلید ترکیبی مورد نظر خود را تعیین کنید. ما برای گزینه New، کلیدهای ترکیبی CTRL و N را در نظر گرفتیم. بدین شکل:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تمرین ۱: زیرمنوهای زیر را برای منوی Edit ایجاد کنید و (Name) هرکدام را طبق موارد مشخص شده، قرار دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Undo: mnuUndo
Cut: mnuCut
Copy: mnuCopy
Paste: mnuPaste
تمرین ۲: منوی View و زیر منوهای آن را نیز طبق تصویر اضافه کرده و (Name) هرکدام را طبق موارد مشخص شده قرار دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
View Text Boxes: mnuViewTextBoxes
View Labels: mnuViewLables
View Images: mnuViewImages
بخش بیست و چهارم
فعال کردن منوی Quit
اولین و مهمترین بخش منوها که در تمامی نرمافزارها وجود دارد، منوی Quit میباشد. شاید در کمتر برنامهای میتوانید گزینهای در منو برای خروج از برنامه را پیدا نکنید. پس اول از همه، شروع میکنیم به نوشتن کد مربوط به خروج!
در فرم خود، بر روی منوی File کلیک کنید تا منو برای شما باز شود و سپس بر روی Quit دابل-کلیک کنید تا وارد بخش کدنویسی مربوط به این گزینه شوید.
تابعی که از آن برای خروج از برنامه استفاده میشود، تابع زیر است:
Application.Exit();
این تابع در هر مرحلهای که اجرا شود، باعث خواهد شد که کاربر از نرمافزار خارج شود. پس برنامهی خود را یکبار اجرا کنید و آن امتحان کنید؛ خواهید دید که با کلیک بر روی Quit (یا فشردن کلیدهای ترکیبی) برنامهی شما خاموش میشود.
شما میتوانید کاری کنید تا برنامه شما کمی جالبتر بهنظر برسد؛ مثلاً با استفاده از یک Message Box، از کاربر بپرسید که آیا واقعاً میخواهد از برنامه خارج شود یا نه. پس کد زیر را جایگزین کد بالا کنید:
if (MessageBox.Show(“Really Quit?”, “Exit”, MessageBoxButtons.OKCancel) == DialogResult OK)
{
Application.Exit();
}
ابتدا کد بالا را تشریح میکنیم. اول کاری با دستور شرطی IF نداشته باشید و به داخل پرانتزهای آن توجه کنید. میبینید که یک MessageBox تعریف کردیم که از کاربر سوال میکند که آیا واقعاً می خواهد از برنامه خارج شود یا نه! در نهایت هم برای فرم ما، دو کلید OK و Cancel تعریف کردیم. (توسط کد MessageBoxButtons.OKCancel)
در مقابل آن، علامت دو-مساوی قرار داده و گفتیم که اگر DialogResult (=نتیجه Dialog) OK باشد، پس وارد کد بشود. در واقع، دستور شرطی IF چک میکند که آیا مقدار DialongResult برابر با OK بوده است یا نه؛ اگر چنین بود، پس وارد بدنه IF میشود و تابع مربوط به خروج از برنامه را اجرا میکند.
بخش بیست و پنجم
اجرای منوی Edit در سیشارپ قاعدتاً میبایست که ما قبل از کدنویسی منوی Edit، سایر گزینههای منوی File را راهاندازی کنیم، اما بدلیل پیچیدگی آن نسبت به سایر منوها، آن را فعلاً رها میکنیم و ابتدا با منوی Edit شروع میکنیم؛ در نهایت مجدداً به سراغ منوی File بازخواهیم گشت.
برای اینکه عملکرد گزینههای Cut، Copy، Past و Undo را در عمل ببینید، ابتدا دو Text Box در کنار هم در منوی خود قرار دهید و برای جفت Text Box ها، در پنجره Properties آنها، مقدار Property مربوط به MultiLine را به True تغییر دهید. با True کردن آنها، خواهید توانست که بهجای یک خط، چندین خط در یک Text Box بنویسید. برای اولین Text Box، در Property مربوط به Text، یک مقدار دلخواه بنویسید. فرم شما بهشکل زیر خواهد شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کاری که میکنیم این هست که گزینههای Cut، Copy و Past را فعال میکنیم. Undo را نیز فراموش نخواهیم کرد! ابتدا ما متن داخل Text Box اول را Cut خواهیم کرد و سپس این عمل را Undo میکنیم.
بنابراین، به فرم خود بازگردید و بر روی گزینه Cut از منوی Edit، دابل-کلیک کنید؛ سپس وارد بخش کدنویسی خواهید شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کدی که برای انجام عملیات Cut در یک Text Box انجام میشود، خیلی راحت و ساده میباشد. تنها کافیست که کد زیر را بنویسید:
textBox1.Cut();
Cut() یک متدی در سیشارپ میباشد که همراه با خود زبان سیشارپ عرضه میشود و دقیقاً همانکاری را میکند که نام آن انتخاب شدهاست.
قبل از اینکه برنامهی خود را اجرا کنید، یکبار دیگر به فرم خود بازگردید و بر روی undo دابل-کلیک کنید و کد زیر را بنویسید:
textBox1.Undo();
اکنون، کدهای خود را امتحان کنید؛ برنامه خود را اجرا کنید و متن خود را در Text Box انتخاب کنید. توسط گزینه Cut، متن را Cut کنید و سپس با استفاده از گزینه Undo، متن خود را بازگردانید.
کار دیگری که میتوانیم انجام دهیم این است که بررسی کنیم که آیا متنی جهت Cut کردن انتخاب شده است یا نه! پس کافیست که کد مربوط به Cut را بهشکل زیر تغییر دهید:
if (textBox1.SelectedText != “”)
{
textBox1.Cut();
}
فکر نمیکنم نیازی به شرح کدهای بالا وجود داشته باشد! کدها کاملاً گویای عملکرد خود هستند.
برای گزینه Undo نیز میتوانیم چنین کاری را انجام دهیم؛ یعنی بررسی کنیم که آیا عملی برای Undo کردن وجود دارد یا نه! پس کدهای Undo را بهشکل زیر تغییر دهید:
if (textBox1.CanUndo == true)
{
textBox1.Undo();
}
اگر برنامهی خود را اجرا کنید و ابتدا بر روی Cut کلیک کنید، متن شما Cut خواهد شد. اگر یکبار بر روی Undo کلیک کنید، متن شما باز خواهد گشت. اگر یک بار دیگر Undo کنید، مجدداً متن شما Cut میشود. این بدلیل این هست که شما بعد از دستور Undo، مراحل قبلی را پاک نکردید، برای اینکار، کد زیر را جایگزین کنید:
if (textBox1.CanUndo == true)
{
textBox1.Undo();
textBox1.ClearUndo();
}
کد بالا را اجرا کنید؛ خواهید دید که با دوبار Undo کردن، عملیات Cut مجدداً انجام نخواهد شد.
حال وقت آن رسید که دو گزینه Copy و Past را نیز راهاندازی کنیم. پس ابتدا بر روی گزینه Copy دابل-کلیک کنید تا وارد بخش کدنویسی آن شویم. کدی که برای کپی استفاده خواهیم کرد، بهشکل زیر است:
textBox1.Copy();
اما برای بررسی اینکه آیا متنی برای کپی کردن انتخاب شده است، باید بهشکل زیر عمل کنیم:
if (textBox1.SelectionLength > 0)
{
textBox1.Copy();
}
ما در واقع در حال بررسی مقدار SelectionLength هستیم که ببنیم چه تعداد کاراکتر انتخاب شده است. اگر که برابر با صفر باشد، یعنی هیچ کاراکتری برای کپی شد انتخاب نشده است، پس وارد بدنه IF نمیشود؛ در غیراینصورت، کدهای داخل بدنه IF اجرا خواهند شد.
برای Past کردن، از Text Box دومی استفاده خواهیم کرد. پس کد زیر را برای گزینه Past اضافه کنید:
textBox2.Past();
بخش بیست و ششم
تنظیمات منوی View
در منوی View، سه گزینه مختلف وجود دارد که ما فعلاً تنها با دوتا از آنها کار خواهیم داشت. نخستین منو، منوی View Text Boxes میباشد. ما توسط متغیرهای boolean، خواهیم توانست که چگونه text box ها را نمایش و مخفی کنیم.
به منوی View مراجعه کنید و بر روی گزینه View Text Boxes دابل-کلیک کنید تا وارد بخش کدنویسی شویم.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کاری که ما میخواهیم انجام دهیم این است که جعبه متنها را با کلیک بر روی گزینه View TextBoxes مخفی میکنیم و با کلیک مجدد بر روی آنها، مجدداً نمایش داده شوند. یک «تیک» نیز در کنار این منو ظاهر خواهد شد که وضعیت فعلی را برای ما به نمایش خواهد گذاشت.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای اضافه کردن این «تیک»، میتوانیم از Property مربوط به Checked را به کدهایمان اضافه کنیم. کد زیر را به بخش کدهای مربوط به گزینه View Textboxes اضافه کنید:
mnuViewTextboxes.Checked = true;
برنامه خود را اجرا کنید. یک بار بر روی View Textboxes کلیک کنید؛ خواهید دید که یک «تیک» کنار شما اضافه خواهد شد. سوالی که اینجاست، این هست که چگونه میتوانیم کاری کنیم که اگر دوباره بر روی View Textboxes کلیک شود، این تیک از بین برود؟
یک روش خیلی ساده و البته جالبی وجود دارد! ما میتوانیم کاری کنیم که دقیقاً حالت مخالف وضعیت فعلی را با کلیک بر روی این گزینه به نمایش بگذاریم. یعنی با یک خط کد و با استفاده از NOT، وضعیت مخالف وضعیت فعلی را به این گزینه نسبت دهیم. خط کد زیر را با کد بالایی جایگزین کنید:
mnuViewTextboxes.Checked = !mnuViewTextboxes.Checked;
الان یکبار دیگر برنامه خود را اجرا کرده و این گزینه را چند بار امتحان کنید. خواهید دید که بهدرستی عمل خواهد کرد.
اکنون برگردیم به سراغ کار اصلی خودمان، برای اینکه هدف و انتظاری که از گزینه View Textboxes داریم را محقق کنیم، کافیست که کد زیر را اضافه کنیم:
if (mnuViewTextboxes.Checked)
{
textBox1.Visible = true;
textBox2.Visible = true;
}
else
{
textBox1.Visible = true;
textBox1.Visible = true;
}
ابتدا باید بدانید که دستور زیر:
if (mnuViewTextboxes.Checked)
دقیقاً برابر با دستور زیر است:
if (menuViewTextboxes.Checked == true)
البته دقیقاً همانند موارد بالا، میتوانیم کدهایمان را کلاً به شکل زیر بنویسیم:
textBox1.Visible = !textBox1.Visible;
و به همین ترتیب برای Text Box شماره ۲.
بخش بیست و هفتم
آشنایی با Picture Box نگاهی به Toolbox خود بیاندازید و بهدنبال گزینهای با نام Picture Box بگردید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
آن را انتخاب کنید و بر روی Form خود قرار دهید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
وقتی که Picture Box رو اضافه میکنید، بهصورت یک شیء خالی در Form شما نمایش داده میشه. برای اینکه در مرحلهی طراحی برنامه، عکسی را به این بخش اضافه کنید تا برای کاربران نمایش داده شود، در پنچره Properties نگاهی به مشخصه Image بکنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Button ای که روبهروی (none) قرار دارد را کلیک کنید تا پنجرهای شبیه به زیر را ببینید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
طبق تصویر، بر روی Import کلیک کنید؛ پنچره Open File Dialog باز خواهد شد. بهدنبال عکس مورد نظر خود بروید و آن را اضافه کنید. من یک عکس ماه اضافه کردم.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی OK کلیک کنید و به Form خود برگردید … خواهید دید که عکس اضافه شده است.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دقت کنید که عکسی که اضافه کردیم، نسبت به پنجره برنامه ما بسیار بزرگ هست. به همین دلیل، به پنجره Properties مربوط به Picture Box مراجعه کنید و گزینه SizeMode را بر روی AutoSize قرار دهید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برنامه خود را اجرا کنید و عکس خودتان را ببینید.
بخش بیست و هشتم
ایجاد یک Open File Dialog یک نگاهی به Tool Box بیاندازید. یک بخشی با نام Dialogs وجود دارد که در این بخش حدود ۶ مورد مختلف وجود دارند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
انواع مختلفی از دیالوگها که ممکن است آنها را در محیط Windows دیده باشید در این لیست وجود دارد. گزینهای که در عکس بالا انتخاب شده، گزینه مورد نظر ماست. بر روی آن Double-Click کنید (دوبار کلیک کنید.)؛ مشاهده خواهید کرد که یک گزینهی جدیدی در پایین برنامه Visual Studio اضافه میشود. این گزینه دقیقاً در کنار menuStrip1 میباشد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همانطور که متوجه شدید، چیزی در فرم شما (بر خلاف menuStrip) نمایش داده نشد، چرا که Open File Dialog یک پنجرهی مخفیای است که تنها در صورت نیاز قابل مشاهده خواهد بود.
به پنجره Properties مربوط به OpenFileDialog مراجعه کنید و مشخصه Name آن را به یک نام کوتاهتر تبدیل میکنیم. مثلاً:
Name: OpenFD
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
وقتی که نام آن را عوض میکنید، متقابلاً باید نام آن در پایین پنجره Visual Studio نیز تغییر پیدا کند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در حالی که شیء OpenFD در حالت انتخابشده (Selected) میباشد، یک نگاه دیگری به پنجره Properties بیاندازید. شما مشاهده خواهید کرد که مشخصههایی همچون: Filter، File Name، InitialDirectory و Title وجود دارند. ما این مشخصهها را توسط کد تغییر خواهیم داد؛ نه داخل خود ToolBox.
موضوع دیگری که میبایست در ذهن خود داشته باشید این است که Open File Dialog در واقع فایلی را باز نمیکند! کاری که دیالوگها انجام میدهند این است که به شما این اجازه را بدهند که فایلی را برای باز شدن انتخاب کنید. شما میبایست کد جداگانهای را برای باز شدن فایلها بنویسید. تنها کاری شما در حال حاضر در حال انجام آن هستید، دریافت اسم فایل است.
ما فعلاً میخواهیم کاری کنیم که اگر کاربر بر روی گزینه View Images از منوی View کلیک کنید، پنجره Open File برای وی نمایش داده شود. برای اینکار بر روی View Images دوبار کلیک کنید تا وارد کدهای مربوط به آن شویم.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای اینکه پنجره دیالوگ به نمایش در آید، کد زیر را مابین دو پرانتز قرار دهید:
openFD.ShowDialog();
فکر نمی کنم که کد بالا نیازی به توضیح داشته باشد. در واقع ما به کامپایلر میگویم که تابع ShowDialog را از شیء openFD فراخوانی کن.
حال برنامه خود را اجرا کنید و سعی کنید بر روی View Images کلیک کنید. پنجرهای به شکل زیر برای شما نمایش داده خواهد شد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این عکس به شکل اتوماتیک کوچک شده است. برای مشاهده تصویر در اندازه اصلی بر روی این نوار کلیک کنید. ابعاد اصلی عکس 617x493 میباشد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بدلیل اینکه ما کاری جز نوشتن کدی برای باز کردن پنجرهی فوق نکردیم، خیلی از اتفاقات بهصورت پیشفرض در نظر گرفته شده است. مثلاً محل اولیه باز شدن بهصورت پیشفرض Document در ویندوز ۷ میباشد. نام فایل بهصورت پیشفرض openFileDialog1 در نظر گرفته شده. تمامی این موارد (و خیلیهای دیگر) را میتوانیم بهراحتی عوض کنیم.
کارها را بهترتیب انجام میدهیم. اول بیاییم یک عنوان (Title) برای پنجره دیالوگ انتخاب کنیم. کد زیر را اضافه کنید:
openFD.Title = “Insert an Image”;
شما هرچیزی را داخل کوتیشن میتوانید بنویسید. در واقع Title، نمایشگر عنوان پنجره است که در ویندوزهای XP و ویندوز ویستا و ۷، بهصورت زیر است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کار بعدیای که میتوانیم آن را انجام دهیم، تغییر محل باز شدن فایلها میباشد. برای مثال، کد زیر را قبل از دو خط کد قبلی قرار دهید.
openFD.InitialDirectory = “C:”;
ما مسیر پیشفرض را بر روی درایو C قرار دادیم. در واقع ما اینطور فرض کردیم که تمامی کاربرها یک درایو C در کامپیوترشان موجود است. اما اگر بخواهیم که مسیر را بر روی My Document قرار دهیم (چون میدانیم همه کاربران این فولدر را به هر نحوی دارا هستند)، کد زیر را جایگزین کنید:
openFD.InitialDirectory = System.Environment.GetFolderPath(Environment.Speci alFolder.Personal)
برای تغییر نام فایل بهصورت پیشفرض، از کد زیر استفاده میکنیم:
openFD.FileName = ““;
با قرار دادن یک نام در داخل کوتیشنها، میتوانید نام پیشفرض برنامه را تعیین کنید. ما آن را مقدار خالیای قرار دادیم تا چیزی در دیالوگ نمایش داده نشود.
یکی از مهمترین کارها (و شاید هم جالبترین آنها) تعیین File Type ها هستند. بدین صورت که ما تعیین میکنیم که چه نوع (فرمت) فایلی میتوانید در برنامه بارگذاری شود. به نمونههای زیر دقت کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای انجام اینکار، الگوی زیر را یاد بگیرید.
openFD.Filter = “JPEG|*.jpg”;
کد بالا تنها فایلهایی با پسوندهای JPG را قبول خواهد کرد و پنجره دیالوگ شما به شکل زیر خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای اضافه کردن فرمتهای دیگر، بهشکل زیر عمل میکنیم:
openFD.Filter = “JPEG Images|*.jpg|GIF Images|*.gif|PNG|*.png”;
برای اضافه کردن گزینه آخر که معمولاً با عنوان All files میباشد، میتوانیم بهشکل زیر عمل کنیم:
openFD.Filter = “JPG|*.jpg|All files|*.*”;
در این جلسه نحوه ایجاد دیالوگ باکس را فرا گرفتید. در جلسه آینده، نحوه بارگذاری عکس را در سیشارپ آموزش خواهیم داد.
بخش بیست و نهم
قرار دادن عکس توسط Open File Dialog
پس از آنکه کارهایی که در بخش قبلی گفتیم و یک دیالوگ ساختید، میبایست که فایلی که توسط کاربر انتخاب میشود را مسیریابی کرده و آن را در متغیری ذخیره کنیم تا بتوانیم فایل مورد نظر را قرار دهیم.
ما یک متغیر از نوع String تعریف خواهیم کرد که توسط آن، نام فایل انتخاب شده را در آن ذخیره میکنیم. پس یک متغیر ایجاد میکنیم:
string Chosen_File = “”;
برای اینکه نام فایل انتخاب شده را از دیالوگ بگیریم و در این متغیر ذخیره کنیم، کد زیر را استفاده میکنیم:
Chosen_File = openFD.FileName;
نام فایل در نهایت در متغیر Chosen_File ذخیره خواهد شد. حال وقت آن رسیده که عکس را در یک PictureBox قرار دهیم. اگر PictureBox ندارید، آن را به فرم اضافه کنید. برای دسترسی به مشخصه image از PictureBox، کد زیر را بکار میبریم:
pictureBox1.Image
و برای قرار دادن عکسی که کاربر انتخاب کرده، کد زیر را مینویسیم:
pictureBox1.Image = Image.FromFile(Chosen_File);
کد بالا کاملاً مشخص هست. برای قرار دادن یک عکس در Picture Box، میبایست که مشخصه Image آن دسترسی پیدا کنیم. (که انجام شد) سپس، با استفاده از متد FromFile() موجود در کلاس Image (بعداً در رابطه با Class بیشتر آشنا میشوید) و دادن نام عکس بهصورت یک String، عکس را در فرم خود خواهیم داشت. کدهای شما شکلی شبیه به شکل زیر را خواهند داشت:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برنامه خود را اجرا کرده و آن را امتحان کنید. یک عکس را انتخاب کنید و آن را در فرم خود قرار دهید. شما باید نتیجه کار خودتان را با موفقیت ببینید.
کارهایی که در بالا انجام دادیم، خالی از عیب و نقص نیست و دارای یک ایراد بزرگ است! یکبار دیگر برنامه خود را امتحان کنید و اینبار بهجای کلیک کردن بر روی Open، بر روی Cancel کلیک کنید. (در دیالوگ). شما باید خطایی (Error) به شکل زیر ببینید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مشکلی که بوجود میآید این است که وقتی که شما cancel را انتخاب میکنید، نتیجه این است که شما فایلی را انتخاب نکردهاید؛ در نهایت، متغیر Chosen_File شما خالی باقی میماند و در مرحله استفاده از متد FromFile()، با مشکل مواجه میشود.
برای اینکه بررسی کنیم که آیا در دیالوگ، Cancel انتخاب شده است، میتوانیم از کد زیر استفاده کنیم:
if (openFD.ShowDialog() == DialogResult.Cancel)
{
MessageBox.Show(“Operation Cancelled”);
}
ما یک شیء بهصورت پیشفرض در سیشارپ داریم به نام DialogResult. توسط آن میتوانید نتیجهی انتخاب شده توسط یک دیالوگ را تعیین کنید. اضافه کردن یک کد دیگر توسط ELSE، مشکل ما را برطرف خواهد کرد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برنامه خود را یک بار دیگر اجرا کنید و مشکل را بررسی کنید؛ خواهید دید که مشکلی وجود ندارد!
کار دیگری که میتوانستیم انجام دهیم که کدهای ما بهصورت بهینهتری باشند، استفاده از چند خط کد زیر است. یعنی بهجای استفاده از دو دستور شرطی IF و ELSE، از یک IF استفاده کنیم:
if (openFD.ShowDialog() != DialogResult.Cancel)
{
Chosen_File = openFD.FileName;
pictureBox1.Image = FromFile(Chosen_File);
}
با استفاده از اعمال منطقی ریاضی (عمل NOT که با علامت ! نمایش میدهند) توانستیم که کدی شبیه به کد بالا را بنویسیم.
بخش سی ام
فراخوانی یک فایل متنی توسط Open File Dialog احتمالاً یادتان نرفته است که چطور و با چه دستوری میتوانستیم برای فرمت فایلهایی که Open File Dialog اجازه باز کردن آنها را دارد، محدودیت تعیین کنیم. در بخش ۲۹ ما فقط برای عکس این محدودیت را قائل شدیم؛ اینبار برای متن خواهد بود!
اینبار، نوع دیگری را از Text Box ها را اضافه خواهیم کرد –با نام Rich Text Box. این شیء این قابلیت را به ما خواهد داد که مستقیماً متن داخل یک فایل TXT را وارد Rich Text Box کنیم. پس برگردیم به منوی ToolBox و یک شیء از Rich Text Box در فرم خود قرار دهید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
شما احتمالاً باید سایز فرم خود را کمی تغییر دهید تا علاوه بر ابزارهای موجود از قبل، ابزار فعلی خود را نیز جا دهید. در هر حال، فرم شما باید شکلی شبیه به شکل زیر را داشته باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Box (که پایینترین Text Box موجود در فرم فوق میباشد) خیلی شبیه به جعبهمتن معمولی میباشد؛ اما کارهای بیشتری را نسبت به آنها میتوانید انجام دهید. یکی از متدهای موجود در Rich Text Box، متد LoadFile() میباشد که ما توسط آن فایل متن خود را فراخوانی خواهیم کرد.
حال که Rich Text Box را اضافه کردید و فرم شما به شکل زیر است، کدهای مربوط به گزینه Open از منوی File فرم خود را آماده کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ما میتوانیم کدهای قبلیای که در بخش ۲۹ نوشتیم را اینجا هم اضافه کنیم؛ پس مینویسیم:
string Chosen_File = “”;
openFD.InitialDirectory = “C:”;
openFD.Title = “Open a Text File”;
openFD.FileName = “”;
تنها چیزی که نسبت به کدهای بخش ۲۹ تغییر کرده، عنوان پنجره دیالوگ میباشد. برای ادامه کار، میبایست که *****گذاری انواع فایلهای قابلیت باز شدن در این دیالوگ را مشخص کنیم. پس برای خط بعدی کد خود، یک خط زیر را اضافه میکنیم:
openFD.Filter = “Text Files|*.txt|Word Documents|*.doc”;
ابزار Rich Text Box هم میتواند فایلهای .txt را باز کند و هم فایلهای Microsoft Word.
قدم بعدی، نمایش دیالوگ باز کردن فایل است؛ کاری را که در بخش ۲۹ انجام دادیم را تکرار میکنیم:
if (openFD.ShowDialog() != DialogResult.Cancel)
{
Chosen_File = openFD.FileName;
richTextBox1.LoadFile(Chosen_File, RichTextBoxStreamType.Plain Text);
}
اگرچه تقریباً کدهای بالا، همانند کدهای قبل میباشد، اما باید به خط آخر کد کمی دقت کنید؛ چرا که تفاوتی را دارد که احتمالاً شما با آن آشنایی ندارید. (فعلاً نیازی برای دانستن وجود ندارد)
برنامه خود را اجرا کنید و نتیجه را امتحا کنید. در بخش بعدی آموزش، نحوه ایجاد یک Save As Dialog را آموزش خواهیم داد که چگونه میتوانید پس فراخوانی یک متن و اعمال تغییرات بر روی آن، آن را ذخیرهسازی کنید!
بخش سی و یکم
ایجاد یک دیالوگ Save As… یکی دیگر از متدهای مفید در Rich Text Box، متد SaveFile() است. همانطور که از نام آن مشخص هست، این متد کاری میکند که متنهای موجود در Rich Textbox را در قالب یک فایل متنی در سیستم شما ذخیره میکند.
ابتدا، همانطور که برای Open File Dialog یک شیء از Toolbox با نام OpenFileDialog اضافه کردیم، میبایست که برای Save As.. نیز یک Dialog اضافه کنیم. پس طبق تصویر عمل کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی آن دوبار کلیک کرده تا به فرم شما اضافه گردد. چیزی شبیه به شکل زیر را خواهید داشت:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی SaveFileDialog1 کلیک کرده و وارد Properties آن شوید. مشخصه Name آن را به SaveFD تغییر دهید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سپس به منوی File خود برگردید و گزینه Save را دوبار کلیک کنید تا وارد بخش کدنویسی آن شوید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کدی که برای Save کرد از آن استفاده میکنیم، دقیقاً شبیه به کدهای OpenFD خواهد بود؛ تنها تفاوت آن، نامگذاری آن است که باید بهجای OpenFD، SaveFD قرار گیرد. به کد زیر دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر برنامه خود را اجرا کنید و موارد را امتحان کنید، باید تمامی اتفاقات با موفقیت انجام شود.
البته خط کدی که برای شما عمل ذخیره را انجام میدهد، بهشکل زیر است:
richTextBox1.SaveFile(Saved_File, RichTextBoxStreamType.PlainText);
البته باز هم مجدداً ذکر میکنم که روشهای بهتری برای ذخیرهسازی وجود دارد که در آینده در رابطه با آنها بهشکل نسبتاً مفصلتری صحبت خواهم کرد. فعلاً تا همینجا را جهت آموزش داشته باشید.
بخش سی و دوم
استفاده از ابزارهای Checkbox و Radio Button دو ابزار Checkbox و Radio Button هر دوی آنها قابلیت ارائه قابلیت انتخاب چند گزینه توسط کاربر را در اختیار میگذارد، اما این دو با هم یک تفاوت اساسی دارند. Checkbox ها به شما این امکان را میدهند که بگذارید کاربر شما از بین چند گزینه مختلف، چندین گزینه را همزمان با هم انتخاب کنید، ولی در Radio Button، کاربر میتواند تنها یک گزینه از میان چند گزینهی مختلف را انتخاب کند. اینکه کدامیک را در پروژههای خود استفاده کنید، بستگی به نوع گزینههای ارائه شده توسط شما به کاربر دارد.
یک پروژه جدیدی را ایجاد کنید؛ فرم خود را کمی بزرگ و زیبا طراحی کنید. چونکه دو ابزار Checkbox و Radio Button ابزارهای کوچک و با تعداد بالا هستند، برای ایجاد راحتی در جابجایی و کدنویسی، آنها را در GroupBox قرار میدهیم. درنهایت شما میتوانید وقتی که خود GroupBox را تکان دهید، تمامی ابزارهای موجود در آن تکان بخورند.
در جعبه ابزار خود (Toolbox) بهدنبال شیء GroupBox بگردید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یک Groupbox در فرم خود قرار دهید. در پنجره Properties آن، مشخصه Text را پیدا کرده و نام آن را بهشکل زیر قرار دهید:
Text: What Type of Movies Do You Like?
یک GroupBox دیگر نیز در کنار آن قرار دهید و اینبار مشخصه Text آن را بهشکل زیر قرار دهید:
Text: And Your Favorite Is?
درنهایت، فرم شما بهشکل زیر خواهد بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ما در GroupBox اولی، چند Checkbox قرار خواهیم داد و در دومی، چند Radio Button. در Toolbox شیء CheckBox را پیدا کنید و آن را بهشکل یر قرار دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
توسط مشخصه Text آن، نامش را به Comedy تغییر دهید. (همانند شکل بالا)
چند Checkbox دیگر قرار دهید و سعی کنید که بهشکل زیر باشند:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال، در Groupbox دومی، به همین روش چند گزینه از نوع Radio Button اضافه کنید و سعی کنید که بهشکل زیر باشند:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در نهایت، دو Button بهشکل زیر قرار دهید و فرم را تکمیل کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یک بار برنامه خود را اجرا کنید؛ خواهید دید که هرچند تعدادی که میخواهید میتوانید Checkbox انتخاب کنید؛ اما برای Radio Button فقط یک گزینه!
اجرای برنامه را متوقف کنید و دوباره به کار برگردید! کاری که الان انجام خواهیم داد، میخواهیم کدی بنویسیم که ببینیم کاربر کدام گزینه را انتخاب کرده است؛ ابتدا با Checkbox ها شروع خواهیم کرد.
بر روی Button با نام Selected Movies دابل-کلیک کنید. توسط کدی که ما خواهیم نوشت، خواهیم توانست که به Property (مشخصه) Checked از Checkbox ها دسترسی پیدا کنیم. درواقع بررسی میکنیم که آیا برای مثال، Checkbox اولی انتخاب شده است؛ یا خیر! در نهایت نیز دو حالت بیشتر وجود نخواهد داشت؛ یا True است و یا False.
ما میتوانیم توسط دستور IF، شرط فوق را بررسی کنیم. تنها لازم است که True بودن شرط را بررسی کنیم:
if (checkBox1.Checked)
{
//Some codes
}
برای مثال، ما میتوانیم درصورت صحیح بودن شرط فوق، لیست گزینههای انتخابی را با یک Message Box نمایش دهیم.
string movies = “”;
if (checkBox1.Checked)
{
movies = movies + checkBox1.Text;
}
MessageBox.Show(movies);
ما در واقع در داخل شرط IF، کاری میکنیم که نام لیست فیلمهای موجود را در داخل متغیر movies ذخیره کنیم تا زمانی که بر روی Button مروبوط کلیک شود، گزینههای انتخاب شده را نمایش دهد. یک شرط دوم بهشکل زیر اضافه کنید:
string movies = “”;
if (checkBox1.Checked)
{
movies = movies + checkBox1.Text;
}
if (checkBox2.Checked)
{
movies = movies + checkBox2.Text;
}
MessageBox.Show(movies);
برنامه خود را یک بار دیگر امتحان کنید. دو Checkbox اولی را انتخاب کنید و بر روی Button کلیک کنید. پیام زیر برای شما نمایش داده خواهد شد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خوب … ظاهراً که مشکلی ندارد؛ واقعاً هم مشکلی ندارد، اما تنها چیزی که شاید شما را آزار میدهد، عدم وجود یک فاصله میان کلمات هست. پس به کدهای خود برگردید و کدهای داخل شروط را به شکل زیر تغییر دهید:
movies = movies + checkBox1.Text + “\r\n”;
و بهجای کدهای بالا، میتوانید بهشکل زیر عمل کنید:
movies = movies + checkBox1.Text + Environment.NewLine;
برنامه خود را اینبار اجرا کنید و دوباره کارهای قبلی را تکرار کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
به کدهای خود برگردید و بهشکل زیر کدهای خود را تکمیل کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال نوبت به سراغ Radio Button ها میرود. Radio Button ها نیز بهشکل فوق عمل میکنند. فقط باید بهجای IFهای بعدی، از ELSE IF استفاده کنیم. (چون Radio Buttonها فقط قابلیت انتخاب شدن یکی از آنها وجود دارد)
string ChosenMovie = “”;
if (radioButton1.Checked)
{
ChosenMovie = radioButton1.Text;
}
else if (radioButton2.Checked)
{
ChosenMovie = radioButton2.Text;
}
کدها نیز به همین ترتیب پیش میروند.
تمرین: کدهای مربوط به Radio Button را تکمیل کنید و سعی کنید همانند Checkbox ها، وقتی که بر روی Button مروبوط کلیک شد، پیغام مناسب را نشان دهد.
بخش سی و سوم
اشکالزادایی برنامه (Debugging) – قسمت اول اولین جایی که ممکن است با خطاها روبرو شوید، زمان طراحی و کدنویسی برنامه هست که در اصطلاح برنامهنویسی به آن Design-Time Error میگویند. این خطاها حتی پیش از Compile کردن برنامه مشاهده میشود و شما میبایست در صدد رفع آن باشید.
Design-Time Error جزو خطاهایی هستند که راحت میتوان آنها را ردیابی و رفع نمود؛ چرا که نرمافزار Visual Studio بهصورت خطوط رنگی انواع خطاها را برای شما نمایش میدهد. در هنگام کدنویسی شما با سه نوع خط رنگی مواجه خواهید شد؛ آبی، قرمز و سبز.
خطهایی که به رنگ آبی هستند، با نام Edit and continue معروف هستند که بدین معنیست شما میبایست تغییری در کدهایتان ایجاد کنید بدون اینکه برنامه متوقف شود.
خطهای به رنگ قرمز با نام Syntax Error معروف هستند که نمایانگر این هست که یک غلط نحوی در کدنویسی شما وجود دارد.
خطهای به رنگ سبز، اخطارهای کامپایلر (Compile Warning) هستند که زمانی این خطا را میبینید که کامپایلر متوجه میشود که یک مشکل کوچکی وجود دارد که ممکن است بعدها برای شما مشکلساز باشد؛ همانند تعریف متغیری که هرگز از آن استفاده نشود!
خطهای آبی رنگ:
در عکس پایین، شما میتوانید یک خط آبی رنگ زیر عبارت مشخص شده را ببینید. (ممکن است نسخههای جدید Visual Studio این را نیز بهعنوان خط قرمز رنگ در نظر بگیرد)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این خط به این دلیل ظاهر شده چونکه ما TextBoxای با نام textBox2 در فرم نداریم؛ بلکه یک TextBox در فرم وجود دارد که نامش textBox1 است. پس میتوانیم تنها با پاک کردن عدد ۲ و قرار دادن عدد ۱ بهجای آن، به ادامه کدنویسی خود بپردازیم.
اگر نشانگر موس خود را بر روی خطاها نگهدارید، توضیحاتی در رابطه با خطای ایجاد شده نمایش داده میشود، اگرچه همیشه این توضیحات بهطور کامل به شما کمک نخواهند کرد، ولی دیدن و خواندن آنها خالی از لطف نیست!
خطهای قرمز رنگ:
این نوع خطاها به آن Syntax Error میگویند. Syntax در واقع گرامر زبان برنامه نویسی است. همانطور که در زبان فارسی بایست قوانینی را در هنگام صحبت کردن رعایت کنیم تا مفهوم به صورت درست منتقل شود، در زبانهای برنامهنویسی نیز این حکایت صدق میکند.
در عکس زیر ما یک Semicolon را در انتها فراموش کردیم:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر نشانگر موس را روی آن نگهدارید، راهنمایی لازم را به شما خواهد کرد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در عکس بعدی، میبینید که ما یک پرانتز فراموش کردیم که ان را به ما نمایش میدهد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خطهای سبز رنگ:
این نوع خطاها به آن Compile Warning میگویند. به عکس زیر نگاه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر نشانگر موس را بر روی آن نگهداریم، خواهیم دید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این خطا میگوید که شما متغیری با نام CompilerWarning تعریف و مقداردهی شد، اما هیچگاه از آن استفاده نشد.
بخش سی و چهارم
اشکالزادایی برنامه (Debugging) – قسمت دوم
یکی دیگر از خطاهای بسیار متداول، خطایی با نام Run-Time Error میباشد؛ که باعث میشود نرمافزار شما به اصطلاح Crash کند. خود برنامه در ابتدا بدون مشکل Compile و اجرا میشود و مشکلی نخواهید دید، اما مشکلی که ممکن است بعداً برای شما اتفاق بیفتد، Crash کردن برنامه شما در حین اجرا است که موجب میشود نرمافزار شما کارایی خود را از دست بدهد و دیگر قادر به ادامه انجام عملیات خود نباشد.
یکی از متداولترین خطاهای فوق، سعی در تقسیم یک مقدار به «صفر» است! در کد زیر، همانطور که مشاهده میکنید ما در حال تقسیم یک مقدار به صفر است که باعث ایجاد خطای Run-Time میشود.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
وقتی که برنامه را کامپایل میکنید، Visual Studio مشکلی را متوجه نخواهد شد و برنامه بدون هیچ ایرادی شروع به کار میکند؛ اما همینکه بر روی button1 کلیک کنید، خواهید دید که خطایی بهشکل زیر را مشاهده خواهید کرد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
باتوجه به خطای فوق، میتوان متوجه شد که مشکل ناشی از تقسیم عددی به صفر است، اما فرض کنید که این برنامه بر روی سیستم کاربری در حال اجرا است که چنین مشکلی بوجود میآید؛ چه هزینهی سنگینی را باید تقبل کرد!
یکی دیگر از خطاهای ممکن و متدوال، خطای زیر است. در کد زیر، ما سعی میکنیم که فایلی را باز کنیم که در سیستم ما وجود ندارد. (آدرس داده شده اشتباه است!)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همانطور که در خطا میبینید، باز هم Visual Studio سعی در حدس اشتباه میکند و میگوید که فایلی با نام «test10.txt» در مسیر مورد نظر شما وجود ندارد! و چونکه ما به سیشارپ نگفتهایم که اگر فایلی را پیدا نکردی، چهکار کن؛ در نتیجه کنترل خود را از دست میدهد و Crash میکند!
خطاهایی شبیه به خطاهای فوق را میتوان در هنگام کدنویسی از بروز آنها جلوگیری کرد.
بخش سی و پنجم
معرفی دستور Try … Catch دستور Try … Catch بدین شکل عمل میکند که شما به سیشارپ میگویید که یک دستوری را امتحان کن (Try کن)، اگر بدون خطا بود که اجرا کن، اگر دارای خطا بود، آن را کنترل کن (Catch کن). قالب این دستور (Syntax) به شکل زیر است:
try
{
}
catch
{
}
در دستور زیر ما سعی میکنیم که یک فایل متنی را در RichTextBox ای با نام rtb لود کنیم:
try
{
rtb.LoadFile(“C:/test.txt”);
}
catch (System.Exception excep)
{
MessageBox.Show(excep.Message);
}
کد اصلیای را که ما میخواهیم آن را در هنگام لود برنامه اجرا کنیم را همیشه در بین دو براکت مربوط به Try قرار میدهیم. ولی اگر که فایلی با نام text.txt وجود نداشت، دوست داریم که برنامه از کار نیفتد و پیغام “File Not Found” را داشته باشیم. ما میتوانیم که این کار را در دستور Catch انجام دهیم. دقت کنید که در مقابل Catch دستور زیر است:
System.Exception excep
Exception یک شیءای در سیشارپ است که خطاها را کنترل میکند. این شیء در Namespace مربوط به System وجود دارد. پس مینویسیم: System.Exception
پس از ایجاد یک فاصله در مقابل آن (Space)، نام متغیری برای آن تعریف میکنیم؛ که در اینجا آن را Excep نامیدهایم.
اگر در هنگام لود فایل خطایی ایجاد شد، سیشارپ خطای ایجاد شده را در متغیر excep ذخیره میکند. شما وقتی که از مشخصه message برای excep استفاده میکنید، میتوانید خطای ایجاد شده را بهصورت یک String داشته باشید که آن را میتوان در یک MessageBox نمایش داد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
وقتی که برنامه خود را اجرا کنید؛ اگر فایل ذکر شده وجود نداشته باشد، پیغام زیر برای شما نمایش داده خواهد شد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر نوع خطایی که ممکن است بوجود بیاید را از قبل میدانید، میتوانید کدهای خودتان را بهشکل زیر درآورید:
catch (System.IO.FileNotFoundException)
{
MessageBox.Show(“File Not Found!”);
}
برای اینکه بفهمید که خطایی که قرار است ایجاد شود از چه نوع است میتوانید از کد زیر استفاده کنید:
catch (System.Exception excep)
{
MessaegBox.Show(excep.GetType().ToString());
}
که توسط یک MessageBox، نوع خطای ایجاد شده را برای شما مینویسد.
اگر که میخواهید از دردسرهای فوق خلاص شوید و خیلی کار را ساده پیش ببرید، کافیست کد زیر را جایگزین کنید:
try
{
rtb.LoadFile(“C:/test.txt”);
}
Catch
{
MessageBox.Show(“An error occurred”);
}
شما همچنان میتوانید چندین catch قرار دهید:
try
{
rtb.LoadFile(“C:/test.txt”);
}
catch
{
MessageBox.Show(“An error occurred”);
}
catch
{
MessageBox.Show(“Couldn’t find the file”);
}
catch
{
MessageBox.Show(“Or maybe it was something else.”);
}
در نهایت، برای دستور Try .. Catch یک دستور نهایی با نام Finally نیز وجود دارد که میتوانید کارهایی را که لازم است انجام دهد را در آن قرار دهید. فرض کنید که شما فایلی را باز کردهاید که نیاز دارد که آن را ببینید؛ در نتیجه میبایست آن را در Finally قرار دهید.
try
{
rtb.LoadFile(“C:/test.txt”);
}
catch (System.Exception excep)
{
MessageBox.Show(excep.Message);
}
Finally
{
//Close the file here
}
کدهای داخل Finally حتماً یکبار اجرا خواهند شد.
بخش سی و ششم
· معرفی متد (Method)
یک متد، یک بخشی از کد است که یک کار خاصی را انجام میدهد. ماشینحسابی را که پیشتر نوشتهایم را به یاد دارید؟ در آن برنامه ما میتوانستیم که بخشی از کدی را در یک متد بنویسیم که کار جمع انجام دهد؛ بخش دیگری را در متد دیگری مینوشتیم که متد تفریق را انجام دهد؛ و به همین ترتیب برای ضرب و تقسیم. در نهایت، هر کجا که به انجام عملیات فوق نیازی پیدا کردیم، کافیست که متد را صدا بزنیم!
پیش از آنکه کارمان را با متد آغاز کنیم، به این نکته توجه داشته باشید که متد در زبانهای دیگر همانند C++، با نام تابع (Function) شناخته میشود؛ اما مایکروسافت در زبان سیشارپ خود، آن را بهنام متد (Method) به دلایل خاص خودش تغییر نام داده است.
برای شروع کار با متدها، ما یک برنامه سادهای را استارت خواهیم زد؛ بدین نحو که دو شماره را از کاربر بوسیله text box میخواند. ما چهار button نیز خواهیم داشت که عملیات اصلی ریاضی (جمع، تفریق، ضرب و تقسیم) را انجام میدهد. اما این بار این عملیات را با استفاده از متدها انجام خواهیم داد.
پروژهی جدیدی را در Visual Studio آغاز کنید و فرم خود را به شکل زیر طراحی کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
هنگامی که Text Box و Button ها را اضافه کردید، لازم نیست که مشخصه Name آنها را تغییر دهید؛ همانهایی که هستند رها کنید (button1، button2، …(
بر روی button با نام Add Up دوبار کلیک کنید تا پنجره کدنویسی برای شما باز شود. نشانگر جایی که باید تایپ کنید مابین دو براکت مربوط به button با نام Add Up است. ما کاری به داخل براکت نخواهیم داشت؛ لذا این نشانگر را به براکت بسته انتقال دهید و پس از وارد خط جدید شوید و کد زیر را بنویسید:
void AddUp()
{
MessageBox.Show(“Add Up Here”);
return;
}
کد شما به شکل زیر درخواهد آمد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
متدها میتوانند مقداری را برگردانند (اصطلاحاً مقداری را return کنند)؛ مثلاً جواب جمع دو عدد، اما هیچ لزومی ندارند که حتماً مقداری را برگردانند. متدی که ما نوشتیم، یک MessageBox را نشان میدهد که تنها زمانی اجرا میشود که ما آن را صدا بزنیم.
وقتی که شما از متد خود میخواهید که هیچ مقداری را برنگرداند (مثل متد ما)، کافیست قبل از نام متد، کلمه کلیدی Void را قرار دهید. بعد از یک فاصله (Space)، نام تابع را مینویسید و پس از دو پرانتز باز و بسته، دو براکت باز و بسته قرار میدهید و کدهای مورد نظر خودتان را مابین آن مینویسید. انتخاب نام متد نیز همانند انتخاب نام متغیر کاملاً دلبهخواه است و میتواند هر نامی باشد. مثلاً ما در اینجا نام متد خود را AddUp انتخاب کردیم.
در انتهای متد خود، قبل از آنکه براکت بسته شود، کلمهی کلیدیای با نام Return نوشتهایم و در انتهای آن یک Semicolon قرار دادهایم. وقتی که ما متد خود را به شکل void تعریف کردهایم، لزومی بر قرار دادن کلمه کلیدی return نیست، چونکه شما نمیخواهید مقداری را return کنید (برگردانید.) شما فقط این تابع را نوشتید که کار خاصی را انجام دهد و نیازی به مقداری ندارید. ما تنها این کلمه کلیدی return را قرار دادهایم چونکه یک استاندارد در هنگام نوشتن یک متد است.
هنگامی که C# کلمه return را در متدی ببینید (به آن برسد،) از متد خارج میشود و ادامه کدهای موجود در بخش اصلی را انجام میدهد.
متد AddUp که ما نوشتیم، فعلاً هیچ کاری را نمیکنید، چونکه آن را صدا نزدیم. ما میخواهیم که این متد کار خود را زمانی آغاز کند، وقتی که ما بر روی button با نام Add Up کلیک کردهایم. پس برای صدا زدن یک متد، اینگونه مینویسیم:
AddUp();
پس برای صدا زدن این متد در هنگام کلیک بر روی Button با نام AddUp، کد شما باید به شکل زیر باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برنامه خود را یک بار اجرا کنید؛ خواهید دید که زمانی که بر روی Add Up کلیک میکنید، یک MessageBox برای شما ظاهر میشود.
حال میدانید که چه اتفاقی میافتد؟ شما وقتی که بر روی Add Up کلیک میکنید، سیشارپ به سراغ کدهای ما بین مربوط به button1 میرود. در آنجا با متدی با نام AddUp ملاقات میکند. وقتی که میبیند که AddUp از نوع متد است (چون پرانتز باز و بسته دارد)، متوجه میشود که این متد باید جایی در کدهای ما تعریف شده باشد؛ لذا شروع به جستجو میکند تا میبیند که AddUp در زیر تعریف شده است. درنتیجه وارد تعریف داخل متد میشود و کارهای خواسته شده را انجام میدهد و مجدداً به برنامه باز میگردد.
احضار توابع پیش فرض سی شارپ در برنامه نویسی!
بعضی وقتا کدی رو در دستورات یک دکمه (command button) نوشتیم و میخوایم از طریق رویدادی غیر از کلیک اون دکمه اجراش کنیم
روش اصولی اینه که دستور مورد نظر رو در یک متد نوشته و سپس هر جا خواستیم احضارش کنیم
اما شما میتونید در سی شارپ رویداد ها رو شبیه سازی کنید
در مثال زیر رویداد کلیک دکمه اول توسط دکمه دومی فرا خوانی میشه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نکته کلیدی همون
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هست
قسمت قبل پرانتز اسم تابع هست که میتونید از اسم تابع کپی پیست کنید
اون دوتا NULL داخل پرانتز هم پاسخی به پارامتر های درخواستی
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هستند که اولی شیئ ارسال کننده رو مشخص میکنه و دومی نوع رویداد (کمی پیچیده است فعلا نیاز به توضیح نیست)
وقتی مینویسیم null یعنی اطلاعاتی جهت ورود نداریم و مقدار خالی بهش میدیم
بخش سی و هفتم
پاس دادن مقادیر خاصی به متد؛ برگرداندن مقدار معین هنگامی که شما متد جدیدی را در کدهای خود تعریف میکنید، میتوانید مقادیری را به تابع تحویل دهید تا روی آن پردازشاتی انجام دهد. کاری که ما میخواهیم انجام دهیم این است که دو مقدار را به عنوان ورودی به تابع دهیم تا آنها را با هم جمع بزند.
باید بدین شکل عمل کنیم که عددهایی که در Text Box ها وارد میشوند را دریافت کرده؛ در متغیرهایی ذخیره کرده، به تابع پاس دهیم و عملیات جمع را در داخل تابع انجام دهد و در نهایت مقدار مورد نیاز خودمان را «برگرداند.»
به مقادیری که به متدها پاس داده میشود، اصطلاحاً آرگومانهای یک متد میگویند. برای تعریف آرگومانهایی به تعداد مورد نیاز به شکل زیر عمل میکنیم (تعریف دو آرگومان؛ یعنی دو مقدار را میخواهیم به متد پاس دهیم):
void AddUp(int Num1, int Num2)
{
…
}
آیا به مقادیری که در داخل پرانتزها در هنگام تعریف تابع اختصاص دادهایم دقت میکنیم؟ اینها آرگومانهای تابع هستند. به تعداد مورد نیاز آنها را توسط یک کاما (,) جدا کرده و فراموش نشود که نوع هر کدام از آرگومانها قبل از نام متغیر آنها نوشته شود. مثلاً ما میتوانستیم که به شکل زیر تابع را تعریف کنیم:
void AddUp(float Num1, float Num2)
{
…
}
دقت کنید که نامهایی که برای متغیرهای Num1 و Num2 در نظر گرفتهایم یک متغیرهای موقتی هستند. در هنگام استفاده از این تابع نیز باید به این مورد دقت داشته باشیم که هر نوعی که در هنگام تعریف تابع برای آرگومانها در نظر گرفتیم، میبایست که در هنگام پاس دادن مقادیر به این تابع، از همان نوع استفاده کنیم. (int به int – Float به Float و …)
حال متد خودتان را که قبلاً با نام AddUp تعریف کرده بودید را به شکل زیر تغییر دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همانطور که میبینید، ما در اینجا دو آرگومان برای این تابع تعریف کردهایم؛ FirstNumber و secondNumber. اینها همان مقادیری “خواهند بود” که بعداً به متد پاس میدهیم و روی آنها پردازش انجام میدهد. حال نوبت به انجام پرداش میرسید؛ کدهای این متد را به شکل زیر بروزرسانی کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در واقع ما اینجا کاری که کردیم بدین شکل بود؛ یک متغیر در داخل متد تعریف کردیم با نام answer که حاصل جمع دو عدد را به ما در انتها که کار متد AddUp به اتمام میرسد را به ما برگرداند. فعلاً چونکه تابع ما از نوع void هست، هیچ مقداری را بر نمیگرداند؛ بلکه ما الان با استفاده از MessageBox در حال نمایش مقدار answer هستیم؛ و نه برگرداندن مقدار آن!
اگر که به کدهای اصلی مربوط به button1 برگردیم، میبینید که:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر به این error دقت کنید به را به شما میگوید که: «هیچ تعریفی برای این تابع صورت نگرفته است که هیچ آرگومانی را نگیرد.»
حالا چرا این خطا را به ما نشان میدهد؟ ما در تعریف تابع خود دو آرگومان در نظر گرفتیم (آرگومانهایی با نامهای firstNumber و secondNumber) ولی در اینجا ما در بین جفت پرانتزها هیچ مقداری به تابع پاس ندادهایم؛ لذا این خطا را از ما میگیرد.
کدهای خود را به شکل زیر تغییر دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال کدهای ما بهشکل صحیحی نوشته شدهاند. به عکس زیر دقت کنید تا منظور را بهتر متوجه شوید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال شما میتوانید حتی کدهای داخل button1 را نیز به شکل زیر تغییر دهید که در واقع در حال دریافت مقادیر از Textbox ها میباشیم:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یا میتوانید آنها را در متغیرهایی ذخیره کرده و سپس از آنها استفاده کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دقت کنید که هیچ لازم نیست اسامی متغیرهای آرگومانهای ما با نام متغیرهایی که به متد در حال پاس دادن هستیم یکی باشد!
حال نوبت به برگرداندن مقدار از تابع میرسد. متدهایی که تا الان تعریف کردیم، دارای یک کلمهکلیدیای به نام void بودند؛ void یعنی خالی و اصطلاحاً به متدهایی میگویند که هیچ مقداری را برنمیگرداند. اگر میخواهید که تابع شما مقداری را برگرداند، می بایست که بهجای void، نوع مقداری را که میخواهید برگرداند را بنویسید؛ مثلاً int.
یک متد جدید طبق تصویر زیر با نام Subtract تعریف کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر کمی کدهای خودمان را مرتبتر کنیم، به شکل زیر خواهند بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
پیش آنها کدها را شرح دهیم، بر روی کلید مربوط به Subtract دابل-کلیک کنید تا وارد کدهای مربوط به آن شوید؛ کدهای زیر را به آن اضافه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ما کدهای مربوط به این بخش از کلید را در مرحله بعد توضیح میدهیم؛ فعلاً فقط برنامه را اجرا کنید؛ امیدوارم که نتیجه جواب نمایش داده شده درست باشد …
خوب؛ نگاهی به متد جدیدمان بیندازیم:
private int Subtract(int firstNumber, int secondNumber)
آرگومانهای داخل پرانتز دقیقاً شبیه به متدهای قبل بود و دقیقاً به همان شکل عمل میکند؛ دو مقدار را بعنوان آرگومان از کدها میگیرد. چیزی که در این بخش جدید است، قسمت زیر میباشد:
private int Subtract
کلمه Subtract که تنها نام تابع است، اما قبل از خود نام تابع، دو کلمه کلیدی مهمی داریم؛ int و private. کلمه کلیدی private را برای حال فراموش کنید، در آینده به این موضوع خواهیم پرداخت، اما در رابطه با int، ما از آن بجای کلمه void استفاده کردیم، در واقع بجای اینکه هیچ مقداری را برنگرداند، بلکه یک مقداری را که از نوع intمیباشد را برگردانیم.
مجدداً به کدهای زیر نگاه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
به خط آخر دقت کنید:
return answer;
نوع answer چیست؟ int! پس باید نوعی مقداری که در حال برگرداندن هستیم با کلمه کلیدی قبل از نام تابع یکی باشد! این دقیقاً مقداری میباشد که تابع آن را برگردانده است! (یعنی خواهد برگرداند)
خوب، اما از این return کجا استفاده کردیم؟ کد زیر را ببینید:
private void button2_Click(object sender, EventArgs e)
{
int number1;
int number2;
int returnValue=0;
number1 = int.Parse(textBox1.Text);
number2 = int.Parse(textBox2.Text);
returnValue = Subtract(number1, number2);
messageBox.Show(returnValue.ToString());
}
در واقع بدین اتفاقات بدین شکل در حال انجام شدن هستند؛ مقداری را که تابع Subtract برمیگرداند باید در جایی ذخیره شد، لذا متغیری با هم از همان نوع (در اینجا int) ساخته شود تا جواب مربوط به مقدار برگرداندن متد در آن ذخیره شد.
بخش سی و هشتم
تعریف آرایهها و نحوه پیادهسازی
فرض کنید که چندین دانشآموز (=Student) در یک کلاس هستند که قرار است نمرات درس ریاضی آنها در یک متغیر ذخیره گردد. باتوجه به معلوماتی که تا کنون شما دارید احتمالاً شما بهشکل زیر متغیرهای مربوطه را تعریف کنید:
Student_Number_1 = 18;
Student_Number_2 = 16;
Student_Number_3 = 19;
Student_Number_4 = 20;
.
.
.
احتمالاً متوجه هستید که چقدر اینکار باعث اتلاف وقت میشود و از لحاظ کدنویسی غیربهینه میباشد. توسط آرایهها شما میتوانید تنها یک متغیر با یک نام را داشته باشید که میتوانید تعداد مشخصی از نمرات مربوط به درس ریاضی دانشآموزان یک کلاس را در آن ثبت کنید.
نحوه پیادهسازی آرایهها بدین شکل است؛
int[] Student;
در واقع ابتدا نوع متغیر را تعیین میکنید (برای مثال int) و سپس دو براکت باز و بسته در کنار هم قرار داده و با یک فاصله، نام متغیر خود را انتخاب میکنید. برای ایجاد آرایهای از Stringها نیز بدین شکل عمل میکنیم:
string[] my_string;
در واقع متوجه هستید که نحوه پیادهسازی هر نوع متغیر همانند بقیه است.
نکته بعدیای که حائز اهمیت فراوانی میباشد، سایز یک آرایه است. برای مثال، در نمونهای که برای ثبت نمرات ریاضی دانش آموزان ذکر شد، میدانیم که (مثلاً) تعداد دانشآموزان یک کلاس، ۳۱ نفر میباشند؛ پس میبایست که به سیشارپ این کد فرمان دادهشود که سایز آرایهی ما را ۳۱تایی کند؛ بدین شکل:
int[] Student = new int[31];
بعد آنکه شما علامت مساوی را قرار میدهید، یک کلمه کلیدی به نام new اضافه میکنید که در واقع برای سیشارپ این مفهوم را القا میکنید که ما یک شئ جدیدی (new object) داریم. بعد از کلمه کلیدی New، مجدداً نوع متغیرخود را نوشته و اینبار براکتها را خالی نمیگذاریم؛ بلکه سایز مورد نیازمان را برای آرایه مینویسیم.
تا اینجا این مورد را فرا گرفتید که چگونه یک آرایه از یک نوع خاص بسازیم. حال نوبت به مقدار دهی میرسد. تا الان که ما آرایهای به نام Student داریم، دارای هیچ مقداری در داخل خود نمیباشد. برای انتساب یک مقدار به آرایه، به شکل زیر عمل میکنیم:
array_name[شماره آرایه] = array_value (مقدار مورد نظر)
برای مثال، برای ثبت نمرات دانشآموزان نفر ۱۰، ۱۱ و ۱۲، بدین شکل عمل میکنیم:
Student[10] = 20;
Student[11] = 18;
Student[12] = 13;
بخش سی و نهم
حلقه در آرایهها
اگر پروژهی از پیش ساختهای از قبل ندارید، یک پروژهی جدیدی را آغاز کنید و در در form ایجاد شده، یک button و یک listbox از بخش toolbox اضافه کنید. بر روی button دابل-کلیک کنید تا پنجره مربوط به کدنویسی باز شود. برای شروع، کد زیر را اضافه کنید تا ابتدا اگر مواردی در listbox موجود باشد، آنها را محو کند:
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
}
برای دومین و سومین خط از کدنویسی، موارد زیر را اضافه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال برای هر یک از بخشهای موجود در آرایه، یک مقداردهی اولیه انجام دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای نمایش تکتک مقادیر موجود در آرایه در listbox، شما اینکار را خواهید کرد:
listBox1.Items.Add(lottery_numbers[0]);
listBox1.Items.Add(lottery_numbers[1]);
listBox1.Items.Add(lottery_numbers[2]);
listBox1.Items.Add(lottery_numbers[3]);
و برای اینکه مقادیر را از آرایهها دریافت کنیم، ما فقط نام آرایه و محل مورد نظر خودمان را مینویسیم تا مقدار مورد نظر برگرداندهشود. هماهنند زیر:
lottery_numbers[0];
این کارها برای نمایش مقادیر داخل آرایه در listbox کفایت میکند؛ دقت کنید که کدهایتان میبایست مشابه زیر شده باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون کافیست که یکبار نرمافزار خود را اجرا کرده تا نتیجه را مشاهده کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خوب؛ برنامه خود را ببینید. اگر دقت کنید، متوجه خواهید شد که سایز آرایه ما بسیار کوچک است و تنها ۴ شماره را در خود ذخیره میکند؛ فرض کنید اگر آرایهی ما ۱۰۰تایی باشد چه اتفاقی رخ خواهد داد؟ پس میبایست ما با استفاده از یک حلقه، بتوانیم (برای مثال) ۱۰۰ بار یک آرایه را پیمایش کنیم تا تمامی مقادیر داخل آن را بدست بیاوریم و در listbox نمایش دهیم.
به کد زیر دقت کنید:
for (int i = 0; i != (lottery_numbers.Length); i++)
{
listBox1.Items.Add(lottery_number[i]);
}
کد بالا بدین شکل است؛ چون آرایهها از مکان ۰ (صفر) شروع میشوند، پس ابتدای حلقه را صفر در نظر میگیریم (i = 0)
در قدم بعدی، میبایست به اندازی طول (length) آرایه، در آن پیمایش کنیم؛ پس کد زیر بدین معنی است که تا زمانی که به انتهای آرایه نرسیدیم، حلقه را ادامه بده:
i != (lottery_numbers.Length);
و در نهایت، در هر بار با استفاده از کد i++، یک خانه در آرایه جلوتر میرویم. کد مربوط به بدنه نیز کاملاً مشخص میباشد و نیازی به توضیح ندارد.
حال کدهای قبلی خودتان را پاک کنید و سعی کنید کدتان شبیه به کد زیر شود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال برنامه خود را اجرا کنید و مجدداً نتیجه را ببینید؛ متوجه خواهید شد که برنامه شما اینبار با کدهای خیلی کمتر، به درستی کار میکند. به عکسهای زیر نیز دقت کنید تا نحوه کار حلقه را کمی بهتر متوجه شوید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
شما میتوانید با استفاده از خود حلقه، حتی نسبت به مقداردهی آرایه نیز اقدام کنید؛ انجام این کار را به عهده شما قرار میدهیم، تنها یک نمونه کد در اینجا برای شما قرار میدهیم:
for (int i = 0; i != (lottery_numbers.Length); i++)
{
lottery_numbers[i] = i + 1;
listBox1.Items.Add(lottery_numebrs[i]);
}
بخش چهل ام
تعیین سایز آرایه پس از اجرا سایز آرایه بیانگر تعداد آیتمهایی هست که میتواند در خود نگهداری کند. شما تعریف آرایه با یک سایز معینی را بدین شکل فرا گرفتید:
int[] Array;
Array = new int[10];
و یا:
int[] Array = new int[10];
همانطور که در مقدمه برای شما آورده شد، مشکلی که ممکن است برای شما بوجود بیاید این است که باید پس از اجرای برنامه، سایز آرایه تعیین شود.
ما بدین شکل عمل خواهیم کرد با اضافه کردن یک Text Box و Button، سایز مورد نظر کاربر را از طریق Text Box دریافت کنیم و پس از کلیک کردن بر روی button، سایز آرایه را تعیین کنیم.
از پروژهای که از پیش داشتیم، فرمتان را به شکل زیر در آورید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همانطور که میبینید ما بصورت پیشفرض، مقدار ۵ را در Textbox وارد کردیم؛ شما میتوانید هر مقداری را که مورد نیاز خودتان است، وارد نمایید!
بر روی Button خود دوبار کلیک کنید تا وارد بخش کدنویسی شوید. کدهای زیر را وارد کنید:
int aNumber = int.Parse(textBox1.Text);
int[] arraySize = new int[aNumber];
خط اول در کد مقدار وارد شده در TextBox را دریافت میکند و به عدد صحیح تبدیل کرده و در متغیر aNumber ذخیره میکنیم. سپس این مقدار را در خط بعدی به آرایه مورد نظر ما اعمال میکنیم.
حلقه زیر را نیز در ادامه کدهایتان قرا دهید تا مقدار دهی به آرایه مورد نظرتان انجام شود:
for (int i = 0; i != (arraySize.Length); i++)
{
arraySize[i] = i+1;
listBox1.Items.Add(arraySize[i]);
}
برنامه خود را مجدداً اجرا کنید و بر روی Button کلیک کنید؛ چنین چیزی را مشاهده خواهید کرد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال مقدار ۵ را حذف کنید و عدد دیگری را وارد کنید؛ خواهید دید که آرایه شما مقدار دهی جدیدی را خواهد داشت. یعنی در واقع در حالی که برنامه در حال اجراست (Run-Time) شما به آرایه خودتان سایزهای متفاوتی را منتسب میکنید.
بخش چهل و یکم
آرایههای چندبعدی چیزی که تا کنون برای تعریف آرایهها داشتیم، مشابه شکل زیر بود:
int[] array = new int[5];
که در واقع، ۵ خانه از حافظه را به شکل سطری و پشت سر هم رزرو میکند. به جدول زیر نگاه کنید؛ متوجه سطری بودن یک آرایه میشوید؛ بدین شکل که در هر Position (محل) از حافظه که مختص این آرایه هست، مقداری ذخیره شده است.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حال فرض کنید که بخواهیم که در یک آرایه، به جای سطر(ها)، همزمان هم سطر داشته باشیم و هم ستون؛ در واقع یک آرایهی دو بعدی میخواهیم که به ازای هر یک خانه از سطرها، چندین ستون داشته باشد. به جدول زیر دقت کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای اینکه یک آرایه دو بعدی در سیشارپ پیاده سازی کنیم، از دستور (Syntax) زیر استفاده میکنیم:
int [ , ] arrayTimes;
سپس بایستی آن را new کنید که برای مثال بدین شکل آن را new میکنیم:
arrayTimes = new int[5, 3];
به دو رقم ۵ و ۳ دقت کنید؛ رقتم اول، محل سطرها هست و رقم دوم، ستونهای موجود برای هر یک سطر میباشد.
استفاده از یک آرایه دو بعدی، هر چند بعضی وقتها واقعاً یک نیاز است، اما خوب، از لحاظ بهینه بودن در بعضی مواقع دچار تردید خواهید شد؛ چرا که برای دسترسی به عناصر آن، میبایست از دو حلقه تو در تو استفاده کنید!
کدهای زیر را برای یک button تعریف کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
و با اجرای فرم خود و کلیک بر روی Button، چنین چیزی را خواهید داشت:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
توجه کنید که مبحث آرایههای چند بعدی، تنها به دو بعد مختص نیست؛ شما میتوانید به همین شکل، آرایههای سه بعدی (مکعبی) و بیشتر نیز ایجاد کنید!
بخش چهل و دوم
بکارگیری رشتهها در آرایهها
با استفاده از پروژههای سابق، یک button به فرم خود اضافه کرده و مشخصه Text آن را به String Arraysتغییر دهید. روی آن دابل کلیک کنید تا وارد بخش کدنویسی آن شوید.
برای اینکه متنی را در آرایه ذخیره کنید، میبایست نوع آرایه را از جنس string انتخاب کنید؛ شکل کلی تعریف آرایه همچنان ثابت خواهد ماند.
string[] arrayStrings;
arrayStrings = new string[5];
بنابراین کد بالا آرایهای با ۵ خانه برای شما در حافظه رزرو خواهد کرد که بتواند مقادیری از اون متن در خود ذخیره کند.
اکنون این ۵ خانه را مقدار دهی میکنم؛ دقیقاً به همان شکلی که آرایههای int را مقدار دهی میکردیم:
arrayStrings[0] = “This”;
arrayStrings[1] = “is”;
arrayStrings[2] = “a”;
arrayStrings[3] = “string”;
arrayStrings[4] = “array”;
کدهای بالا را نیز به کدهای مربوط به button جدید خود اضافه کنید تا در ادامه حلقهی ForEach را برای شما معرفی کنیم.
حلقهای جدید با نام ForEach
همانند قبل، برای اینکه به تکتک خانههای موجود در آرایهی خود دسترسی پیدا کنید، میبایست که از یک حلقه for استفاده کرده تا در تکتک خانههای موجود گشت بزنید و مقادیر آنها را به خروجی بدهید. چیزی شبیه به کد زیر:
for (int i=0; i != (arrayStrings.Length); i++)
{
listBox1.Items.Add(arrayStrings);
}
اما ما حلقهی دیگری داریم که تا کنون با آن آشنا نبودهاید که به آن حلقه foreach میگویند. این حلقه زمانی برای شما کاربرد خواهد داشت که در حال کار کردن با «مجموعه»ای از مقادیر هستید. نحوهکار کردن با این حلقه را برای شما توضیح خواهیم داد، اما فعلاً کد زیر را بجای کد بالا در ادامه کدهایتان قرار دهید:
foreach (string ArrayElement in arrayStrings)
{
listBox1.Items.Add(ArrayElement);
}
کد بالا که در Visual Studio کپی کردهاید، به کلمات کلیدی (Keywords) که با رنگ آبی مشخص میشوند دقت کنید که در کجاها قرار گرفتهاند. شما ابتدا با کلمه foreach شروع کرده و به همراه آن، یک جفت پرانتز باز-بسته در مقابل آن قرار داده و با اضافه کردن یک جفت براکت باز-بسته، محدود حلقه خود را مشخص میکنید.
به کد موجود در میان پرانتز دقت کنید؛
string [I]ArrayElement in arrayStrings
در واقع کد بالا حاوی دو بخش است که ما آن را در یک بخش مینویسم. در قسمت اول، یعنی string ArrayElement، شما یک متغیر جدیدی از همان نوع (string) تعریف میکنید. این متغیر جدید، المانهای موجود در هر یک (معنی کلمه for each) از مکان موجود در آرایهی خود را در نزد خودش نگهداری میکنید. در قسمت دوم، مکانیست که شما به سیشارپ میگویید که نام آرایه/مجموعه شما چیست که پس از استفاده از کلمه کلیدی in، نام آن را مینویسید.
در واقع این حلقه در هر مرحله از اجرای خود، تکتک خانههای آرایه/مجموعه نامبرده شده را گشت میزند، آن را در ArrayElement ذخیره میکند و سپس آن را به listBox اضافه میکند. به عکس زیر هم دقت کنید که مفهوم حلقه foreach را برای شما سادهتر میکند:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
نرمافزار خود را اجرا کنید؛ بر روی button جدید کلیک کرده، میبایست نتیجه مشابه زیر باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بخش چهل و سوم
استفاده از List<> همانطور که از نامش پیداست، مفهومی که با آن سر و کار داریم یک «لیست» است؛ یعنی زمانی از آن استفاده میکنیم که بخواهیم آیتم جدیدی به آن اضافه، آیتمی را از آن حذف و یا در آن جستجو کنیم؛ یا مثلاً اطلاعات وارد شده را Sort (مرتب) کنیم و …
برای مثال، شما معلمی هستید که در کلاس خود ۱۰ دانشآموز حضور دارند. شما میتوانید لیستی از دانشآموزان خود درست کنید که اسامی آنها را ذخیره کرده، اگر آنها را بر اساس حروف الفبا مرتب کنید، دانشآموز جدیدی را اضافه کنید و یا دانشآموزشی را از آن حذف نمایید. اگر از یک آرایه معمولی استفاده کنید، میدانید که انجام کارهای فوق بسیار سخت است.
اکنون Visual Studio را اجرا نموده و یک پروژه جدید ایجاد نمایید. یک Button و Listbox اضافه کنید. بر روی Button خود دابل-کلیک کنید تا وارد بخش کدنویسی مربوطه شوید. به کدهای آماده (خصوصاً کدهای بالا) دقت کنید. الان شما کدهایی را میبینید که با Using شروع میشوند.
Using مربوط به List<>، همانی هست که کد آن بدین شکل است: System.Collections.Generic
اگر نمیتوانید آن را ببینید، خودتان آن را بصورت دستی اضافه کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
نحوه نعریف یک لیست در سیشارپ بهشکل زیر میباشد:
List<string> students = new List<string>();
ابتدا با کلمه کلیدی List شروع کرده، در داخل علامتهای مربوطه نوع لیست خودتان را انتخاب میکنید و پس از ایجاد یک فاصله (Space)، نام متغیر را تعیین میکنید و در نهایت، آن را new میکنید. کدهای شما میبایست که به شکل زیر شده باشند:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون زمان اضافه کردن اطلاعات به لیست خود میباشید. برای اضافه کردن اطلاعات به لیست خود، میتوانید پس از ذکر نام لیست خود که انتخاب کردهاید، از متد Add استفاده نمایید. به کدهای زیر دقت کنید:
students.Add(“Jenny”);
students.Add(“Peter”);
students.Add(“Mary Jane”);
کدهای شما اکنون بدین شکل خواهند بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای دسترسی به لیست خود نیز میتوانید از حلقه foreach استفاده کنید. کد زیر را اضافه کنید:
foreach (string child in students)
{
listBox1.Items.Add(child);
}
بدین ترتیب که ما با استفاده از این حلقه در این لیست در حال گردش هستیم. اگر هم میخواهید از لحقه معمولی For استفاده کنید، میتوانید از کد زیر استفاده نمایید:
for (int = 0; i <students.Count; i++)
{
listBox1.Items.Add(students[i]);
}
دقت کنید که Count در student.Count تعداد آیتمهای موجود در لیست را برمیگرداند.
اما پیشنهاد میشود که در لیستها از حلقههای Foreach استفاده کنید.
کدهای خودتان را اجرا کنید؛ نتیجه را خواهید دید!
مرتبسازی لیست
یکی از مهمترین کارهایی که میتوان در List<> انجام داد، مرتبسازی آن میباشد. شما میتوانید با استفاده از متد Sort()، اقدام به مرتبسازی مقادیر موجود در داخل لیست اقدام نمایید. به کد زیر دقت کنید:
students.Sort();
اگر کد زیر را پیش از نمایش آیتمها در Listbox اضافه کنید، خواهید دید که نتیجهی حاصل، یک لیست مرتبشده بر اساس حروف الفبا میباشد. اگر نوع لیست را از نوع عدد میگرفتید، نتیجهی حاصل، بر اساس ترتیب اعداد میبود.
برای اینکه لیست خود برعکس کنید، میتوانید از متد Reverse() استفاده کنید. به کد زیر دقت کنید:
stundents.Reverse();
حذف مقدار از List<>
شما میتوانید از دو روش مقادیر موجود در لیست را حذف کنید؛ یا اینکه مقدار مورد نظر را میدانید و آن را به تابع میگویید تا آن را حذف کند، و یا یک رنجی از میخواهید حذف کنید که باید شماره محل قرار گرفتن آن را به متد پاس دهید. این کارها توسط دو متد Remove و RemoveRange انجام میشود. به کدهای زیر دقت کنید:
student.Remove(“Peter”);
این کد، آیتم مربوط به Peter را حذف میکند.
student.RemoveRange(0, 2);
این کد، اولین مقدار (که در اینجا صفر است) محل شروع حذف کردن را به شما میگوید و مقدار دوم (که ۲ میباشد) تعداد خانههای بعد از اولین مقدار (که اینجا صفر است) را که میخواهید حذف کنید را از شما میگیرد.
بخش چهل و چهارم
آشنایی و استفاده از Hashtable ما زمانی از Hashtableها استفاده میکنیم که میخواهیم آیتمهایی را به مجموعهی خود اضافه کنیم که براساس کلید/مقدار باشند. شاید برایتان کمی مفهوم کلید/مقدار (Key/Value) ناآشنا باشد، پس با یک مثال با هم جلو میرویم.
برای مثال، نام یک دانشآموز و نمرهی او در امتحان. در واقع شما میتوانید چنین مقادیری را در Hashtable اضافه کنید؛ یعنی میتوانید نوع string و int را با همدیگر مخلوط کنید.
به فرمی که در جلسه پیش ساختهایم، یک Button اضافه کنید؛ بر روی آن دابل کلیک کنید. ابتدا به قسمت بالای کدها (بخش Usingها) دقت کنید. توجه داشته باشید که برای استفاده از Hashtable، میبایست از Using زیر استفاده کنید:
using System.Collections;
شما تا الان عبارت System.Collections.Generic را داشتهاید، اما Hashtable جزو این namespace نیست، بلکه جزو namespace با نام Collections میباشد.
در داخل بخش کدنویسی مربوط به Button جدید خود، با استفاده از کد زیر یک Hashtable تعریف کنید:
Hashtable students = new Hashtable();
با استفاده از کد بالا، شما شیءای با نام Students از نوع Hashtable تعریف میکنید. برای اینکه به این Hashtable مقدار بدهید (آیتمهایی را به آن اضافه کنید)، شما دو راه پیش رو خواهید داشت. یعنی در واقع اینکار به دو روش انجام میشود.
راه اول:
students[“Jenny”] = ۸۷;
students[“Peter”] = “No Score”;
students[“Mary Jane”] = ۶۴;
students[“Azhar”] = ۷۹;
راه دوم:
students.Add(“Jenny”, ۸۷);
students.Add(“Peter”, “No Score”);
students.Add(“Mary Jane”, ۶۴);
students.Add(“Azhar”, ۷۹);
کارهایی که در کدهای بالا در حال انجام است کاملاً مشخص است؛ نام دانشآموز در ابتدا قرار میگیرد و در مقابل آن نمرهی مربوط به امتحان او وارد میشود.
اما باید به نکتهای توجه کنید؛ در روش اول، اگر دو نام متشابه با مقادیر متفاوت داشته باشید، مشکلی برایتان بوجود نخواهد آمد، اما در روش دوم، کامپایلر از شما خطا میگیرد. به مثال زیر دقت کنید:
کد غلط:
students.Add(“Jenny”, ۸۷);
students.Add(“Jenny”, ۳۵);
کد درست:
students[“Jenny”] = ۸۷;
students[“Jenny”] = ۳۵;
برای اینکه خودتان نیز در این پروژه کار با Hashtableها را امتحان کنید، کدهای زیر را قرار دهید:
Hashtable students = new Hashtable();
students[“Jenny”] = ۸۷;
students[“Peter”] = “No Score”;
students[“Mary Jane”] = ۶۴;
students[“Azhar”] = ۷۹;
foreach (DictionaryEntry child in students)
{
listBox1.Items.Add(“student: “ + child.Key + “ ,Score: “ + child.Value);
}
پیش از آنکه کدهای بالا را اجرا کنید، به عبارت زیر دقت کنید:
DictionaryEntry child
در سیشارپ، در هنگامی که از حلقه foreach برای Hashtableها استفاده میکنید، میبایست که از نوع داده DictionaryEntry استفاده کنید؛ به این دلیل است که این نوع داده میتواند همزمان هم Key را به ما برگرداند و هم Value را.
به عبارتهای child.Key و child.Value نیز دقت کنید؛ اینها همان Key/Valueهایی هستند که میتوانید بصورت مستقیم به آنها دسترسی پیدا کنید؛ که ما در اینجا برای نمایش نام دانشآموز و نمرهی او در ListBox، مجبور شدیم که از آنها استفاده کنیم.
نرمافزار خود را اجرا کنید؛ باید شاهد چنین نتیجهای باشید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
درضمن توجه داشته باشد که در Hashtableها نیز همانند لیستها میتوانید مقادیری را اضافه و حذف نمایید. برای حذف باید از Key استفاده کنید و بدین شکل حذف کنید:
students.Remove(“Peter”);
بخش چهل و پنجم
آشنایی با و نحوهی استفاده از Enumeration
شما با استفاده از Enumerationها، می توانید مجموعه ای از اشیاء مورد نظرتان را پیاده سازی کنید. برای مثال، در نظر بگیرید که می خواهید که یک لیستی از عناوین دروسی که یک دانشجو می تواند آن ها را مطالعه کند را داشته باشید. شما در اینجا می توانید از Enumeration استفاده کنید.
پروژه ای را که جلسه ی پیش داشتیم را مجدداً اجرا نمایید؛ یک button جدید به فرم خود اضافه کرده و نام آن را به Enumeration تغییر دهید. بر روی button ای که هم اکنون آن را ساخته اید دابل کلیک کنید تا وارد بخش کد نویسی شوید.
با توجه به عکس زیر، سطری که با enum شروع می شود را بیرون از متد مربوط به button بنویسید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
شما ابتدا از کلمه ی کلیدی enum استفاده می کنید. بعد آن یک فاصله (space) ایجاد کرده اید؛ نام مربوط به لیست خود را وارد میکنید. در میان دو براکت، لیست مورد نظر را نوشته و برای ایجاده فاصله میان هر آیتم، از کاما استفاده میکنید. ما در لیست بالا، ۵ آیتم را اضافه کردهایم.
برای اینکه از لیست خود استفاده کنید، در داخل کد مربوط به Button جدید خود، خط زیر را وارد کنید:
Subjects newSubject = Subjects.Science;
در واقع شما نام را وارد کرده، و یک شی جدید از آن در ادامه با نام دلخواه میسازید. پس از درج مساوی و نوشتن مجدد اسم لیست خود، با توجه به عکس پایین، لیستی که از قبل اضافه کردهاید برای شما نمایان میشود که میتوانید از میان آن، موردی را انتخاب کنید. در ضمن، دقت کنید که آیتمها به ترتیب از شماره صفر شمارهگذاری میشوند و تا انتها پیش میروند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
برای آن که لیست را در یک Message Box نمایش دهید، میتوانید از دستور زیر استفاده کنید:
MessageBox.Show( newSubject.ToString() );
با باید توسط متد ToString() آن را تبدیل کنیم؛ چرا که مقادیر در اصل بصورت متن نیستند!
بخش چهل و ششم
عملیات و دستکاریها بر روی String در بخشهای آموزشیای که تا کنون همراه با ما بودهاید، با متغیرهای از نوع String بسیار زیاد کار کردهاید، اما همه امکانات این متغیرها، تنها چیزهایی که تا کنون فراگرفتید نیست؛ موارد بسیاری وجود دارد که حتی تا فرصت گفتن آنها رو هم نخواهیم داشت.
سیشارپ همراه با متدها و توابع مختص به خودش برای کار با متغیرهای از نوع String عرضه شده. برای آشنایی با بعضی از امکانات موجود، میتوانید هم اکنون پروژهی جدیدی را از نوع Windows Application ایجاد کرده، یک Button و یک Textbox به فرم خود اضافه کنید.
برای Textbox، مشخصهی Text آن را به “some text” تغییر دهید. دقت کنید که دقیقاً عین عبارت نوشته شده را در Textbox بنویسید (از حروف بزرگ انگلیسی استفاده نشود.)
اکنون بر روی Button خود دابل-کلیک کرده تا وارد بخش کدنویسی مربوط به آن شوید. سپس خط کد زیر را در آن وارد کنید:
string stringVar = textbox1.Text;
در خط بعدی، کد زیر را بنویسید:
textbox1.Text = stringVar.
هنگامی که این نقطهی موجود در آخر را قرار میدهید، منوی IntelliSense برای شما ظاهر میشود که دارای متدهای بسیار بسیار زیادی میباشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یک لیست بلندتری از امکانات موجود را نیز میتوانید در تصویر زیر ببینید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعضی از متدهای موجود ممکن است که اصلاً از آنها استفاده نخواهید کرد، بعضی دیگر نیز ممکن است استفادهی روزانه شما باشد.
برای زمان فعلی، گزینه ToUpper را انتخاب کنید. چون این یک متد است، باید یک جفت پرانتز باز و بسته در مقابل آن قرار دهید. (دقت کنید که در سیشارپ، متدها با رنگ بنفش نشانداده میشوند.) همانطور که در تصویر زیر میبینید، دو تعریف برای این تابع موجود می باشد. می توانید با استفاده از کلیدهای جهت ( بالا و پایین ) ، به دو تعریف ان دسترسی داشته باشید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای استفاده فعلی ما، تنها یک جفت پرانتز باز و بسته ی خالی قرار خواهید داد. به صورت زیر:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
هماکنون برنامه خود را اجرا کنید؛ بر روی Button کلیک کرده و ببینید که چه اتفاقی میافتد. می بینید که تمامی حروف کوچک به حروف بزرگ تبدیل شده اند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
متد دیگری با نام ToLower وجود دارد که عکس متد قبلی عمل می کند؛ در واقع حروف بزرگ را به کوچک تبدیل می کند.
در بخش های بعدی، با قابلیت های دیگر آشنا خواهید شد.
بخش چهل و هفتم
انجام عملیات هنگامی که بخش قبلی برای شما منتشر شد، دیدید که در توابع و متدهای فراوانی برای انجام عملیات مختلف بر روی String وجود دارند. اگر نگاه دیگری به آن بیندازید، میبینید که سه متد متشابه در رابطه با Trim کردن وجود دارند؛ Trim، TrimEnd و TrimStart. توسط این متدها، میتوانید کارکترها را Trim کنید. اما Trim چیست؟
Trim بدین معنیست که کارکترهای اضافی و بیخود اطراف یک متن را از بین میبرد. فرض کنید که در یک فرم از کاربر خود میخواهید که نام خود را وارد کند. اگر این کاربر نام خود را همراه با اضافه کردن فواصل بیخود وارد کند (یعنی قبل از اسم یا بعد از اسمش به تعداد زیادی space وارد کند) نتیجه چه می شود؟ خواهید دید که همه ی آن فواصل اضافه، همراه با اسم کاربر وارد پایگاه داده های شما شده و عملاً جستجوی رکوردها را برای شما سخت تر خواهد کرد.
توسط متد Trim شما می توانید که این فواصل اضافی را حذف کنید و سپس آن ها را در پایگاه داده های خود ذخیره کنید. اما هر یک از آن سه تابع چه کاری می کند؟
Trim: توسط این متد هرگونه فاصله ی اضافی را در هر کجای متن شما را پاکسازی میکند.
TrimEnd: این متد، فواصل اضافی را در انتهای متن حذف می کند.
TrimStart: این متد، فواصل اضافی را در ابتدای متن حذف می کند.
به پروژه ی قبلی خود مراجعه کنید و یک Button جدید به فرم خود اضافه کنید. می توانید که property مربوط به Text هر یک از Button ها را تغییر دهید. برای button اول Text را “Uppercase” وارد کنید. برای button جدید، text را “Trim” وارد کنید.
یک Text box دیگری را اضافه کنید و Text مربوط به آن را به شکل زیر همراه با رعایت فواصل وارد کنید:
“ Trimming “
فرم خود را به شکل زیر درآورید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بر روی button جدید خود دابل-کلیک کنید تا وارد بخش کد نویسی آن شوید. ما می توانیم که تعداد کارکترهای موجود در یک string را توسط stringLength محاسبه کنیم. کد زیر را وارد کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خط اول متن موجود در text box را دریافت کرده و در متغیری به نام stringTrim ذخیره می کند. به خط دوم دقت کنید؛ در این خط متغیری از نوع int تعریف شده و سپس تعداد کارکترهای موجود در متغیر stringTrim را در خود ذخیره می کند و در خط سوم، توسط یک Message box، تعداد کارکترهای موجود به نمایش گذاشته می شود.
اگر برنامهی خود را اجرا کنید، خواهید دید که جواب آن ۱۴ می باشد؛ یعنی علاوه بر ۸ کارکتر که مربوط به خود کلمه Trimming می باشد، ۶ کارکتر مربوط به فواصل موجود در ابتدا و انتهای کلمه است.
به کد خود بازگشته و کد خود را مطابق شکل زیر تغییر دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر می خواهید که توسط متد Trim، فواصل اضافی موجود را حذف کنید، در بین پرانتزهای موجود برای متد trim، چیزی قرار ندهید. در واقع، این متد را بدون آرگومان صدا بزنید و از آن استفاده کنید.
اما اگر می خواهید که یک کارکتر خاصی (در اینجا برای مثال خط فاصله استفاده شده) را از بین ببرید، شبیه کد زیر عمل کنید؛ آن را در یک آرایه ذخیره کرده و به متد Trim پاس دهید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بخش چهل و هشتم
متد Contains شاید بعضی وقت ها برای شما اتفاق بیوفتد که بخواهید برنامهی خودتان را به نحوی طراحی کنید که در یک String، بررسی کند که آیا کارکترهای خاصی در آن وجود دارد یا خیر؛ برای اینکه این کار را انجام دهید، می توانید که از متد Contains استفاده کنید. استفاده از این متد بسیار بسیار ساده می باشد!
برای نمونه، به عکس زیر دقت کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بعد از آن که از متد Contains استفاده کردید، در مقابل آن یک جفت پرانتز باز و بسته قرار داده، در بین آن ها، کارکترهایی که می خواهید وجود یا عدم وجود آن ها را بررسی کنید را می نویسید. ما در این مثال، از وجود کارکتر «خط فاصله» مطمئن می شویم.
متد Contains به نحوی کار می کند که اگر کارکتر مورد نظر شما در متنتان موجود باشد، مقدار True را بر می گرداند، در غیر این صورت، مقدار False را بر می گرداند.
بخش چهل و نهم
متد IndexOf متد IndexOf می تواند زمانی مورد استفاده شما قرار گیرد که بخواهیم بررسی کنیم که آیا کارکتری در بین کارکتر دیگری وجود دارد یا نه. برای مثال، در نظر بگیرید که شما بخواهید یک ایمیلی که توسط فردی وارد شده است را بررسی کنید که آیا حاوی کارکتر @ هست یا نه؛ اگر وجود نداشت، شما می توانید برای کاربر پیامی صادر کنید تا ادرس ایمیل خود را به دلیل اشتباه بودن آن ، تصحیح کند.
به فرمی که در پیش داشته ایم، یک button و یک text box جدید اضافه کنید. مشخصه ی text مربوط به Text box را یک ایمیل وارد کنید. بر روی button خود دابل کلیک کنید تا وارد بخش کدنویسی آن شوید. کد ها را مطابق با تصویر زیر وارد نمایید :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اولین موردی که می بایست درباره آن توضیحاتی دهم، این است که IndexOf چگونه کار می کند. به این خط از کد دقت کنید:
int result = stringEmail.IndexOf(“@”);
متد IndexOf، مقداری از نوع int بر میگرداند. این شماره، محل قرارگیری کارکتر مورد نظر شما در کلمه ی وارد شده می باشد. در کد بالا، ما می خواهیم که کلمه ای را بررسی کنیم که در متغیری با نام stringEmail ذخیره شده است. ما در واقع می خواهیم بررسی کنیم و ببینیم که آیا متن ما حاوی @ می باشد یا نه! این مقدار در بین پرانتزهای مربوط به متد IndexOf قرار می گیرد. اگر که C# (سیشارپ) کارکتر مورد نظر را پیدا کند، محل قرارگیری آن را به شما خواهد گفت. این شما در نهایت در متغیری از نوع Int ذخیره شده که ما آن را با نام result ایجاده کرده ایم. اگر که کارکتری که شما به دنبال آن بودید در متن مورد نظر شما وجود نداشته باشد، متد IndexOf مقدار -۱ (منفی یک) را بر می گرداند.
کد شرطی ما (if) که در کدهای بالا می بینید، در حال بررسی مقدار result است. اگر که مقدار -۱ باشد، متوجه می شویم که کارکتر مورد نظر شما وجود ندارد، در غیراینصورت، کارکتر مورد نظر در محلی که در result ذخیره می شود، موجود است.
از برنامه ای که تهیه کرده اید یک اجرا بگیرید؛ بر روی Button جدیدی که ایجاد کرده اید کلیک کنید. نتیجه باید مشابه نتیجه پایین شده باشد:
اگر ایمیل وارد شده دارای کاکتر @ باشد:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بخش پنجاه ام
متد Insert
متد Insert به شما این قابلیت را میدهد که بتوانید یک کارکترهایی را به بخشی از یک String اضافه کنید. برای استفاده از این متد، شما به شکل مشابه زیر عمل میکنید:
string someText = “Some Text”;
someText = someText.Insert(5, “More “);
در بین جفت پرانتزهای مربوط به متد Insert، شما به دو چیز احتیاج دارید؛ اولین مورد، مکان مورد نظر که قرار است کارکترهای جدید به آن اضافه شود، و مورد بعدی، خود کارکترهایی که می خواهید به رشته ی خود اضافه کنید.
برای نمونه، در مثالی که در بالا زدیم، مکان شماره ۵، دقیقاً جایی است که حرف T مربوط به کلمه Text می باشد. دقت کنید که شمارش همیشه از ۰ شروع می شود؛ نه از ۱.
متدهای PadLeft و PadRight
این دو متد در سی شارپ نیز میتوانند کارکترهایی را به رشته های شما اضافه کند، با این تفاوت که تنها می توانند به ابتدا یا انتهای رشته شما، کارکترهای مورد نظرتان را اضافه کند.
برای مثال، یک button و یک Text Box به فرم خود اضافه کنید. در Properties مربوط به Text Box، مقدار Text را به Pad Left تغییر دهید. بر روی Button خود دابل کلیک کنید تا وارد بخش کدنویسی مربوطه شوید. کدهای زیر را قرار دهید:
string paddingLeft = textBox5.Text;
paddingLeft = paddingLeft.PadLeft(20);
text5.Text = paddingLeft;
متدهای PadLeft یا PadRight می توانند به عنوان آرگومان، یک یا دو آرگومان دریافت کنند. ما در اینجا فعلاً با یک آرگومان با آن ها کار کردیم؛ تنها یک عدد ۲۰ به آن پاس داده ایم. اگر برنامه خود را اجرا کنید و بر روی Button کلیک کنید، چیزی شبیه به تصاویر زیر را مشاهده خواهید کرد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
می بینید که کلمه Pad Left ۲۰ کارکتر به جلو برده شد. اما اگر توجه کنید، کارکترهای ما قبل آن همگی یک Space (فاصله) می باشند. این مورد به این دلیل است که ما از متد مورد نظر، تنها با یک آرگومان استفاده کرده ایم. اگر خط دوم مربوط به کد بالا را به شکل زیر تغییر دهید، و برنامه را اجرا کنید، خواهید دید:
paddingLeft = paddingLeft.PadLeft(20, “*”);
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
تفاوت کاملاً مشخص است؛ در متدی که دو آرگومان دریافت می کند، ابتدا مقداری که قرار است متن شما حرکت کند را دریافت کرده، سپس نوع کارکتر را مشخص می کنید.
کیارش 441
27-05-2014, 20:50
سلام دوستان
من یه پروژه دفترچه تلفن c#طراحی کردم.یه جاش موندم اینه که: وقتی تو فرم اول درج مخاطبین رو میزنم میره فرم دوم که ورود نام نام خانوادگی و... هست تا اینجا حله .حالا موندم چه جوری این اطلاعات رو به گرید ویو فرم اول انتقال بدم //////کمممممممممممممممممممممممم ممممک کننننننییییید خواهش میکنم
alireza4425
26-07-2014, 00:43
ایولا دمتون گرممممممممممممممممممممممم مممممممممممممممم
فرشته1991
26-07-2014, 17:12
خیلی خوب بود ممنون خیلی مشکلام حل شد...
فقط ی سوال اگه بخوام ی تکست باکس رو از فرم اولم توی ی کامبو باکس از فرم 2 بفرستم باید چیکار کنم؟
بخش پنجاه و یکم
در ادامه آموزش زبان برنامهنویسی محبوب سیشارپ تا که اخیراً تا قسمت ۵۰ام آن پیش رفته بودیم، در این بخش نیز به ادامه معرفی بخشی از متدهای پایهای و مورد نیاز از زبان سیسارپ میپردازیم.
معرفی متد Remove
همانطور که از نام آن پیداست، توسط این متد شما میتوانید بخشی از کارکترهای موجود در یک رشته (String) را حذف کنید. بهنمونههای زیر توجه کنید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همانطور که ملاحظه میکنید، متد Remove دارای دو آرگومان است؛ آرگومان اول، شماره کارکتر شروع را دریافت میکند و آرگومان دوم، تعداد کارکترهایی که میخواهید از محل شروع حذف نمایید را اخذ خواهد کرد. در مثال بالا، میبینید که در آرگومان اول شماره ۱۰ را ارحاع دادهام (یعنی از محل ۱۰ام شروع کن) و به تعداد ۹ کارکتر بعد از آن را پاک کن. دقت کنید که شمارش کارکترها از صفر شروع میشود؛ یعنی اولین کارکتر، دارای شماره صفر است!
معرفی متد Replace
این متد نیز همانند متد سابق، دارای نامی آشنا است که میتوانید از روی نام آن، به عملکردش پی ببرید. با استفاده از این متد، میتوانید کارکترهای داخل String خود را تعویض نمایید. به مثال زیر توجه کنید:
string spellingError = “mistak”;
spellingError = spellingError.Replace(spellingError, “mistake”);
متد Replace نیز دارای دو آرگومان است؛ اولی، رشتهی قدیم را دریافت میکنید و آرگومان دوم، رشته جدیدی که قرار است با آن تعویض شود را دریافت خواهد کرد. در نتیجه، مقدار spellingError در نهایت، عبارت mistake خواهد بود.
معرفی متد Substring
آرگومانهای این متد، شبیه به آرگومانهای Remove میباشد، اما کار آن این است که با مشخص کردن محل شروع و تعداد کارکترهای بعدی آن، مقدار آن رشته را در این محلهای مشخص شده را برمیگرداند.
برای مثال، تصور کنید که بخواهیم بررسی کنیم که آخر یک ایمیل آیا عبارت .com وارد شده است یا خیر؛ همانند تصویر زیر، یک button جدید ایجاد کرده و کدها را در داخل آن وارد نمایید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همانطور که از کد فوق مشخص است، در آرگومانهای SubString، دو عدد ۵ و ۴ را ارجاع دادهام؛ یعنی در واقع از محل کارکتر شماره ۵ شروع کن و تا ۴ کارکتر بعد از آن را برای من بخوان؛ حال با استفاده از شرط if، بررسی میکنم که آیا در این ناحیه، عبارت .com بوده است یا نه؛ بستگی به شرایط، برای هر کدام یک MessageBox مناسب را تعریف کردهام.
تمرین: سعی کنید تمرین فوق را برای بررسی عبارت .co.uk در ایمیل آدرسها را بکار ببرید.
بخش پنجاه و دوم
در پی بخش قبلی از آموزش سیشارپ، همچنان ما بر روی متدهای مربوط به رشتهها تمرکز داریم. اینبار قصد داریم که شما را با دو متد مهم Split و Join آشنا سازیم. پس با ما همراه باشید.
معرفی متد Split
با استفاده از متد Split، شما میتوانید که بخشهایی از متن را در آرایهای ذخیره کنید. منظور چیست؟ مثال ذیل را انجام دهید تا بهتر متوجه شوید. در پروژهی ایجاد شدهی خود، یک button قرار داده و کدهای موجود در داخل عکس را کپی کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در کدهای فوق، ما یک متغیر از نوع String با نام lineOfText تعریف کردهایم. میبینید که مقدار روبروی آن، یک رشته است با محتوای: item1, item2, item3
اگر دقت کنید، میبینید که این محتواها توسط یک کاما (, ) از یکدیگر جدا شدهاند. ما با استفاده از متد Split میتوانیم با مشخص کردن یک جدا کننده، تکتک محتواها را در داخل یک آرایه ذخیره کنیم.
در خط بعدی، یک نوع آرایه از جنس String با نام wordArray تعریف کردهیم؛ میبینید که مقدار آن را برابر با Split متغیر اصلی قرار دادهایم.
در نهایت، با استفاده از MessageBox ها، به محتوای هر خانه از آرایه دسترسی پیدا خواهیم کرد.
در این مثال، ما میدانیم که تعداد خانههای آرایهی ما ۳ عدد هست؛ اما اگر تعداد آن را نمیدانستیم چه؟ میتوانیم از حلفه foreach جهت چاپ مقادیر آنها استفاده کنیم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
میتواند آرگومانهای دیگری نیز دریافت کند که آن را از حالت ابتدایی و سادهای که فعلاً میبینید، درآرد و تبدیل به یک متد بسیار پیچیده شود، اما از آنجایی که هدف ما ورود به عمق چنین مباحثی نیست، پس از آن گذر خواهیم کرد.
معرفی متد Join:
متد Join، خلاف کار Split را میکند؛ Split در واقع یک جداکننده بود، اما Join برعکس! به کدهای زیر دقت کنید؛ با استفاده از متد Join خواهیم توانست که خانههای آرایه را مجدداً در یک متغیر String بازگردانیم.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دقت کنید که برخلاف متد Split که یک متد از خود متغیر String بود، برای دسترسی به متد Join، میبایست که از کلاس String استفاده کنید. (مبحث کلاس در آینده مطرح خواهد شد!)
میبینید که با استفاده از دو آرگومانی که متد Join دریافت کرده است، خانههای آرایهی wordArray را با استفاده از کارکتر «-» به یکدیگر الصاق میکند.
roya.rashidi
19-08-2014, 01:06
سلا م رو هر کدوم از این فایلا کلیک میکنم یه سری کد میاد که از هیچکدوم سر نمیارم:n27: . کتاب محمدرضا هاشمیان رو هم بصورت rewiew مطالعه کردم ولی درباره اینا توضیح کاملی نداده .
چیجوری باید از کدهای داخل این فایلا سر در بیارم ؟؟ کتاب خاصی باید بخونم ؟؟ اصلا نیاز هست به عنوان یه برنامه نویس حرفه ایی(به زودی:n02:) اینارو بلد باشم؟؟
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
سلام
اینها همگی آموزش های متدها وکدهای سی شارپ هستند که همراه با مثال نوشته شدند.
برای یادگیری برنامه نویسی به طور حرفه ای کتاب فایده ای نداره.
باید کلاس آموزشی برید چون خیلی از مطالب سی شارپ توی کتاب گنجایش ندارند وباید توضیح داده بشند.
شما میتونید برای تحلیل بیشتر کدها مانند سی شارپ از برنامه ای که خود مایکروسافت ساخته به اسم Red Gate Reflector استفاده کنید گرچه به پای خود برنامه C# نمیرسه.
این آموزش ها همش مواردی هستند که برای یادگیری سی شارپ لازم هستند.
باتشکر
roya.rashidi
20-08-2014, 06:36
سلام
اینها همگی آموزش های متدها وکدهای سی شارپ هستند که همراه با مثال نوشته شدند.
برای یادگیری برنامه نویسی به طور حرفه ای کتاب فایده ای نداره.
باید کلاس آموزشی برید چون خیلی از مطالب سی شارپ توی کتاب گنجایش ندارند وباید توضیح داده بشند.
شما میتونید برای تحلیل بیشتر کدها مانند سی شارپ از برنامه ای که خود مایکروسافت ساخته به اسم Red Gate Reflector استفاده کنید گرچه به پای خود برنامه C# نمیرسه.
این آموزش ها همش مواردی هستند که برای یادگیری سی شارپ لازم هستند.
باتشکر
ممنون شرایط کلاس رفتن ندارم . این اموزش هایی که خودتون گذاشتین کامل نیستن مگه ؟؟
سلام
چرا کامل هستند.
و ادامه هم دارند.
مقدمه
در بخش شماره ۵۲ از سری آموزش سیشارپ، معرفی متدهای لازم و اولیه مربوط به Stringها را بهاتمام رساندیم. از بخش ۵۳ام که در حال حاضر در حال مطالعه آن هستید، قصد داریم که شما را با مفهوم جدیدی با نام رویداد یا همان Event آشنا سازیم.
رویداد یا Event چیست؟
در اصطلاحات برنامهنویسی، یک رویداد را به اتفاقی میگویند که صورت گیرد! کدهایی که نوشته میشوند تنها زمانی اجرا خواهند شد که آن اتفاق مورد نظر صورت پذیرد. برای مثال، هنگامی که با موس خود روی یک Button کلیک میکنید، عمل کلیک کردن یک نوع Event است! در این بخش آموزشی میخواهیم با اولین رویداد، یعنی کلیک کردن، شما را آشنا سازیم.
رویداد Click برای یک Button
این رویداد زمانی رخ میدهد که یک button کلیک بشود. کد پیشفرض را برای یک button را در نظر بگیرید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دقت کنید که در بین دو پرانتز، دو آرگومان object sender, EventArgs e را داریم! کلمه کلیدی Object به شیءای اشاره میکند که رویداد را فعالسازی میکند؛ که در این مثال، button مورد بحث است! این مقدار در یک متغیری با نام Sender ذخیره خواهد شد.
یک پروژه جدیدی را در Visual Studio ایجاد کنید، یک button اضافه کرده و بر روی آن دابل-کلیک کرده تا وارد بخش کدهای آن شوید. کد زیر را قرار دهید:
MessageBox.Show(sender.ToString());
در کد فوق خواستیم که مقدار موجود در sender را به یک رشته تبدیل کرده و آن را بهنمایش گذارد تا ببینیم این متغیر حاوی چه مقداری است. کافیست که برنامه خود را اکنون اجرا کرده و برروی button کلیک کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
آرگومان بعدی ما، EventArgs e بود. EventArgs یک کلاس است که مشخص میکند کدام رویداد رخ داده است. متغیر e این این مقدار را در خود نگهداری میکند. همانند کد فوق، سعی کنید که مقدار e را چاپ کنید. خواهید دید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در این بخش شما با یک تعریف ساده از رویدادها آشنا شدید؛ منتظر بخشهای آتی باشید که بیشتر در این رابطه صحبت خواهیم کرد.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.