بسم الله الرحمن الرحیم
سلام...
پیرو درخواست های مکرر برخی دوستان ، مبنی بر آموزش ساخت رابط کاربری برنامه "8 وزیر" در محیط گرافیکی #C ، تصمیم گرفتم این مطلب رو به همین موضوع اختصاص بدم. البته قطعا این مبحث زود هنگام در بلاگ قرار گرفت و امکان اینکه برای برخی از دوستان مبتدی ، درک این مفاهیم مشکل باشد، وجود دارد. قبلا از بقیه دوستان عذر خواهی می کنم.
ما در این درس قصد داریم برنامه ای بسازیم که در آن 64 شیء PictureBox وجود داشته باشد. هر کدام از این اشیاء دارای خصوصیات و رفتارهای مربوط به خود باشد (متمایز از بقیه اشیاء). اما قرار دادن 64 کنترل (شیئ) PictureBox روی فرم برنامه بصورت دستی و از طریق Toolbox ، کار طاقت فرسایی به نظر میرسد. بنابراین راهی جز تولید این 64 کنترل با استفاده از کدنویسی وجود ندارد.
در زبان برنامه نویسی #C دات نت ، با هر چیزی بصورت یک شیئ برخورد می شود. هرچیزی! هر شیئ دارای یک کلاس هست که قالب و طرح کلی آن شیئ را در خود دارد. برای مثال شیئ آچار دارای یک قالب ریختهگری است، که با ریختن مواد مذاب در داخل آن ، آچار بوجود می آید.
در برنامه نویسی سی شارپ، برای اینکه بتوانیم از کلاس، یک شئ بسازیم باید از کلیدواژه new استفاده کنیم. به مثال زیر دقت کنید:
PictureBox pic = new PictureBox();
در این مثال با استفاده از کلاس PictureBox ، شئ pic را ساخته ایم. حالا می تونیم به خصوصیات مختلف این شیئ دسترسی داشته باشیم. مثلا می توانیم اندازه آنرا تغییر دهیم، مکان قرار گرفتن آن را روی فرم (یا هرجای دیگری) تعیین کنیم، می توانیم در داخل آن یک عکس را بارگذاری کنیم، رنگ آن را تغییر دهیم و... . به کد زیر توجه کنید که چطور این خصوصیات را برای شئ pic تنظیم کرده ایم:
pic.Size = new Size(20,20); pic.Location = new Point(10,14); pic.BackColor = Color.FromArgb(123,235,18); pic.Image = Image.FromFile("c:\\pics\\vazir.png");
کد بالا (به ترتیب خطوط) اندازه شئ را 20x20 پیکسل تنظیم می کند. مکان قرار گرفتن آن را در نقطه ای با مختصات 10 و 14 قرار می دهد ، رنگ زمینه را به رنگ ██ در می آورد. همچنین عکس vazir.png را از پوشه pics که در درایو c قرار دارد را در داخل شئ pic بارگذاری می کند.
تا اینجای کار یک شئ PictureBox ساختیم. اما این شیئ برای دیده شدن نیاز دارد که در داخل فرم قرار گیرد (یا هر شئ قابل دیدن دیگری). برای اضافه کردن هر کنترلی (از جمله pic) به فرم ، باید بصورت زیر عمل کنیم:
this.Controls.Add(pic);
اما قرار بود که ما 64 کنترل PictureBox رو روی فرم داشته باشیم. در مواقعی که با تعداد زیادی اشیاء هم نوع طرف هستیم ، می بایست از آرایه ها کمک بگیریم. آرایه ها ، مانند یک جدول عمل می کنند. شما تعیین می کنید که این جدول چند خانه دارد، چند بُعدی است و چه نوع اشیائی در آن قابل ذخیره سازی است. برای مثال کد زیر، یک آرایه 8x8 (دو بعدی) را که توانایی ذخیره سازی اشیاء PictureBox دارد، می سازد. در اینجا نام این آرایه را picArray قرار داده ایم:
PictureBox[,] picArray = new PictureBox[8,8];
مدیریت آرایه ها با استفاده از حلقه های تکرار انجام می گیرد. چون آرایه ما دو بُعدی است از دو حلقه for بصورت تودرتو استفاده می کنیم. این حلقه ها کار مشخصی را بر روی تک تک خانه های آرایه انجام می دهند. برای آشنایی بیشتر با حلقه for به کلیدواژه for مراجعه کنید.
for(int i=0; i<8; i++) { for(int j=0; j<8; j++) { picArray[i,j] = pic; } }
اجازه دهید نحوه مدیریت رویداد برای هر یک از اشیاء اضافه شده به فرم را توضیح دهیم.
خیلی ساده است. اول یک متد بصورت زیر می سازیم: (البته محیط ویژوال استودیو قابلیت های فراوانی برای اتوماسیون این مراحل ، دارد)
void p_mouseEnter(object sender, EventArgs e) { //اینجا برنامه مربوطه را بنویسید }
حالا باید کاری کنیم که با اتفاق افتادن رویداد ، برنامه موجو در متد بالا اجرا شود. برای مثال اگر بخواهیم برای رویداد Click شئ pic برنامه بنویسیم به نحوی که بعد از اینکه رویداد Click اتفاق افتاد، متد p_mouseEnter (این صرفا یک نام هست) اجرا شود، در همانجایی که خصوصیت های Size و Location و... را تنظیم کردیم، این متد را به رویداد Click انتساب می دهیم. بصورت زیر:
pic.Click += new EventHandler(p_mouseEnter);
شما می تونید برنامه نمونه ای رو که من نوشتم رو دانلود کنید. این برنامه تمام نکاتی رو که در این مطلب گفتیم رو در بر دارد.
دانلود برنامه 8 وزیر (رابط کاربری / بدون الگوریتم اصلی)
هر سوالی داشتید بپرسید. ان شاء الله اگر بلد بودم، پاسخگو خواهم بود...
موفق باشید.
ممنون از محبت شما و سپاس