Как открыть форму по кнопке c
Перейти к содержимому

Как открыть форму по кнопке c

  • автор:

Как открыть форму по кнопке c

Чтобы добавить еще одну форму в проект, нажмем на имя проекта в окне Solution Explorer (Обозреватель решений) правой кнопкой мыши и выберем Add(Добавить)->Windows Form.

добавление новой формы

Дадим новой форме какое-нибудь имя, например, Form2.cs:

создание новой формы

Итак, у нас в проект была добавлена вторая форма. Теперь попробуем осуществить взаимодействие между двумя формами. Допустим, первая форма по нажатию на кнопку будет вызывать вторую форму. Во-первых, добавим на первую форму Form1 кнопку и двойным щелчком по кнопке перейдем в файл кода. Итак, мы попадем в обработчик события нажатия кнопки, который создается по умолчанию после двойного щелчка по кнопке:

Теперь добавим в него код вызова второй формы. У нас вторая форма называется Form2, поэтому сначала мы создаем объект данного класса, а потом для его отображения на экране вызываем метод Show:

Теперь сделаем наоборот — чтобы вторая форма воздействовала на первую. Пока вторая форма не знает о существовании первой. Чтобы это исправить, надо второй форме как-то передать сведения о первой форме. Для этого воспользуемся передачей ссылки на форму в конструкторе.

Итак перейдем ко второй форме и перейдем к ее коду — нажмем правой кнопкой мыши на форму и выберем View Code (Просмотр кода). Пока он пустой и содержит только конструктор. Поскольку C# поддерживает перегрузку методов, то мы можем создать несколько методов и конструкторов с разными параметрами и в зависимости от ситуации вызывать один из них. Итак, изменим файл кода второй формы на следующий:

Фактически мы только добавили здесь новый конструктор public Form2(Form1 f) , в котором мы получаем первую форму и устанавливаем ее фон в желтый цвет. Теперь перейдем к коду первой формы, где мы вызывали вторую форму и изменим его на следующий:

Поскольку в данном случае ключевое слово this представляет ссылку на текущий объект — объект Form1, то при создании второй формы она будет получать ее (ссылку) и через нее управлять первой формой.

Теперь после нажатия на кнопку у нас будет создана вторая форма, которая сразу изменит цвет первой формы.

Как открыть и закрыть форму из другой формы в C# (правильное решение)

C# изучаю не так давно и встала передо мной недавно задача:
— открыть Form2 при нажатии на кнопку в Form1;
— спрятать Form1;
— открыть Form1 при закрытии Form2.
На первый взгляд задача показалась элементарной, но… возникли нюансы — при закрытии приложения оно не выгружалось и в диспетчере задач мы наблюдали его работу, хотя визуально оно как бы закрылось.

В чём же причина такого поведения? Об этом расскажу дальше. Рассмотрим открытие и закрытие форм на примерах.

Открываем и закрываем форму из другой формы

У нас в приложении есть две формы Form1 — главная, которая открывается сразу при запуске приложения и Form2, которую открываем по нажатию на кнопку.

Чтобы открыть Form2 нам необходим следующий код, который будет срабатывать при нажатии на кнопку:

Теперь у нас открылась Form2 и спряталась Form1. Поработав с Form2 мы её закрываем и при этом нам надо после этого отобразить Form1. Многие начинающие, включая меня начинают писать следующий код, который помещаем в событие, которое происходит после закрытия Form2:

Вроде всё логично: Form2 закрылась, Form1 открылась. Однако используя этот метод, мы можем заметить, что после того как мы закрываем приложение оно продолжает висеть в памяти. Многие, не зная почему это происходит дописывают в метод «Form1_FormClosed» дописывают принудительное закрытие приложения:

Это работает, однако правильно ли это? Решать вам.

А теперь ответим на вопрос «почему приложение висит в памяти» и рассмотрим простое и правильное решение.

Первая часть кода: мы отображаем Form2 и скрываем Form1. Не закрываем, а именно скрываем, т.е. экземпляр Form1 продолжает существовать.

