در این جلسه با آموزش چند فرمی در سی شارپ و فرم پدر با ما همراه باشید. ابتدا آموزش خود را با چند فرمی شروع می کنیم.(تذکر:در جلسه اول با محیط ویندوز فرم آشنا شدیم و همچنین کار کردن با دستورات را در آموزش برنامه نویسی تحت کنسول آموزش دادیم لطفا اگر مبتدی هستید با این دو آموزش شروع کنید)
آموزش چند فرمی در سی شارپ
-
مفهوم چند فرمی
یعنی اگر چند تا فرم داخل برنامه داشته باشیم و بخواهیم به اشیاء فرم دوم از طریق فرم اول دسترسی داشته باشیم .چه جوری این کار را انجام دهیم در ادامه آموزش این موضوع را به سادگی می آموزیم.
-
ایجاد فرم جدید
در پنجره Solution Explorer روی نام پروژمان راست کلیک کرده و از گزینه Add ، Windows Form را انتخاب می کنیم
نام فرم را به هر نامی خواستیم تغییر می دهیم و کلید Add را فشار می دهیم. الان که 2 تا فرم داریم می خواهیم ببینیم چگونه می توان به فرم دوم دسترسی پیدا کنیم.
روی Form1 کنترل Button را قرا می دهیم.
روی Form2 کنترل Textbox را قرا می دهیم.
می خواهیم برنامه ای بسازیم که با کلیک بر روی Button فرم اول متن داخل Textbox فرم دوم را نمایش دهد.
-
نحوه کد نویسی
ابتدا برای اینکه از طریق Form1 بخواهیم به اشیاء Form2 دسترسی داشته باشیم هر یک از اشیاء مشخصه ای دارد بنام Modifiers که باید آن را Public قرار دهیم
private void button1_Click(object sender, EventArgs e)
{
Form2 F = new Form2();
از کلاس فرم 2 یک شی ساختیم ————//
F.textBox1.Text = “Dazhyar Pardazhesh Isatis”;
F.Show();فرم 2 را نمایش بده ——————//
}
نکته: دو روش برای نمایش فرم 2 وجود دارد:
1) F.Show();
Show() یعنی اگر فرم 2 باز باشد می توانیم به فرم 1 هم دسترسی داشته باشیم.
2) F.ShowDialog();
ShowDialog() یعنی اگر فرم 2 باز باشد نمی توانیم به فرم 1 هم دسترسی داشته باشیم.
برنامه را اجرا می کنیم:
مفهوم فرم پدر
اگر دو تا فرم داخل برنامه داشته باشیم و بخواهیم فرم دوم داخل فرم اول باز شود. باید فرم اول را به عنوان فرم پدر در نظر بگیریم برای این کار هر فرم یک مشخصه ای دارد بنام IsMdiContainer که آن را برابر True قرار می دهیم:
وقتی این کار را انجام دهیم اصلا رنگ زمینه فرم تغییر می کند و دیگر نمی توانیم رنگ آن را تغییر دهیم:
یک کنترل باتن روی فرم 1 باز می کنیم.
-
نحوه کد نویسی
private void button1_Click(object sender, EventArgs e)
{
Form2 F = new Form2();
F.MdiParent = this;
F.Show();
//فرم را نشان بده
}
برنامه را اجرا می کنیم و روی باتن کلیک می کنیم.
امیدواریم از آموزش چند فرمی در سی شارپ و همچنین فرم پدر لذت برده باشید.
خیلی ممنون
خیلی ممنون بسیار کاراست
سلام ، ببخشید من به دلیل امتحاناتی که دارم به ی نتیجه ار رسیدم که اونم اینه که میخوام ی نرم افزار درست کنم که سوال رو توی لیبل بده و وقتی روی باتن جواب کلیک میکنم توی لیبل ۲ جواب رو وارد کنه ، و وقتی روی باتن (سوال بعدی) کلیک میکنم بره به سوال بعدی__ من داخل کد نویسی این به مشکل خوردم __ میشه کمکم کنید در ضمن من میخوام سوالات رو خوردم وارد کنم *تو کد نویسیش* مرسی اگه میشه کمکم کنید .
سلام و عرض ادب
لطفا مشکل را به صورت جزئی بیان کنید تا کارشناسان مربوطه راهنمای شما باشند و راهنمایی به صورت کلی برای ما مقدور نیست.
با تشکر از همراهی شما
سلام وقتی Form2 F = new Form2();
F.MdiParent = this;
F.Show();
این را وارد کردم فرم ۲ میره پشت دکمه و تمام چیز هایی که بر روی فرم ۱ وجود داره F.BringToFront (); هم میزارم هیچ تاثیری نداره نمیدونم شاید جاشو اشتباه میزارم(اونو بعد F.Show(); گذاشتم) یا باید کار دیگه ای بکنم
و یه سوال دیگه هم داشتم این پارتی که گفته بودید(ابتدا برای اینکه از طریق Form1 بخواهیم به اشیاء Form2 دسترسی داشته باشیم هر یک از اشیاء مشخصه ای دارد بنام Modifiers که باید آن را Public قرار دهیم) من نتونستم Modifiers رو پیدا کنم که Public کنم میشه اونم توضیح بدید
ممنون میشم جواب بدید
سلام و عرض ادب
شما دستورات را درست وارد کرده اید .ولی وقتی فرمی را به عنوان فرم پدر در نظر می گیرید امکان عوض کردن چنین خصوصیتی را در فرم پدر ندارید . ولی برای رفع مشکلتان می توانید یک پنل روی فرم اصلی خود قرار دهید و دکمه را روی آن قرار دهید و موقعیت فرم های فرزند را با خصوصیت start position روی فرم پدر مشخص کنید یا اینکه با دستور f.Dock = DockStyle.Fill; فرم های فرزند را در حالت تمام صفحه قرار دهید .
در قسمت properties همان جایی که خصوصیت text و name و …. برای اشیا وجود دارد این خصوصیت را نیز می توانید مشاهده کنید .
با تشکر از همراهی شما
سلام من یک فایل login درست کردم که با وارد کردن رمز ورود باید فرم بعدی باز بشه اما فرم login دوباره خودش باز میشه ممنون میشم کمکم کنید
سلام وعرض ادب
شما باید بعد از دستوراتی که مربوط به صحت نام کاربری و پسورد است فرم login را hide کنید و دستور نمایش فرم اصلی را بنویسید . دستورات به روش زیر می باشد :
this.Hide();
Form1 main = new Form1();
main.Show();
البته برای ایجاد فرم login روش های دیگری نیز وجود دارد
با تشکر و سپاس از همراهی شما
سلام دوست عزیز وتشکر از مطالبت میشه بگی چجوری وقتی فورم دو باز میکنیم فورم یک ناپدید شه؟؟
سلام و عرض ادب
یکی از ساده ترین روش ها این است که فرم یک را hide کنید
this.Hide();
Form2 f = new Form2();
f.ShowDialog();
this.Close();
روش دوم
System.Threading.Thread mythread = new System.Threading.Thread(new System.Threading.ThreadStart(OpenNewFrom));
mythread.Start();
this.Close();
}
public static void OpenNewFrom()
{
Application.Run(new Form2 ());//Create an instance of your new form. No need to call show method.
}
با سپاس از همراهی شما
سلام
مطالبتون مفید و جالبه
یه سوال داشتم
خواستم بدونم من می خوام یه فرم تنظیمات درست کنم که وقتی مثلا در فرم تنظیمات رنگ پس زمینه رو عوض کردم در تمام فرم ها اعمال بشه یعنی درتمامیه فرم ها
مشکلم اینجاست چطور باید رنگ پس زمینه در فرم ۲ (فرم تنظیمات) با باتومی که در فرم ۲ قرار دادم عوض بشه و روی همه اعمال بشه.
ممنون از راهنماییتون
خلاصه و مفید، ممنون
واقعا عالی بود خلاصه و مفید درجه یک
سلام وقت بخیر
ببخشید من وقتی از بخش ADD وارد پنجره New Item میشم قسمت Windows Form رو نمی تونم پیدا کنم یعنی موجو نیست کلا!
ممنون میشم راهنمایی کنید با تشکر.
سلام و عرض ادب. ویژوال استدیو را به صورت ناقص نصب کرده اید.
با سلام فرقی میکنه تو برنامه های چند فرمی فرم پدر وجود داشته باشه یا نه؟
یا اصلا خاصیت درست کردن فرم پدر چی هست؟
با تشکر از شما با این مقاله خوبتون.
سلام و عرض ادب. روال تولید بیشتر نرم افزارها بر این منوال هست که شما یک فرم را به عنوان پدر (فرم اصلی نرم افزار که منوهای نرم افزار در آن قرار دارد) و فرم های دیگر را به عنوان فرزند ایجاد میکنید. ولی اگر این کار رو انجام ندهید هم به خطایی در اجرای نرم افزار نمی خورید برای مثال ما وقتی نرم افزاری را طراحی میکنیم مثال نمی خواهیم فرم پدر بسته باشد ولی فرم مشتریان باز باشد که البته این کار را با کد نویسی هم میتوانیم انجام دهیم ولی روال تولید اکثر نرم افزارهای بزرگ و کاربردی این گونه هست. مثالی که زده شد هم یک نمونه بود و ممکن هست هزاران مورد دیگر هم باعث بشه که من فرم پدر و فرزند درست کنم.
با تشکر از همراهی شما
سلام ببخشید من سوال داشتم . من توی پروژه ای که دار روش کار میکنم ۳ تا فرم ایجاد کردم . بعد الان من سه تا فرم به نام فرم اول و فرم دوم و سوم دارم . modifiers فرم پدر هم public هست . بعد داستان اینجوریه که من با زدن یک BUTTON توی فرم دوم ، به فرم سوم میرم و فرم دومم رو میبندم . یعنی وقتی روی اون BUTTON کلیک کنم میره تو فرم ۳ و فرم ۲ بسته میشه . حالا من یک BUTTON توی فرم ۳ گذاشتم و قصدم اینه که وقتی روی اون BUTTON توی فرم سه کلیلک کنم رنگ بگ گراند BUTTON توی فرم ۲ تغییر کنه اما BUTTON فرم ۳ ، BUTTON فرم ۲ رو نمیشناسه ووقتی اسم اون رو وارد میکنم میگه وجود نداره . با اینکه MODIFIERS هر دو PUBLIC هست هم دیگه رو نمیشناسن این دلیلش چیه ؟
سلام با دستور THIS.CLOS فرم بسته میشه و اطلاعات از فرمی به فرم دیگه نیمره اما با THIS.HID فرم چون باز هست این امر اتفاق می افته الان من یه مشکل دارم بین دو فرم هی میخام برم بیام هی فرمهام HID میشه و موقع بستن اصلی می بینی صدها فرم بسته میشه .حالا سوال من
روشی هست که من بتونم به فرم HID شده برگردم و فرم تازه برام باز نکنه ؟
سلام من میخام وقتی روی باتن ۱ کلیک میکنه جواب که رادیو باتن ۱ یا ۲ یا ۳ رو که میزنه توی فرم ۲ داخل تکست باکس نشون بده
من یک ویندوز فرم جدید ایجاد کردم و میخام اون بعنوان اولین صفخه در پروژه ام باز بشه از کجا تنظیماتشو تغییر بدم