Щоб додати ще одну форму в проект, натиснемо на ім'я проекту у вікні Solution Explorer (Оглядач рішень) правою кнопкою миші і виберемо Add (Додати) -> Windows Form ...
Дамо новій формі якесь ім'я, наприклад, Form2.cs:
Отже, у нас в проект була додана друга форма. Тепер спробуємо здійснити взаємодію між двома формами. Припустимо, перша форма після натискання на кнопку буде викликати другу форму. По-перше, додамо на першу форму Form1 кнопку і подвійним клацанням по кнопці перейдемо в файл коду. Отже, ми потрапимо в обробник події натискання кнопки, який створюється за замовчуванням після подвійного клацання по кнопці:
private void button1_Click(object sender, EventArgs e)
{
}
Тепер додамо в нього код виклику другої форми. У нас друга форма називається Form2, тому спочатку ми створюємо об'єкт даного класу, а потім для його відображення на екрані викликаємо метод Show:
private void button1_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2();
newForm.Show();
}
Тепер зробимо навпаки - щоб друга форма впливала на першу. Поки друга форма не знає про існування першої. Щоб це виправити, треба другий формі якось передати відомості про першу формі. Для цього скористаємося передачею посилання на форму в конструкторі.
Отже перейдемо до другої формі і перейдемо до її коду - натиснемо правою кнопкою миші на форму і виберемо View Code (Перегляд коду). Поки він порожній і містить тільки конструктор. Оскільки C # підтримує перевантаження методів, то ми можемо створити кілька методів і конструкторів з різними параметрами і в залежності від ситуації викликати один з них. Отже, змінимо файл коду другої форми на наступний:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HelloApp
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Form2(Form1 f)
{
InitializeComponent();
f.BackColor = Color.Yellow;
}
}
}
Фактично ми тільки додали тут новий конструктор public Form2 (Form1 f), в якому ми отримуємо першу форму і встановлюємо її фон в жовтий колір. Тепер перейдемо до коду першої форми, де ми викликали другу форму і змінимо його на наступний:
private void button1_Click(object sender, EventArgs e)
{
Form2 newForm = new Form2(this);
newForm.Show();
}
Оскільки в даному випадку ключове слово this являє посилання на поточний об'єкт - об'єкт Form1, то при створенні другої форми вона буде отримувати її (посилання) і через неї керувати першою формою.
Тепер після натискання на кнопку у нас буде створена друга форма, яка відразу змінить колір першої форми.
Ми можемо також створювати об'єкти і поточної форми:
private void button1_Click(object sender, EventArgs e)
{
Form1 newForm1 = new Form1();
newForm1.Show();
Form2 newForm2 = new Form2(newForm1);
newForm2.Show();
}
При роботі з декількома формами треба враховувати, що одна з них є головною - яка запускається першої в файлі Program.cs. Якщо у нас одночасно відкрита купа форм, то при закритті головної закривається все додаток і разом з ним всі інші форми.