Как создать несколько форм в visual studio
Перейти к содержимому

Как создать несколько форм в visual studio

  • автор:

Практическое руководство. Добавление несколько наборов параметров в приложение на C#

В некоторых случаях в приложении может потребоваться наличие нескольких наборов параметров. Например, если вы разрабатываете приложение, в котором ожидается частое изменение определенной группы параметров, то целесообразно было бы перенести их в отдельный файл, который можно легко заменить полностью, оставив другие параметры нетронутыми. Visual Studio позволяет добавлять в проект несколько наборов параметров. Доступ к дополнительным наборам параметров можно получить через объект Properties.Settings .

Добавление дополнительного набора параметров

  1. В меню Проект Visual Studio выберите команду Добавить новый элемент. Откроется диалоговое окно Добавление нового элемента .
  2. В диалоговом окне Добавление нового элемента выберите Файл параметров, затем введите имя файла и нажмите кнопку Добавить, чтобы добавить новый файл параметров в решение.
  3. В Обозревателе решений перетащите новый файл параметров в папку Свойства. После этого новые параметры станут доступны в коде.
  4. Добавьте и используйте параметры из этого файле. Процесс в точности тот же, как и в случае с другими файлами параметров. Доступ к этой группе параметров можно получить с помощью объекта Properties.Settings .

См. также

  • Использование параметров приложения и параметров пользователя
  • Общие сведения о параметрах приложений

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

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

Создание многофайловых шаблонов элементов

Шаблоны элемента могут указывать только один элемент, но иногда этот элемент состоит из нескольких файлов. Например, для шаблона элемента Windows Forms в Visual Basic требуется три следующих файла:

  • файл, содержащий код для формы;
  • файл, содержащий сведения конструктора для формы;
  • файл, содержащий внедренные ресурсы для формы.

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

Использование мастера экспорта шаблонов

Многофайловый шаблон элемента создается аналогично однофайловому шаблону элемента. См. раздел Практическое руководство. Создание шаблонов элементов. На странице Выбор элементов для экспорта мастера выберите файл, который содержит зависимые файлы (например, файл формы Windows Forms). Мастер автоматически включит в шаблон все зависимые файлы, например файлы ресурсов и конструктора.

Создание шаблона многофайлового элемента вручную

  1. Создайте шаблон элемента так же, как если бы вы создавали однофайловый шаблон элемента вручную, но включите каждый файл, который составляет многофайловый элемент.
  2. В VSTEMPLATE-файл XML-кода добавьте элемент ProjectItem для каждого отдельного файла и добавьте атрибут TargetFileName в этот элемент. Присвойте атрибуту TargetFileName значение $входное_имя_файла$.расширение_файла, где расширение_файла — это расширение файла, включаемого в шаблон. Рассмотрим пример.
 Form1.vb Form1.Designer.vb Form1.resx 

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

Пример

В приведенном ниже примере показан шаблон Windows Forms. Когда на основе этого шаблона создается элемент, имена трех созданных файлов будут соответствовать имени, введенному в диалоговом окне Добавление нового элемента.

  Multi-file Item Template Icon.ico An example of a multi-file item template VisualBasic   Form1.vb Form1.Designer.vb Form1.resx   

Связанный контент

  • Создание шаблонов проектов и элементов
  • Практическое руководство. Создание шаблонов элементов
  • Параметры шаблона
  • Практическое руководство. Замена параметров в шаблоне

Как добавить форму в проект (Windows Forms .NET)

Добавьте формы в свой проект с помощью Visual Studio. Если в приложении несколько форм, вы сможете выбрать начальную форму для приложения или одновременно отобразить несколько форм.

Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.

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

Добавьте новую форму в Visual Studio.

  1. В Visual Studio найдите панель Обозреватель проектов. Щелкните проект правой кнопкой мыши и выберите Добавить>Форма (Windows Forms). Right click solution explorer to add new form to windows forms project
  2. В поле Имя введите имя формы, например MyNewForm. Visual Studio сформирует имя по умолчанию, которое является уникальным. Можно использовать это имя. Add item dialog in visual studio for windows forms

После добавления формы Visual Studio откроет конструктор форм для этой формы.

Добавление ссылки на проект в форму

Если у вас есть исходные файлы для формы, можно добавить форму в проект, скопировав файлы в папку проекта. Ссылки на все файлы кода в папке проекта и в дочерних папках проекта будут автоматически добавлены в проект.

Форма включает два файла с одинаковыми именами и разными расширениями: form2.cs (form2 — пример имени файла) и form2.Designer.cs. Иногда присутствует файл ресурсов с тем же именем — form2.resx. В предыдущем примере form2 представляет собой базовое имя файла. Необходимо скопировать все связанные файлы в папку проекта.

Кроме того, можно использовать Visual Studio для импорта файла в проект. При добавлении существующего файла в проект файл копируется в папку проекта.

Right click solution explorer to add existing form to windows forms project

  1. В Visual Studio найдите панель Обозреватель проектов. Щелкните проект правой кнопкой мыши и выберите Добавить>Существующий элемент.
  2. Перейдите в папку, содержащую файлы формы.
  3. Выберите файл form2.cs, где form2 — базовое имя файла для связанных файлов формы. Не выбирайте другие файлы, например form2.Designer.cs.

См. также

  • Как расположить форму и изменить ее размер (Windows Forms .NET)
  • Общие сведения о событиях (Windows Forms .NET)
  • Размещение и компоновка элементов управления (Windows Forms .NET)

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

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

Как связать две формы?

Хочу работать с двумя и более формами в C#. Для начала было бы интересно знать как связать две формы, чтобы из одной можно было бы обращаться к элементам другой.

