campaign-off40

دوره مجازی #C (جلسه 27): فرم های ویندوزی



visibility  
mode_comment   ۱۸

در این جلسه به عنوان آغازی بر فصل پنجم، با طراحی فرم های ویندوزی و لایه ی Presentation آشنا می شویم و مقدمات آن را مطرح خواهیم کرد. مطالب فراگیری شده در فصول قبلی در این فصل به یک جمع بندی خواهد رسید. این فصل را به طور کلی به سه بخش تقسیم خواهیم کرد. در بخش اول در سه یا چهار جلسه با معماری پروژه های Windows Form و کنترل ها و مفاهیم ساده، آشنا خواهیم شد. در بخش دوم نیز در چهار الی پنج جلسه، به بررسی کنترل های پیشرفته تر خواهیم پرداخت و نهایتا در بخش پایانی نیز باقی زمان فصل را به بررسی تکنیک ها و مفاهیم پیشرفته تر در طراحی فرم های ویندوزی می پردازیم. در این فصل سعی می کنیم تا پروژه ها و مینی پروژه های بیشتر و کاربردی تری را طراحی و پیاده سازی کنیم.

مطالب آموزش داده شده در این جلسه به قرار زیر می باشند:

  • معرفی نحوه ی ساختن فرم های ویندوزی
  • آشنایی با معماری فرم های ویندوزی
  • آشنایی با محیط طراحی فرم ها
  • آشنایی با برنامه نویسی رویداد محور
  • معرفی کنترل Button و آشنایی با Property و Event های آن
  • آشنایی با دستور MessageBox و Overload های مختلف آن
  • معرفی مفهوم Event و Event Handler
  • نحوه ی تغییر Property های یک کنترل با استفاده از کد و در حالت Runtime
  • معرفی Property ها و Event های فرم
  • آشنایی با کنترل Textbox و Property و Event های آن
  • طراحی یک فرم به منظور دریافت اطلاعات و ذخیره در پایگاه داده
  • نحوه ی اضافه کردن کنترل ها در زمان Runtime

در جلسه ی آینده با کنترل های بیشتری آشنا می شویم و Property ها و Event های آن ها را مورد بررسی قرار می دهیم.

info توجه

این مطلب یک جلسه از دوره آموزش #C می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در دوره آموزش #C

comment دیدگاه کاربران
مجتبی replyپاسخ

سلام آقای زارعی
فایل های جلسه مشکل داره یا مشکل از سیستم منه!!؟
دانلود کردم همه پوشه ها خالیه..حجم 4kb

آرین زارعی

سلام.
نه شما درست می فرمایید.
من چک کردم بر روی سیستم خودم هم فایل ها پاک شده و فقط فولدر های خالی موندن. شاید مشکل از سیستم و آنتی ویروس من باشه. من بررسی می کنم ولی فکر کنم کامل پاک شده فایل ها.
البته فایل های این جلسه خیلی برنامه های سختی نبودن . من اگر تونستم بازیابی کنم ، فایل ها رو اصلاح می کنم.

بهادر replyپاسخ

با سلام یک سوال داشتم
بنده کد رو درون محیط ویژوال استادیو می نویسم و در اول وقتی خطا می گیریم و بعد از اینکه کدهای شما را عینا کپی می کنم بازهم خطا می گیرم و باید برنامه را بسته و مجددا باز کنم شما می دونید دلیل این مشگل که با وجود کد درست بازهم خطا میده و اجرا نمیشه چیه؟؟
ممنونم!

آرین زارعی

سلام.
من منظورتون رو کامل متوجه نمیشم. اگر همیشه این مشکل وجود داره که برای بار اول که ویژوال استودیو رو باز می کنید کداتون با خطا مواجه می شن، مشکل از ویژوال استودیو هست احتمالا و باید پاک کنید و دوباره نصب کنید.
یکم بیشتر و واضح تر توضیح بدید تا بتونم کمک کنم.

حجت قربانی replyپاسخ

آقای زارعی فایلی در این فایلی که قرار دادین وجود نداره !!!
خیلی جلسه های دیگه هم همینطوره !
یه مشت پوشه ی خالی هستن 😥 😥 😥

