Работа с формами
Внешний вид приложения является нам преимущественно через формы. Формы являются основными строительными блоками. Они предоставляют контейнер для различных элементов управления. А механизм событий позволяет элементам формы отзываться на ввод пользователя, и, таким образом, взаимодействовать с пользователем.
При открытии проекта в Visual Studio в графическом редакторе мы можем увидеть визуальную часть формы — ту часть, которую мы видим после запуска приложения и куда мы переносим элементы с панели управления. Но на самом деле форма скрывает мощный функционал, состоящий из методов, свойств, событий и прочее. Рассмотрим основные свойства форм.
Если мы запустим приложение, то нам отобразится одна пустая форма. Однако даже такой простой проект с пустой формой имеет несколько компонентов:
Несмотря на то, что мы видим только форму, но стартовой точкой входа в графическое приложение является класс Program, расположенный в файле Program.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp < static class Program < [STAThread] static void Main() < Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); >> >
Сначала программой запускается данный класс, затем с помощью выражения Application.Run(new Form1()) он запускает форму Form1. Если вдруг мы захотим изменить стартовую форму в приложении на какую-нибудь другую, то нам надо изменить в этом выражении Form1 на соответствующий класс формы.
Сама форма сложна по содержанию. Она делится на ряд компонентов. Так, в структуре проекта есть файл Form1.Designer.cs, который выглядит примерно так:
namespace HelloApp < partial class Form1 < ////// Required designer variable. /// private System.ComponentModel.IContainer components = null; ////// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) < if (disposing && (components != null)) < components.Dispose(); >base.Dispose(disposing); > #region Windows Form Designer generated code ////// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() < this.SuspendLayout(); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(284, 261); this.Name = "Form1"; this.Text = "Привет мир!"; this.ResumeLayout(false); >#endregion > >
Здесь объявляется частичный класс формы Form1, которая имеет два метода: Dispose() , который выполняет роль деструктора объекта, и InitializeComponent() , который устанавливает начальные значения свойств формы.
При добавлении элементов управления, например, кнопок, их описание также добавляется в этот файл.
Но на практике мы редко будем сталкиваться с этим классом, так как они выполняет в основном дизайнерские функции — установка свойств объектов, установка переменных.
Еще один файл — Form1.resx — хранит ресурсы формы. Как правило, ресурсы используются для создания однообразных форм сразу для нескольких языковых культур.
И более важный файл — Form1.cs, который в структуре проекта называется просто Form1, содержит код или программную логику формы:
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 Form1 : Form < public Form1() < InitializeComponent(); >> >
По умолчанию здесь есть только конструктор формы, в котором просто вызывается метод InitializeComponent() , объявленный в файле дизайнера Form1.Designer.cs. Именно с этим файлом мы и будем больше работать.
Руководство. Создание приложения Windows Forms с помощью .NET
Из этого краткого руководства вы узнаете, как создать новое приложение Windows Forms с помощью Visual Studio. После создания первоначального приложения вы научитесь добавлять элементы управления и обрабатывать события. По завершении работы с этим руководством у вас будет простое приложение, добавляющее имена в список.
Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.
В этом руководстве описано следующее:
- Создание приложения Windows Forms
- Добавление элементов управления на форму
- Обработка событий элемента управления для предоставления функциональных возможностей приложения
- Выполнить приложение
Необходимые компоненты
- Visual Studio 2022 версии 17.0 или более поздней.
- Выберите рабочую нагрузку Разработка классических приложений .NET.
- Выберите отдельный компонент .NET 6.
- Visual Studio 2022 версии 17.4 или более поздней версии
- Выберите рабочую нагрузку Разработка классических приложений .NET.
- Выберите отдельный компонент .NET 7
Используйте Visual Studio 2022 версии 17.4 или более поздней версии и установите отдельные компоненты .NET 7 и .NET 6. Добавлена поддержка .NET 7 в Visual Studio 2022 версии 17.4.
Создание приложения Windows Forms
Первым шагом в создании нового приложения является запуск Visual Studio и создание приложения на основе шаблона.

