شما اگر فایل Program.cs را باز کنید داریم:
کد:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace two_form_examing
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
[COLOR="Blue"]
Application.Run(new Form1());[/COLOR]
}
}
}
در اینجا می بینید که فرم 1 به طور اتوماتیک شروع می شود. پس در دکمه ای که روی فرم 1 گذاشتید نیازی به نمونه سازی از فرم 1 نیست. و ثانیا وقتی شما دارید فرم 1 را می بینید یعنی فرم 1 قبلا خلق شده پس در دو قسمت کدی که شما گذاشتید در قسمت اول کدهایتان این کدها:
کد:
Form1 y = new Form1();
y.Hide();
زائد است.
اگر می خواهید فرم 1 را مخفی کنید بنویسید:
کلمه this یعنی همان فرمی که داخلش هستیم. در وی بی دات نت فکر کنم کلمه me به کار می رود به جای آن.
با این کد فرم 1 مخفی میشه. برای خروج از حالت run از منوی دیباگ stop را بزنید.
حالا می رسیم به بحث فرم 2 :
فرم 2 خلق نشده. پس اول باید نمونه ای از آن بسازیم. البته باید قبلا هم فرمی به پروژه افزوده باشید.
کد:
//this.Hide();
Form2 u = new Form2();
u.Show();
با کد بالا که مثلا در رویداد کلیک یک باتون است شما باعث نمایش فرم 2 می شوید.
حالا کد زیر را امتحان کنید:
کد:
//this.Hide();
Form2 u = new Form2();
Form2 u2 = new Form2();
u2.Show();
u.Show();
با زدن باتون حاوی کد بالا دو فرم علاوه بر فرم 1 به نمایش در می آید.
این دو فرم نمونه هایی از قالب فرم 2 است.
مثلا روی فرم 2 قبل اجرا دو تکست باکس بیافزایید که با اجرای کد بالا دو فرم دارید که روی هر یک دو تکست باکس وجود دارد.
توجه داشته باشید که با بستن فرم 1 ما باعث می شویم هر 3 فرم بسته شود و کلا برنامه از حالت اجرا خارج شود. چون شخصیت برنامه ما در Program.cs وابسته به فرم 1 است. اگر می خواهید این دیکتاتوری فرم 1 خاتمه یابد باید Program.cs را دستکاری کنید. البته شاید جای نگرانی نباشد چون می توانیم فرم 1 را مخفی کنیم و برنامه همچنان در حالت اجرا باقی بماند.
حالا کد را ساده می کنیم. همان طور که شما می خواهید . یعنی:
کد:
this.Hide();
Form2 u = new Form2();
u.Show();
با اجرای کد بالا قسمت اول مقصود شما برآورده می شود یعنی فرم 1 مخفی شده و فرم 2 آشکار می شود.
===========================
حالا می رویم فاز دو : یعنی مخفی کردن فرم 2 و دوباره آشکار کردن فرم 1 .
دکمه ای روی فرم 2 بیافزایید با کد زیر:
خط اول که یعنی فرمی که داخلشیم را مخفی کن.
اما اینجا فرم 1 شناخته شده نیست.
و من نتوانستم آنرا به این طریق show کنم.
===============================
من نمی دانم راه صحیح چیست ولی کد زیر:
کد:
Form1 t = new Form1();
t.Show();
را هم مناسب نمی دانم.
البته در فاز دو کد زیر:
کد:
this.Hide();
//Form1.???
Form1 t = new Form1();
t.Show();
ظاهرا باعث رسیدن به مقصود است.
و شما به آنچه می خواستید رسیده اید.
ولی من نگران اینم که تجمعی از فرومها ایجاد شود زیرا ما داریم مرتبا نمونه می سازیم و مخفی می کنیم.
در کد بالا شاید به جای this.Hide استفاده از close بهتر باشد.
===============================
در فرم 1 دو دکمه اضافه کنید با کدهای زیر:
کد:
private void button1_Click(object sender, EventArgs e)
{
Form2 u = new Form2();
u.Show();
this.Hide();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
بار اول اگر دکمه دوم را بزنیم برنامه خاتمه می یابد ولی بعد یک پاسکاری با فرم 2 با زدن دکمه دوم برنامه خاتمه نمی یابد. یعنی ما داریم تکثیر فرم می کنیم.
======================
این توضیحات باشه تا بعد.