Закрыть Form1 вместо скрытия не получится, так как это главная форма приложения и при её закрытии мы закроем всё приложение.

Вторая часть кода: строкой «Form ifrm = new Form1();» мы создаём второй экземпляр Form1 и далее его и отображаем, а первый экземпляр Form1 продолжает жить в памяти. И когда мы закрываем приложение (Form1), то первый экземпляр при этом не закрываем он так и «сидит» в памяти, поэтому приложение не выгружается из памяти. В связи с этим многие и закрывают принудительно приложение при закрытии главной формы (Form1).

Сейчас мы с вами рассмотрим правильный код, который не будет создавать второй экземпляр Form1 и отображать его, а будет отображать скрытую до этого Form1.

OpenForms — получает коллекцию открытых форм приложения. В нашем случае мы сразу обратились к главной форме приложения (OpenForms[0]).

Теперь при закрытии Form2 у нас будет вызываться и отображаться та форма, которая породила закрывающуюся.

Учитываем координаты форм при открытии

Представьте ситуацию. Открыта Form1 вы её перемещаете в правый верхний угол экрана. Потом нажимаете на кнопку и… Form2 открывается по центру экрана или в другом месте, но не в том месте, где была Form1. Многие улыбнуться и скажут, что в свойствах Form2 надо прописать/указать следующее «StartPosition -> CenterParent» и открывать Form2 следующим методом:

Это правильное решение, которое всегда будет открывать Form2 поверх Form1 и всегда по центру Form1. Однако этот код не применим, если вам надо скрывать Form1, так как Form1 не будет скрываться.

Сейчас приведу полное решение, которое позволит открывать Form1 и Form2 в той же точке, где находилась до этого форма, вызывающая другую форму. Код включает всё вышеописанное. В свойствах форм надо прописать следующее (прямо в студии выбираете эти значения):

— свойство Form1: «StartPosition -> CenterScreen»
— свойство Form2: «StartPosition -> Manual»

Открыть и закрыть форму из другой формы в C# (правильное решение)

Теперь вы не создаёте второго экземпляра Form1 и приложение всегда будет закрываться, не оставаясь в памяти.

Открываем форму поверх другой формы, как модальное окно

Чтобы открыть Form2 поверх Form1, как модальное окно, не скрывая Form1, вам хватит этого кода:

В итоге Form2 будет открыта поверх Form1. В этом случае пользователь не сможет переключиться на Form1 не закрыв Form2.

Как открыть форму по кнопке 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;

private void button1_Click(object sender, EventArgs e)

public partial class Form1 : Form
public Form1()
InitializeComponent();
>

Пример создания и вызова новой формы приложения в C#

Разработать демонстрационное приложение, осуществляющее вызов из главной формы второстепенной формы по схеме, изображенной на рис. 1. Приложение реализует взаимодействие между различными формами, которыми могут быть диалоговые окна любой сложности.

В главной форме Form1 разместить:

  • элемент управления типа Label для вывода результата возврата из второстепенной формы;
  • элемент управления типа Button для вызова второстепенной формы.

Во второстепенной форме Form2 разместить:

  • элемент управления типа Label для вывода заголовка формы;
  • два элемента управления типа Button для обеспечения подтверждения или неподтверждения выбора (действия) во второстепенной форме.

C# Схема взаимодействия между формами

Рис. 1. Схема взаимодействия между формами

Выполнение

1. Создать приложение типа Windows Forms Application

Запустить Microsoft Visual Studio 2010 . Пример создания нового приложения типа Windows Forms Application подробно описывается здесь.

Сохранить проект в произвольной папке.

После создания приложения у нас есть одна форма. Программный код формы размещен в файле « Form1.cs » (рис. 2).

C# Windows Forms Главная форма

Рис. 2. Главная форма приложения Form1

2. Разработка главной формы приложения

Из палитры элементов управления Toolbox выносим на форму:

  • элемент управления типа Button ;
  • элемент управления типа Label .