- Откройте Visual Studio.
- Выберите Создать новый проект.
- В поле Поиск шаблонов введите winforms и дождитесь появления результатов поиска.
- В раскрывающемся списке язык кода выберите C# или Visual Basic.
- В списке шаблонов выберите Приложение Windows Forms и щелкните Далее.
Важно! Не выбирайте шаблон Приложение Windows Forms (.NET Framework).
На следующем рисунке показаны шаблоны проектов как для C#, так и для Visual Basic .NET. Если применить фильтр языка кода, отображается соответствующий шаблон.

- В окне Настроить новый проект задайте в поле Имя проекта значение Names и щелкните Создать. Вы также можете сохранить проект в другую папку, изменив путь в поле Расположение.

- Наконец, на странице Дополнительные сведения выберите для параметра Платформа значение .NET 6.0 (долгосрочная поддержка) и нажмите кнопку Создать.

- Откройте Visual Studio.
- Выберите Создать новый проект.
- В поле Поиск шаблонов введите winforms и дождитесь появления результатов поиска.
- В раскрывающемся списке язык кода выберите C# или Visual Basic.
- В списке шаблонов выберите Приложение Windows Forms и щелкните Далее.

Важно! Не выбирайте шаблон Приложение Windows Forms (.NET Framework).
На следующем рисунке показаны шаблоны проектов как для C#, так и для Visual Basic .NET. Если применить фильтр языка кода, отображается соответствующий шаблон.

- В окне Настроить новый проект задайте в поле Имя проекта значение Names и щелкните Создать. Вы также можете сохранить проект в другую папку, изменив путь в поле Расположение.

- Наконец, в окне «Дополнительные сведения » выберите .NET 7.0 (стандартная поддержка терминов) для параметра Framework и нажмите кнопку «Создать«.

- Обозреватель решений Все файлы проекта, код, формы и ресурсы отображаются в этой области.
- Свойства На этой панели отображаются параметры свойств, которые можно настроить в зависимости от выбранного элемента. Например, если выбрать элемент в Обозревателе решений, отобразятся параметры свойств, связанные с файлом. Если выбрать объект в конструкторе, отобразятся параметры элемента управления или формы.
- Конструктор форм Это конструктор для формы. Он является интерактивным, и на него можно перетаскивать объекты из панели элементов. Выбирая и перемещая элементы в конструкторе, можно визуально создавать пользовательский интерфейс для приложения.
- Панель инструментов Панель элементов содержит все элементы управления, которые можно добавить на форму. Чтобы добавить элемент управления на текущую форму, дважды щелкните элемент управления или перетащите его.
- Label
- Кнопка
- Listbox
- текстовое поле;
- Выберите в форме элемент управления «Кнопка».
- В области Свойства щелкните значок события , чтобы вывести список событий кнопки.
- Найдите событие Click и дважды щелкните его, чтобы создать обработчик событий. Это действие добавляет следующий код в форму:
После создания приложения Visual Studio должен открыть панель конструктора для формы по умолчанию Form1. Если конструктор форм не отображается, дважды щелкните форму в области Обозреватель решений, чтобы открыть окно конструктора.
Важные элементы среды Visual Studio
Поддержка Windows Forms в Visual Studio состоит из четырех важных компонентов, с которыми вы будете взаимодействовать при создании приложения.

Если панель элементов не отображается, ее можно отобразить с помощью элемента меню «Вид >панели элементов».

Добавление элементов управления на форму
Открыв конструктор форм Form1, используйте панель Область элементов, чтобы добавить на форму следующие элементы управления:
Вы можете расположить и изменить размер элементов управления в соответствии со следующими настройками. Либо визуально перенесите их, чтобы они соответствовали следующему снимку экрана, либо щелкните каждый элемент управления и настройте параметры в области Свойства. Можно также щелкнуть область заголовка формы, чтобы выбрать форму.
| Объект | Параметр | Значение |
|---|---|---|
| Форма | Текст | Names |
| Size | 268, 180 | |
| Подпись | Местонахождение | 12, 9 |
| Текст | Names | |
| Listbox | Имя | lstNames |
| Местонахождение | 12, 27 | |
| Size | 120, 94 | |
| текстовое поле; | Имя | txtName |
| Местонахождение | 138, 26 | |
| Size | 100, 23 | |
| Кнопка | Имя | btnAdd |
| Местонахождение | 138, 55 | |
| Size | 100, 23 | |
| Текст | Add Name |
Вы должны получить в конструкторе форму, которая выглядит следующим образом.

Обработка событий
Теперь, когда в форме есть все элементы управления, необходимо обрабатывать события элементов управления, чтобы реагировать на вводимые пользователем данные. Открыв конструктор форм, выполните следующие действия.
![]()
private void btnAdd_Click(object sender, EventArgs e)
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click End Sub
private void btnAdd_Click(object sender, EventArgs e)
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click If Not String.IsNullOrWhiteSpace(txtName.Text) And Not lstNames.Items.Contains(txtName.Text) Then lstNames.Items.Add(txtName.Text) End If End Sub
Выполнить приложение
Теперь, когда у нас есть код события, можно запустить приложение, нажав клавишу F5 или выбрав пункт меню Отладка>Начать отладку. Отобразится форма, и вы можете ввести имя в текстовое поле, а затем добавить его, нажав кнопку.
Руководство. Начало работы с конструктором Windows Forms
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Конструктор Windows Forms предоставляет множество средств для создания приложений Windows Forms. В этой статье показано, как создать приложение с помощью различных средств, предоставляемых конструктором, включая следующие задачи:
- Упорядочение элементов управления с помощью оснастки.
- Выполнение задач конструктора с помощью смарт-тегов.
- устанавливать поля и отбивки для элементов управления;
- Упорядочение элементов управления с помощью TableLayoutPanel элемента управления.
- разделять макет элемента управления с помощью элемента управления SplitContainer;
- просматривать макет в окне «Структура документа»;
- размещать элементы управления с отображением размера и сведений о расположении;
- Задайте значения свойств с помощью окно свойств.
По завершении вы получите пользовательский элемент управления, который был собран с помощью многих функций макета, доступных в конструкторе Windows Forms. Этот элемент управления реализует пользовательский интерфейс для простого калькулятора. На следующем изображении показан общий макет элемента управления калькулятора.
Если вы являетесь разработчиком C++ и ищете руководство по созданию приложения Windows, которое включает формы и элементы управления, см. статью Создание приложения MFC на основе форм. Дополнительные обобщенные сведения см. в разделе Обзор программирования Windows на C++.
Создание проекта пользовательского элемента управления
Первым шагом является создание проекта элемента управления DemoCalculator.

