Как создать второе окно в windows forms
Перейти к содержимому

Как создать второе окно в windows forms

  • автор:

Практическое руководство. Создание дочерних форм MDI

Дочерние формы MDI являются основным элементом приложений с интерфейсом MDI, так как они находятся в центре взаимодействия с пользователями.

С помощью описанной ниже процедуры в Visual Studio можно создавать дочерние формы MDI, отображающие элемент управления RichTextBox аналогично большинству текстовых редакторов. Замена элемента управления System.Windows.Forms на другие элементы управления, такие как DataGridView, или на сочетание элементов управления позволяет создавать дочерние окна MDI (и, следовательно, приложения MDI) с разнообразными возможностями.

Создание дочерних форм MDI

  1. В Visual Studio создайте новый проект приложения Windows Forms. В окне Свойства формы присвойте свойству IsMdiContainer значение true , а свойству WindowsState — значение Maximized . При этом форма назначается в качестве MDI-контейнера для дочерних окон.
  2. Из Toolbox перетащите элемент управления MenuStrip в форму. Присвойте свойству Text значение File.
  3. Щелкните многоточие (. ) рядом со свойством Items и нажмите кнопку «Добавить «, чтобы добавить два дочерних элемента меню полосы инструментов. Присвойте свойству Text этих элементов значения Создать и Окно.
  4. В обозревателе решений щелкните правой кнопкой мыши проект, а затем выберите Добавить>Новый элемент.
  5. В диалоговом окне Добавление нового элемента на панели Шаблоны выберите Форма Windows Forms (в Visual Basic или Visual C#) или Приложение Windows Forms (.NET) (в Visual C++). В поле Имя введите имя формы Form2. Нажмите кнопку Открыть, чтобы добавить форму в проект.

Примечание. Дочерняя форма MDI, созданная на этом этапе, является стандартной формой Windows Forms. Таким образом, у нее есть свойство Opacity, которое позволяет управлять прозрачностью формы. Однако свойство Opacity предназначено для окон верхнего уровня. Его не следует использовать в дочерних формах MDI, иначе могут возникнуть проблемы с рисованием.

Примечание. В примере ниже обработчик событий обрабатывает событие Click для MenuItem2 . Имейте в виду, что в зависимости от особенностей архитектуры приложения пункт меню Создать может не являться MenuItem2 .

Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click Dim NewMDIChild As New Form2() 'Set the Parent Form of the Child window. NewMDIChild.MdiParent = Me 'Display the new form. NewMDIChild.Show() End Sub 
protected void MDIChildNew_Click(object sender, System.EventArgs e) < Form2 newMDIChild = new Form2(); // Set the Parent Form of the Child window. newMDIChild.MdiParent = this; // Display the new form. newMDIChild.Show(); >
private: void menuItem2_Click(System::Object ^ sender, System::EventArgs ^ e) < Form2^ newMDIChild = gcnew Form2(); // Set the Parent Form of the Child window. newMDIChild->MdiParent = this; // Display the new form. newMDIChild->Show(); > 

При использовании C++ добавьте следующую директиву #include в начало формы Form1.h:

#include "Form2.h" 

Примечание. Когда в дочерней форме MDI есть компонент MainMenu (обычно обладающий структурой пунктов меню) и он открыт внутри родительской формы MDI, также имеющей компонент MainMenu (обычно обладающий структурой пунктов меню), пункты меню будут объединены автоматически, если задано свойство MergeType (и, возможно, свойство MergeOrder). Установите для свойства MergeType обоих компонентов MainMenu и всех пунктов меню дочерней формы значение MergeItems. Кроме того, установите свойство MergeOrder таким образом, чтобы пункты обоих меню приводились в нужном порядке. Необходимо помнить, что при закрытии родительской формы MDI каждая из дочерних форм MDI создает событие Closing до создания события Closing для родительской формы MDI. Отмена события Closing дочерней формы MDI не отменяет событие Closing родительской формы MDI. Однако для аргумента CancelEventArgs для события Closing родительской формы MDI будет установлено значение true . Чтобы принудительно закрыть родительскую и все дочерние формы MDI, задайте для аргумента CancelEventArgs значение false .

См. также

  • Приложения с интерфейсом MDI
  • Практическое руководство. Создание родительских MDI-форм
  • Практическое руководство. Определение активной дочерней MDI-формы
  • Практическое руководство. Отправка данных в активную дочернюю MDI-форму
  • Практическое руководство. Упорядочение дочерних форм интерфейса MDI

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

как создать дополнительное окно в Windows Forms(т.е. внутри одного приложения при нажатии кнопки будет открываться второе окно)

Нужно сделать окно, которое при нажатии на кнопку будет открываться второе окно (для добавления нового файла). Допустим будет кнопка «добавить» при нажатии будет высвечиваться\открываться второе окно, в котором нужно будет заполнить несколько текстовых блоков, и при нажатии сохранить, всё это сохраниться в тхт файле. В общем, просто о том как создать второе окно в виндовс форм. Что-то вроде диалогового окна с кнопкой.

Отслеживать

20.2k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак

Как создать второе окно в windows forms

Чтобы добавить еще одну форму в проект, нажмем на имя проекта в окне 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)

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

Итак перейдем ко второй форме и перейдем к ее коду — нажмем правой кнопкой мыши на форму и выберем 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)

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

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

Мы можем также создавать объекты и текущей формы:

private void button1_Click(object sender, EventArgs e)

При работе с несколькими формами надо учитывать, что одна из них является главной — которая запускается первой в файле Program.cs. Если у нас одновременно открыта куча форм, то при закрытии главной закрывается все приложение и вместе с ним все остальные формы.

#7 — Переход между окнами в приложении

#7 - Переход между окнами в приложении

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

Видеоурок

Для перехода между страницами необходимо выполнять две задачи:

  1. скрывать окно в котором сейчас находитесь;
  2. открывать новое окно приложения.

Ниже приведен код для реализации подобного функицонала:

this.Hide(); // Скрываем нынешнее окно // Создаем объект на основе определенного окан MainForm mainForm = new MainForm(); // Показываем новое окно mainForm.Show();
Программа обучения

Если вас интересует более углубленное изучение самого языка и его фреймворков, то предлагаем вашему внимаю наш полный курс по изучению C# . За курс вы изучите язык C#, научитесь делать веб проекты на основе ASP NET и строить приложения при помощи WinForms и WPF.

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

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