Автоматически создаются два объекта-переменные с именами button1 и label1 .
В элементе управления типа Button свойство Text установить в значение « Show Form 2 «.
В элементе управления типа Label свойство Text установить в значение « Result = «.
После внесенных изменений главная форма Form1 приложения будет иметь вид как показано на рисунке 3.

C# Windows Forms форма

Рис. 3. Главная форма приложения после внесенных изменений

3. Создание второстепенной формы

Для создания второстепенной формы в C# можно воспользоваться несколькими способами.

Способ 1.
Для добавления формы №2 в проект этим способом нужно вызвать команду (рис. 4)

C# Windows Forms команда "Add Windows Form. "

Рис. 4. Команда « Add Windows Form… » для добавления новой формы в проект

В результате откроется окно « Add New Item — Windows Forms Application1 «. В этом окне выбираем элемент « Windows Form » (рис. 5). Оставляем имя формы как « Form2.cs «.

Windows Form C# добавление новой формы

Рис. 5. Окно добавления новой формы к проекту

После нажатия на кнопке « Add » новая форма будет добавлена к проекту (рис. 6).

C# Windows Forms форма Form2 файл "Form2.cs"

Рис. 6. Новосозданная форма Form2 и файл « Form2.cs «

Способ 2.

Также новую форму можно добавить к проекту с помощью соответствующей команды из контекстного меню (рис. 7).
Последовательность действий следующая:

  • в Solution Explorer сделать клик правой кнопкой «мышки» на названии приложения WindowsFormsApplication1 ;
  • выбрать подменю Add ;
  • в подменю Add выбрать команду « Windows Form… «.

C# Windows Forms новая форма Solution Explorer

Рис. 7. Добавление новой формы из Solution Explorer

В результате откроется точно такое же окно как на рисунке 5.

4. Разработка второстепенной формы

Следующим шагом есть разработка второстепенной формы. Используя средства панели инструментов Toolbox создаем второстепенную форму Form2 как показано на рисунке 8. Такое построение формы соответствует условию задачи. Таким же образом, на Form2 имеем элементы управления label1 , butto1 , button2 .

C# Windows Forms Второстепенная форма Form2

Рис. 8. Второстепенная форма Form2

5. Программирование событий клика на кнопках OK и Cancel формы Form2

Программируем событие клика на кнопке OK . Подробный пример программирования события клика на кнопке OK описывается здесь.

В программный код обработчика события button1_Click() (кнопка « OK «) вписываем следующую строку:

это значит, что результат возврата из формы Form2 есть « OK «.
Точно так же в обработчике события button2_Click вписываем:

это значит выбор кнопки « Cancel » ( button2 ).

После внесенных изменений листинг программного кода файла « Form2.c s» будет иметь следующий вид:

Переход к программному коду формы Form2 (файл « Form2.cs «) можно осуществить с помощью Solution Explorer . Для этого в Solution Explorer вызываем контекстное меню для формы Form2 и из этого меню выбираем команду « View Code » (рис. 9).

Visual Studio C# Команда "View Code"

Рис. 9. Команда « View Code » для перехода в режим программного кода

6. Вызов формы Form2 из главной формы приложения

Согласно с условием задачи, для вызова Form2 из Form1 нужно запрограммировать событие клика на кнопке « Show Form 2 «.

Программный код обработчика события будет иметь следующий вид:

В листинге, приведенном выше, сначала создается экземпляр класса типа Form2 . В операторе условного перехода if осуществляется вызов диалогового окна формы Form2 с помощью строки

Функция ShowDialog() выводит окно формы и держит его открытым до тех пор, пока пользователь не сделает какой-либо выбор. После выбора пользователем той или иной команды, окно закрывается с кодом возврата. Происходит проверка кода возврата с известными константами класса DialogResult . После проверки выводится сообщение о действии, выбранном пользователем в Form2 (элемент управления label2 ).

Листинг всего программного кода формы Form1 следующий

7. Выполнение приложения

После выполненных действий можно выполнять приложение и исследовать его работу.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *