У меня есть две формы(Form1, Form2). Form1 появляется сразу после запуска программы, является основной и запускается через Application.Run(new Form1()); Мне необходимо реализовать переход от Form1 к Form2 и наоборот, но чтобы на экране отображалась только одна форма. На формах есть кнопки, переход к Form2 и возврат на главную форму. Переход на Form2 осуществлён через:
Form1.ActiveForm.Hide();
Form2 frm = new Form2();
frm.Show();
Как мне реализовать возврат к главной форме?
Можно передавать ссылку на форму
public class AppForm2 : System.Windows.Forms.Form
{
public Form ReturnForm;
public AppForm2()
{
this.Size = new System.Drawing.Size(300, 300);
this.Text = "AppForm2";
Button button = new Button() { Text = "AppForm2" };
button.Click += button_Click;
this.Controls.Add(btn);
}
private void button_Click(object sender, EventArgs e)
{
ReturnForm.Show();
this.Close();
}
}
public class AppForm1 : System.Windows.Forms.Form
{
public AppForm1()
{
this.Size = new System.Drawing.Size(300, 300);
this.Text = "AppForm1";
Button button = new Button() { Text = "AppForm1" };
button.Click += button_Click;
this.Controls.Add(btn);
}
private void button_Click(object sender, EventArgs e)
{
this.Hide();
new AppForm2() { ReturnForm = this }.Show();
}
}
Можно установить событие на закрытие формы
public class AppForm2 : System.Windows.Forms.Form
{
public AppForm2()
{
this.Size = new System.Drawing.Size(300, 300);
this.Text = "AppForm2";
Button button = new Button() { Text = "AppForm2" };
button.Click += button_Click;
this.Controls.Add(btn);
}
private void button_Click(object sender, EventArgs e)
{
this.Close();
}
}
public class AppForm1 : System.Windows.Forms.Form
{
public AppForm1()
{
this.Size = new System.Drawing.Size(300, 300);
this.Text = "AppForm1";
Button button = new Button() { Text = "AppForm1" };
button.Click += button_Click;
this.Controls.Add(btn);
}
private void button_Click(object sender, EventArgs e)
{
this.Hide();
Form form = new AppForm2();
form.FormClosed += (object s, FormClosedEventArgs ev) => { this.Show(); };
form.Show();
}
}
Можно использовать диалоговое окно
public class AppForm1 : System.Windows.Forms.Form
{
public AppForm1()
{
this.Size = new System.Drawing.Size(300, 300);
this.Text = "AppForm1";
Button button = new Button() { Text = "AppForm1" };
button.Click += button_Click;
this.Controls.Add(btn);
}
private void button_Click(object sender, EventArgs e)
{
this.Hide();
new AppForm2().ShowDialog();
this.Show();
}
}
Можно написать через ApplicationContext, тогда можно формы не скрывать, а переключаться между ними. В таком случае можно логику перенести в отдельный класс.
public class ApplicationManager
{
private static ApplicationContext _context;
public static ApplicationContext Context
{
get
{
if (_context == null)
_context = new ApplicationContext();
return _context;
}
}
public static void ShowForm(Form form)
{
Form prev = Context.MainForm;
Context.MainForm = form;
prev.Close();
form.Show();
}
}
public class AppForm2 : System.Windows.Forms.Form
{
public AppForm2()
{
this.Size = new System.Drawing.Size(300, 300);
this.Text = "AppForm2";
Button button = new Button() { Text = "AppForm2" };
button.Click += button_Click;
this.Controls.Add(btn);
}
private void button_Click(object sender, EventArgs e)
{
ApplicationManager.ShowForm(new AppForm1());
}
}
public class AppForm1 : System.Windows.Forms.Form
{
public AppForm1()
{
this.Size = new System.Drawing.Size(300, 300);
this.Text = "AppForm1";
Button button = new Button() { Text = "AppForm1" };
button.Click += button_Click;
this.Controls.Add(btn);
}
private void button_Click(object sender, EventArgs e)
{
ApplicationManager.ShowForm(new AppForm2());
}
}
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ApplicationManager.Context.MainForm = new AppForm1();
Application.Run(ApplicationManager.Context);
}
В общем-то вариантов, можно придумать другие или улучшить продемонстрированные короткие примеры под свои нужды. В любом случае все сводится к событиям или ссылкам на форме, отельный интерес представляет только ApplicationContext.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
I am trying to read "ico" image from MS SQL DB and set the to button imageI am getting an error(Parameter is not valid) at line: using (var img = Image
Привет! Подскажите, как можно скачать все картинки с сайта? Я понимаю, как сделать так, что бы можно было скачать одну картинкуНашел код на этом...