Отслеживать
задан 11 дек 2011 в 14:03
690 7 7 золотых знаков 21 21 серебряный знак 51 51 бронзовый знак
Тоже интересует этот вопрос.
11 дек 2011 в 14:16

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

из Form1:
Form2 frm = new Form2(); frm.label1.Text = «hello»; frm.Show();

Отслеживать
51.3k 87 87 золотых знаков 267 267 серебряных знаков 505 505 бронзовых знаков
ответ дан 11 дек 2011 в 15:10
186 2 2 бронзовых знака
ВОТ! ВОТ ТО ЧТО Я ДОЛГО ИСКАЛ. Спасибо.
11 дек 2011 в 15:22
Ага спасибо! Попробуем.
11 дек 2011 в 15:37
тут немного неправильно, так как при каждом нажатии на кнопку будет создаваться новое окно с лейбом
11 дек 2011 в 16:01
А как будет правильно?
11 дек 2011 в 16:14

public partial class Form1 : Form < public Form1() < InitializeComponent(); frm2 = new Form2(); >Form2 frm2; private void button1_Click(object sender, EventArgs e) < frm2.Show(); >> 

Так как после закрытия формы Form2 она уничтожается, то я переопределяю метод для закрытия — OnClosing. Нужно зайти в конструктор формы Form2. В свойствах формы найти значок с молнией. В списке найти FormClosing и кликнуть дважды на пустое поле справаот него. В редакторе кода появится новый метод, в котором я пишу следующее:

private void Form2_FormClosing(object sender, FormClosingEventArgs e)

Далее другой пример, который касается взаимодействия дочерней формы и родительской. Form1.cs:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace childform < public partial class Form1 : Form < public Form1() < InitializeComponent(); >private void button1_Click(object sender, EventArgs e) < Form2 tempDialog = new Form2(this); tempDialog.ShowDialog(); >public void msgme() < MessageBox.Show("Parent Function Called"); >> > 
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace childform < public partial class Form2 : Form < private Form1 m_parent; public Form2(Form1 frm1) < InitializeComponent(); m_parent = frm1; >private void button1_Click(object sender, EventArgs e) < m_parent.msgme(); >> > 

В результате должен появиться мессаджбокс с сообщением «Parent Function Called». Если нужно обратиться к элементу формы, не забываем указывать видимость, так как по умолчанию она Private, то есть элемент не доступен извне. В конструкторе у свойства элемента устанавливаем Modifiers -> Public.

Отслеживать
ответ дан 11 дек 2011 в 16:27
231 2 2 серебряных знака 9 9 бронзовых знаков

Спасибо. А как закрыть первую форму, при нажатии на кнопку? Я делаю this.Close и закрывается вся программа.

11 дек 2011 в 16:39

@Святослав Правильно, ведь Form1 это родительская форма. Если нужно убрать с экрана, то используйте Hide().

11 дек 2011 в 16:48
И последний вопрос. Почему когда я закрываю вторую форму, отладка не останавливается?
11 дек 2011 в 16:59

Потому что Первая форма открыта. Если ты сделал команду this.Hile(); То она просто спрятана(свернута), чтобы её закрыть используй this.Close(); Или я что-то неправильно понял в вопросе?

11 дек 2011 в 17:02

Первая форма скрыта, ее просто не видно, т.к. мы ее скрыли, но программа продолжает выполняться. Есть 2 пути: 1. В событии OnClosing второй формы вызвать Show() для первой формы. 2. В событии OnClosing второй формы вызвать Application.Exit(), тогда отладка остановится, но это будет не логично, так как обычно выход из программы делают из родительской формы.

11 дек 2011 в 17:08

На самом деле довольно просто. Экземпляр формы — это экземпляр класса, поэтому если нужен доступ снаружи к чему-то внутри формы, просто сделайте соответствующее public свойство (или поле, или метод — как вам больше нравится).

ну и самое главное, что бы экземпляры форм были в области видимости друг у друга.

ну а как обращаться, я думаю, понятно и без объяснений, правда?

Отслеживать
ответ дан 11 дек 2011 в 14:37
622 4 4 серебряных знака 12 12 бронзовых знаков

Мне нет. Вот давайте разберем на примере. у меня есть 2 формы Form1 и Form2, на Form1 есть Label, а на Form2 есть кнопка, и как сделать так чтобы при нажатии на кнопку Label на Form1, получил значение «УРА ЗАРАБОТАЛО»?

11 дек 2011 в 14:55
делаешь экземпляр класса с лейбом, а в коде с кнопкой в листерене меняешь его значение
11 дек 2011 в 15:00

@Angus123 В конструкторе формы у элемента к которому хотите обратиться выставите свойство Modifiers — Public

11 дек 2011 в 15:02
Ага спасибо помогло!
11 дек 2011 в 15:22

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

Когда форма принадлежит другой форме, она закрывается или скрывается с формой владелицей. Например, рассмотрим форму Form2, которая принадлежит форме Form1. Если Form1 закрывается или сворачивается, Form2 также закрывается или сворачивается. Дочерние формы также никогда не отображаются сзади формы-владельца.

 userForm formСhild = new userForm(); //создание дочерней формы formСhild.Owner = this; //назначение дочерней форме, родителя. 

*Операции выполняются внутри тела класса родительской формы к котрой присоединяется дочерняя. Производный класс userForm унаследованный от класса Form, должен быть предварительно объявлен(здесь это опущено).

Теперь, в зависимости от потребностей вы можете

  1. Доверить процесс удаления дочернего окна сборщику мусора. В данном случае оно будет удалено после закрытия главного окна (если программистом не предусмотрено другого)
  2. Выполнить контролируемое удаление дочернего окна, после наступления необходимого вам события, для этого в теле необходимого вам метода, обрабатывающего наступление какого либо нужного вам события, нужно указать: formСhild.Dispose();

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

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

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