آرین زارعی

اجازه بدید من رسیدگی می کنم.

Emran Zeynalzadeh

برا منم همین طور شده دانلود میکنم میره صفحه اول
یا پوشه خالی دانلود میشه
3 روزه این مشکلو دارم یکی رسیدگی کنه هیچ فایلی دانلود نمیشه

آرین زارعی

بله . همین الان پیگیری میکنیم.

پژمان replyپاسخ

سلام و خسته نباشید.

1. کلاس Form1 از کلاس پیش ساخته Form ارث میبره و حاوی دو بخش کد نویسی و دیزاین هست و توسط کلاس application و در درون متد main کلاس program فراخوانی میشود. هر کنترل حاوی کلاسی است که وقتی ما نمونه ای از اونها رو (Button بعنوان مثال) درون فرممان استفاده میکنیم در واقع یک نمونه آبجکت از نوع مراجعه از کلاس کنترل مذکور رو درون کلاس Form ، Instance کرده ایم. و به پراپرتیها و event های کلاس کنترل فوق الذکر از طریق همین نمونه آبجکت دسترسی داریم. با این اوصاف چرا هنگام دابل کلیک بر روی شکل button درون فرم و ایجاد متد برای event کلیک کلاس Button ، متد مذکور بجای ایجاد در بدنه کلاس button درون کلاس Form1 ایجاد شده است. در صورتیکه باید به مانند مثالهای پیشین متد هر کلاس درون همان کلاس ایجاد و از طریق آببجکت نمونه سازی شده از آن کلاس و در درون کلاس دیگر فراخوانی شود.

namespace FirstTestOfWinForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void TestButton_Click(object sender, EventArgs e)
{
this.BackColor = Color.Beige;
}
}
}
در ضمن شما در فیلم میفرمایید this اشاره دارد به آبجکتی که از کلاس Form ساخته شده و متد TestButton_Click درونش صدا زده شده!!!. به نظر شما این متد درونش صدا زده شده!؟ یا اصلا درون کلاس Form ساخته شده!؟

آرین زارعی

سلام دوست عزیز.
ببینید غالب سوالات شما به این دلیل هست که بلافاصله پس از برخورد به یک مساله سوال رو مطرح میکنید. در صورتی که مثلا جواب همین سوالتون رو مثل خیلی دیگه از سوالا در جلسات آتی خواهید گرفت. نکته ای که هست این متد یک هندلر برای ایونت هست. که در جلسات آینده با آن آشنا خواهید شد. لطفا در صورت بروز سوالات اینچنینی ابتدا اون ها رو یادداشت کنید و اگر در نهایتا دو جلسه ی آتی جواب اون ها رو نگرفتید و یا با سرچ در وب به اون ها دست پیدا نکردید، بپرسید.
علاوه بر این لطفا تا حد ممکن صورت سوالات رو کوتاه تر کنید تا برای بقیه هم مفید باشه سوالاتون.
پیروز و موفق باشید

پژمان

اوکی ممنون

پژمان replyپاسخ

2. در متد زیر شما فرمودی MessageBoxButtons یک enum هست ولی بصورت یک کلاس با پراپرتیهای استاتیک YesNo ازش استفاده کرده اید. مگر همچون مثال Accounting جلسه دهم فصل دوم enum یک نوع داده ای جدید با مقادیر محدود و از پیش تعریف شده نیست!؟ که میشود متغیری از نوع آن ساخت و مقادیرتعریفی موجود در آن را به متغیر مورد نظر نسبت داد. پس چرا در زیر به شکل یک کلاس حاوی پراپرتیهای استاتیک از آن استفاده کرده اید!؟

MessageBox.Show(“D you want close the Application!?”, “Question”, MessageBoxButtons.YesNo);

آرین زارعی

لطف کنید یه بار دیگه مبحث enum رو مطالعه بفرمایید. گویا کمی دچار ابهام شدید.

پژمان