- Откройте Visual Studio и создайте проект библиотеки элементов управления Windows Forms с помощью шаблона платформа .NET Framework для C# или Visual Basic. Задайте проекту имя DemoCalculatorLib.
- Чтобы переименовать файл, в обозревателе решений щелкните правой кнопкой мыши элемент UserControl1.vb или UserControl1.cs, выберите Переименовать и замените имя файла на DemoCalculator.vb или DemoCalculator.cs. Выберите «Да «, когда вам будет предложено переименовать все ссылки на элемент кода UserControl1.
В конструктор Windows Forms отображается поверхность конструктора для элемента управления DemoCalculator. В этом представлении можно графически спроектировать внешний вид элемента управления, выбрав элементы управления и компоненты на панели элементов и поместив их на поверхности конструктора. Дополнительные сведения см. в статье о разновидностях пользовательских элементов управления.
Разработка макета элемента управления
Элемент управления DemoCalculator содержит несколько элементов управления Windows Forms. В этой процедуре вы упорядочены элементы управления с помощью конструктора Windows Forms.
- В конструкторе Windows Forms увеличьте размер элемента управления DemoCalculator, выбрав маркер изменения размера в правом нижнем углу и перетащив его вниз и вправо. В правом нижнем углу Visual Studio просмотрите сведения о размере и расположении элементов управления. Задайте элементу управления ширину 500 и высоту 400, наблюдая за сведениями о размере при изменении размера элемента управления.
- На панели элементов выберите узел Контейнеры, чтобы открыть его. Выберите элемент управления SplitContainer и перетащите его на поверхность конструктора. Элемент SplitContainer появится на поверхности конструктора элемента управления DemoCalculator.
Совет Размер элемента управления SplitContainer автоматически устанавливается в соответствии с размером элемента управления DemoCalculator. В окне Свойства проверьте свойства, заданные для элемента управления SplitContainer . Найдите свойство Dock. Ему задано значение DockStyle.Fill. Это означает, что размер элемента управления SplitContainer устанавливается в соответствии с границами элемента управления DemoCalculator. Измените размер элемента управления DemoCalculator, чтобы проверить это поведение.
Примечание. Для некоторых элементов управления доступны смарт-теги, упрощающие проектирование. Дополнительные сведения см. в пошаговом руководстве. Выполнение распространенных задач с помощью смарт-тегов в элементах управления Windows Forms.
Заполнение элемента управления
Теперь, когда макет элемента управления настроен, можно добавить в элемент управления DemoCalculator кнопки и экран.
- На панели элементов выберите значок элемента управления TextBox . Элемент управления TextBox помещается в первую ячейку элемента управления TableLayoutPanel .
- В окне Свойства замените значение свойства ColumnSpan элемента управления TextBox на 5. Элемент управления TextBox переместится в центр своей строки.
- Замените значение свойства Anchor элемента управления TextBox на Left , Right . Элемент управления TextBox расширится по горизонтали, заняв все пять столбцов.
- Измените значение свойства TextBox элемента управления TextAlign на Right .
- В окне Свойства разверните узел свойства Font . Задайте значение 14 для Size и true для Bold у элемента управления TextBox .
- Выберите элемент управления TableLayoutPanel .
- На панели элементов выберите значок Button . Элемент управления Button разместится в следующей свободной ячейке элемента управления TableLayoutPanel .
- На панели элементов выберите Button еще четыре раза, чтобы заполнить вторую строку элемента управления TableLayoutPanel .
- Выберите все пять элементов управления Button , удерживая нажатой клавишу SHIFT. Нажмите клавиши CTRL+C, чтобы скопировать элементы управления Button в буфер обмена.
- Трижды нажмите сочетание клавиш CTRL+V, чтобы вставить скопированные элементы управления Button в оставшиеся строки элемента управления TableLayoutPanel .
- Выберите все 20 элементов управления Button , удерживая нажатой клавишу SHIFT.
- В окне Свойства замените значение свойства Dock на Fill . Все элементы управления Button закрепятся в своих ячейках.
- В окне Свойства разверните узел свойства Margin . Для All задайте значение 5. Всем элементам управления Button задается меньший размер, чтобы увеличить поля между ними.
- Выберите button10 и button20, после чего нажмите клавишу DELETE, чтобы удалить их из макета.
- Выберите button5 и button15, после чего замените значение их свойства RowSpan на 2. Эти кнопки представляют кнопки Clear и = button for the DemoCalculator control.
Использование окна структуры документа
Если в элементе управления или форме присутствует несколько элементов управления, перемещаться по макету удобнее с помощью окна «Структура документа».
- В строке меню выберите Вид>Другие окна>Структура документа. В этом окне структура элемента управления DemoCalculator и его составных элементов управления представлена в виде дерева. Дочерние элементы управления контейнерных элементов управления, таких как SplitContainer , отображаются в виде подузлов дерева. Вы также можете переименовать элементы управления с помощью окна «Структура документа».
- В окне Структура документа щелкните правой кнопкой мыши элемент button1, чтобы выбрать его, после чего щелкните Переименовать. Замените его имя на sevenButton.
- В окне Структура документа замените имена элементов управления Button , заданные конструктором, на имена для рабочей среды согласно следующему списку:
- button1 на sevenButton;
- button2 на eightButton;
- button3 на nineButton;
- button4 на divisionButton;
- button5 на clearButton;
- button6 на fourButton;
- button7 на fiveButton;
- button8 на sixButton;
- button9 на multiplicationButton;
- button11 на oneButton;
- button12 на twoButton;
- button13 на threeButton;
- button14 на subtractionButton;
- button15 на equalsButton;
- button16 на zeroButton;
- button17 на changeSignButton;
- button18 на decimalButton;
- button19 на additionButton;
- С помощью окон Структура документа и Свойства измените значения свойства Text для каждого имени элемента управления Button согласно следующему списку:
- для элемента управления sevenButton замените свойство текста на 7;
- для элемента управления eightButton замените свойство текста на 8;
- для элемента управления nineButton замените свойство текста на 9;
- для элемента управления divisionButton замените свойство текста на / (косая черта);
- для элемента управления clearButton замените свойство текста на Clear;
- для элемента управления fourButton замените свойство текста на 4;
- для элемента управления fiveButton замените свойство текста на 5;
- для элемента управления sixButton замените свойство текста на 6;
- для элемента управления multiplicationButton замените свойство текста на * (звездочка);
- для элемента управления oneButton замените свойство текста на 1;
- для элемента управления twoButton замените свойство текста на 2;
- для элемента управления threeButton замените свойство текста на 3;
- для элемента управления subtractionButton замените свойство текста на — (дефис);
- для элемента управления equalsButton замените свойство текста на = (знак равенства);
- для элемента управления zeroButton замените свойство текста на 0;
- для элемента управления changeSignButton замените свойство текста на +/-;
- для элемента управления decimalButton замените свойство текста на . (точка);
- для элемента управления additionButton замените свойство текста на + (знак «плюс»);
- На поверхности конструктора выберите все элементы управления Button , удерживая нажатой клавишу SHIFT.
- В окне Свойства разверните узел свойства Font . Задайте значение 14 для Size и true для Bold у всех элементов управления Button .
Этот набор инструкций завершает проектирование элемента управления DemoCalculator. Остается только добавить логику калькулятора.
Добавление обработчиков событий
Кнопки в элементе управления DemoCalculator имеют обработчики событий, которые можно использовать для реализации большей части логики калькулятора. Конструктор Windows Forms позволяет реализовать заглушки всех обработчиков событий для всех кнопок одним выбором.
- На поверхности конструктора выберите все элементы управления Button , удерживая нажатой клавишу SHIFT.
- Выберите один из элементов управления Button . В редакторе кода откроются обработчики событий, созданные конструктором.
Тестирование элемента управления
Поскольку элемент управления DemoCalculator наследуется от класса UserControl, его поведение можно проверить с помощью Контейнера для тестирования пользовательских элементов управления. Дополнительные сведения см. в статье «Практическое руководство. Тестирование поведения во время выполнения userControl».
- Нажмите клавишу F5, чтобы собрать и запустить элемент управления DemoCalculator в Контейнере для тестирования пользовательских элементов управления.
- Выберите границу между панелями SplitContainer и перетащите ее влево и вправо. Размеры элемента TableLayoutPanel и всех его дочерних элементов управления будут изменяться в соответствии с доступным пространством.
- После завершения тестирования элемента управления нажмите кнопку «Закрыть«.
Использование элемента управления в форме
Элемент управления DemoCalculator можно использовать в других составных элементах управления или в форме. Ниже описано, как это сделать.
Создание проекта
Первым шагом является создание проекта приложения. В этом проекте выполняется сборка приложения, демонстрирующего работу пользовательского элемента управления.
- Создайте проект Приложение Windows Forms с именем DemoCalculatorTest.
- В Обозревателе решений щелкните правой кнопкой мыши проект DemoCalculatorTest и выберите Добавить>Ссылка на проект, чтобы открыть диалоговое окно Диспетчер ссылок.
- Перейдите на вкладку Проекты и выберите проект DemoCalculatorLib, чтобы добавить ссылку на тестовый проект.
- В обозревателе решений щелкните правой кнопкой мыши DemoCalculatorTest и выберите пункт Назначить запускаемым проектом.
- В конструкторе Windows Forms увеличьте размер формы примерно до 700 x 500.
Использование элемента управления в макете формы
Чтобы использовать элемент управления DemoCalculator в приложении, его необходимо поместить в форму.
- На панели элементов разверните узел Компоненты DemoCalculatorLib.
- Перетащите элемент управления DemoCalculator с панели элементов в форму. Переместите элемент управления в левый верхний угол формы. Когда элемент управления близок к границам формы, отрезки отображаются. Линии привязки указывают расстояние свойства Padding формы и свойства Margin элемента управления. Поместите элемент управления в расположение, указанное линиями привязки. Дополнительные сведения см. в пошаговом руководстве. Упорядочение элементов управления с помощью линий оснастки.
- Перетащите элемент управления Button с панели элементов и поместите его в форму.
- Перемещайте элемент управления Button по элементу управления DemoCalculator, чтобы определить, где отображаются линии привязки. Вы можете точно и легко выровнять элементы управления с помощью этой функции. По завершении удалите элемент управления Button .
- Щелкните правой кнопкой мыши элемент управления DemoCalculator и выберите пункт Свойства.
- Замените значение свойства Dock на Fill .
- Выберите форму, а затем разверните узел свойства Padding . Замените значение Все на 20. Размер элемента управления DemoCalculator уменьшится в соответствии с новым значением формы Padding .
- Измените размер формы, перетаскивая различные маркеры изменения размера в разные положения. Обратите внимание на то, как размер элемента управления DemoCalculator пропорционально изменяется.
Следующие шаги
В этой статье было показано, как создать пользовательский интерфейс для простого калькулятора. Чтобы продолжить, вы можете расширить свою функциональность, реализуя логику калькулятора, а затем опубликовать приложение с помощью ClickOnce. Кроме того, перейдите к другому руководству, в котором вы создаете средство просмотра рисунков с помощью Windows Forms.
См. также
- Элементы управления Windows Forms
- Специальные возможности для элементов управления в Windows Forms
- Публикация с помощью ClickOnce
Как добавить форму в проект (Windows Forms .NET)
Добавьте формы в свой проект с помощью Visual Studio. Если в приложении несколько форм, вы сможете выбрать начальную форму для приложения или одновременно отобразить несколько форм.
Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.
Добавление новой формы
Добавьте новую форму в Visual Studio.
- В Visual Studio найдите панель Обозреватель проектов. Щелкните проект правой кнопкой мыши и выберите Добавить>Форма (Windows Forms).

- В поле Имя введите имя формы, например MyNewForm. Visual Studio сформирует имя по умолчанию, которое является уникальным. Можно использовать это имя.

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

- В Visual Studio найдите панель Обозреватель проектов. Щелкните проект правой кнопкой мыши и выберите Добавить>Существующий элемент.
- Перейдите в папку, содержащую файлы формы.
- Выберите файл form2.cs, где form2 — базовое имя файла для связанных файлов формы. Не выбирайте другие файлы, например form2.Designer.cs.
См. также
- Как расположить форму и изменить ее размер (Windows Forms .NET)
- Общие сведения о событиях (Windows Forms .NET)
- Размещение и компоновка элементов управления (Windows Forms .NET)
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
.NET Desktop feedback
The .NET Desktop documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