ممنون حل شد. البته گویا به چند طریق قابل دسترسی و استفاده هستند. من جمله همین روش مثال مورد نظر ما که خیلی شبیه به فراخوانی پراپرتی استاتیک کلاس خاصی هست. از این گذشته نکته ای هم پیرامون متد ToSring() و استفاده اون همراه با متغیر enum هست که خیلی جالب بود. با اجازه شما مثالش رو در زیر میذارم:
public enum Grade
{
Failing, // = 0
BelowAverage, // = 1
Average, // = 2
VeryGood, // = 3
Excellent // = 4
}
————

static void Main(string[] args)
{
Grade grade = Grade.Average;
Console.WriteLine(grade.ToString()); // Print Avarage
Console.WriteLine(grade.ToString(“D”)); // Print 2
Console.WriteLine(grade.ToString(“X”)); // Print 00000002
Console.WriteLine((int) grade); //Print 2
Console.ReadKey();
}

D مخفف Decimal
X مخفف هگزادسیمال هست

در ضمن مقادیر ثابت هر عنوان هم به دلخواه قابل تغییرند و هر مقدار صحیحی میتوانند باشند که توسط کاربر مشخص میگردد.

پژمان replyپاسخ

3. در مثال زیر
4. private void button1_Click(object sender, EventArgs e)
5. {
6. Random r = new Random();
7.
8. Button b = new Button();
9. b.Size = new Size(50, 25);
10. b.Location = new Point(r.Next(0, this.Width), r.Next(0, this.Height));
11. b.Visible = true;
12.
13. this.Controls.Add(b);
14. }
وقتی آبجکتی از کلاس size رو با دو مقدار پیش فرض ، درون پراپرتی size مربوط به آبجکت button میریزیم در واقع از اونجا که constructor size مقداری بازگشت نمیدهد در واقع مقادیر بازگشتی پراپرتیهای geter , setter آبجکت کلاس size درون پراپرتی size آبجکت button ریخته میشود؟ در واقع ساز و کار انتقال مقادیر از آبجکت size به پراپرتی size کنترل button رو متوجه نمیشم.

آرین زارعی

این ساز و کار در داخل کلاس هندل میشود. میتونید با f12 به محیط خود کلاس برید و کامنت های لازم رو بخونید. البته خیلی چیز پیچیده ای نیست. اعداد پاس داده شده در کانستراکتور در داخل بدنه کانستراکتور به راحتی به پراپرتی ها داده می شوند. ساختار get و set هم در فصل یک فکر میکنم گفته شده.

پژمان

ساز و کار رو متوجه شدم ولی نکته ای که هست Size بصورت struct تعریف شده و نه یک کلاس. اولین بار در این دوره با این مفهوم برخورد میکنم اگر از نظر شما ایرادی نداره میتونم بپرسم تفاوت struct با class در چی هست. پیرو فرمایشت، در سایتهای تخصصی بخصوص کتاب مرجع دیتل که مطالعه کردم اصلا جزء مباحث تخصصی دات نت هست که صفحه ها در موردش مطلب و مثال گفته شده و به دلیل حجم نسبتا بالا پیگیری مطلبش کمی گیج کنندس. مطالب گذشته رو هم که برای چندمین بارمرور کردم اشاره ای در طول دوره نفرمودی. البته اگر بعدا و در طول فصل در این رابطه صحبت شده من صبر میکنم تا با این آیتم هم آشنا بشم. ببخشید مطلب طولانی شد.ممنون از راهنمایی شما

آرین زارعی

ببینید دوست عزیز. بررسی این جزییات به عهده ی دانشجو هست. اگه قرار باشه با این جزییات توضیح بدیم همه چیز رو دوره به جای 60 ساعت 200 ساعت باید میشد. شما خودتون باید از منابع اضافی که خدمتتون عرض کردم این ها رو مطالعه بفرمایید. تفاوت استراکت با کلاس در ویدیو ها مختصرا توضیح داده شده یه بار دیگه هم میگم اینجا. استراکت در غالب زبان ها امکان داشتن متد را ندارد بر خلاف کلاس. پس خیلی از مسایل شی گرایی رو مثل کلاس ندارد . تفاوت عمده در این است. البته باز استثناهایی هم هست که من شما رو تشویق میکنم اگه میخواید بیشتر بدونید منابع رو مطالعه بفرمایید. چون این سیاست ها حتی در نسخه های مختلف یک زبان شاید تغییر کند.

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.