Добавление форм. Взаимодействие между формами
Последнее обновление: 31.10.2015
Чтобы добавить еще одну форму в проект, нажмем на имя проекта в окне 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.
Если у нас одновременно открыта куча форм, то при закрытии главной закрывается все приложение и вместе с ним все остальные формы.
Ответы на 7 самых частых вопроса по WinForms
1. Как создать вторую форму
2. Как передать данные из одной формы в другую
2.1 Изменение модификатора доступа
2.2 Использование открытого свойства/метода
2.3 Передача данных в конструктор Form2
2.4 Передача ссылки в конструктор
2.5 Используем свойство ‘родитель’
2.6 Используем отдельный класс
2.7 Использование функций обратного вызова
2.7.1 Передача метода в конструктор
2.7.2 Создание отдельного класса с делегатом
2.8 Использование событий
3. Как получить доступ к контролу из другого потока
3.1 Простой и неправильный способ (CheckForIllegalCrossThreadCalls)
3.2 Использование методов Invoke/BeginInvoke
4. Как динамически добавить/удалить контрол.
4.1 Добавление
4.2 Удаление
5. Как создать массив контролов.
6. Как получить доступ к контролу по имени.
7. Как пройтись по всем однотипным котролам.
1. Как создать вторую форму
Любая форма представляет из себя класс, унаследованный от Form.
Экземпляр главной формы создается в файле Program.cs по умолчанию.
C# | ||
|
Чтобы отобразить вторую форму, надо создать экземпляр этого класса (Form2), например в обработчике события главной
C# | ||
|
При этом ShowDialog() блокирует главную форму, т.е. управление вернется в нее, только по закрытию второй формы, а Show() просто отображает вторую форму, т.е. будут доступны обе формы.
2. Как передать данные из одной формы в другую
Часто возникает необходимость передать данные из одной формы в другую, я придумал 7 способов, у каждого свои недостатки и достоинства.
2.1 Изменение модификатора доступа (добавлено 24 июля 2017: лучше воздержаться от применения данного способа)
В Form2 Установить модификатор доступа для контрола/поля public
В любом месте Form1
C# | ||
|
+ Самый быстрый в реализации и удобный способ
— Противоречит всем основам ООП
— Возможна передача только из более поздней формы в более раннюю
— Форма f показывается только с использованием ShowDialog(), т.е. в первую форму управление вернется только по закрытию второй. Избежать этого можно, сохранив ссылку на вторую форму в поле первой формы
2.2 Использование открытого свойства/метода. Способ очень похож на первый
В классе Form2 определяем свойство (или метод)
C# | ||
|
В любом месте Form1
C# | ||
|
+ Противоречит не всем основам ООП
— Минусы те же
2.3 Передача данных в конструктор Form2
Изменяем конструктор Form2
C# | ||
|
А создаем форму в любом месте Form1 так:
C# | ||
|
+ Простой в реализации способ
+ Не нарушает ООП
— Возможна передача только из более ранней формы в более позднюю
2.4 Передача ссылки в конструктор
Изменяем конструктор Form2
C# | ||
|
А создаем форму в любом месте Form1 так, т.е. передаем ей ссылку на первую форму
C# | ||
|
+ Доступ ко всем открытым полям/функциям первой формы
+ Передача данных возможна в обе стороны
— Нарушает ООП
2.5 Используем свойство ‘родитель’
При создании второй формы устанавливаем владельца
C# | ||
|
Во второй форме определяем владельца
C# | ||
|
+ Доступ ко всем открытым полям/функциям первой формы
+ Передача данных возможна в обе стороны
+ Не нарушает ООП
2.6 Используем отдельный класс
Создаем отдельный класс, лучше статический, в основном namespace, т.е. например в файле Program.cs
C# | ||
|
Его открытые свойства/методы доступны из любой формы.
+ Самый удобный способ, когда данные активно используются несколькими формами.
2.7 Использование функций обратного вызова
2.7.1 Передача метода в конструктор
Создаем в основном namespace делегат
C# | ||
|
В Form1 создаем метод, который будет обрабатывать принятые данные
C# | ||
|
Создаем вторую форму так:
C# | ||
|
При этом изменяем конструктор второй формы, чтобы он принимал делегат
C# | ||
|
И в любой момент отправляем данные
Полный код
C# | ||
|
Содержание
- Как создать вторую форму в windows forms
- BestProg
- Пример создания и вызова новой формы приложения в C#
- Содержание
- Условие задания
- ⇑
- Выполнение
- ⇑
- ⇑
- ⇑
- ⇑
- ⇑
- ⇑
- Создание приложения Windows Forms на C# в Visual Studio
- Создание проекта
- Создание приложения
- Добавление кнопки на форму
- Добавление метки на форму
- Добавление кода на форму
- Запуск приложения
- Следующие шаги
- Добавление новой формы
- Добавление ссылки на проект в форму
- Как создавать дочерние формы MDI
- Создание дочерних форм MDI
Как создать вторую форму в windows forms
Уроки Windows Forms C++/C#
Объединение двух форм в MVS C++
В данном уроке будет рассмотрен очень актуальный и популярный вопрос – «Как связать две формы?». Написано огромнейшее количество программ, в которых после нажатия кнопки появляется новая форма с новыми элементами. Рассмотрением этого вопроса мы и займёмся. В этом уроке будет показан простой пример, того как связать две форма, а в «следующем уроке» уже будет рассмотрено создание простой базы данных. И так, первым делом создайте проект в приложение «Windows Forms», после этого появиться, уже наверно, привычная вам форма. Теперь нужно создать вторую форму в этом жу проекте – это делается следующим образом: выбираете в верхнем меню раздел «Проект», после чего откроется новою меню, в котором нужно будет выбрать «Добавить новый элемент», после этого появиться новое окно, в котором уже будет выделен элемент «Форма Windows Forms», вам нужно будет назвать его –«form2». Ниже представлена иллюстрация действий:
После этого на панели появиться вторая форма конструктора. Суть учебного примера следующая – на «Form1» находится текстовое поле и кнопка, в текстовое поле вводится число, нажимается кнопка, введенное число возводится в квадрат, после чего появляется «form2» на котором тоже есть текстовое поле, где будет показан результат возведения числа в квадрат. Важно понять следующее – поскольку элемент «textBox1» будет находится на обоих формах, то его нужно объявить как public в верху кода формы «form2», а в коде формы «Form1» в самом верху кода подключить библиотеку второй формы #include «form2», так же в одном из событий нужно писать: form2^ gform2 = gcnew form2;              gform2->Show();              gform2->какой-то элемент;
Перенесите на первую форму «textBox» и «button», а на вторую просто «textBox». Теперь в форму один запишите этот код:
#pragma once #include «form2.h» namespace Two_Forms < using namespace System; . . . #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) < Single a, b = 0; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); b = a*a; textBox1->Text = String::Format(«Равно: <0:f5>«, b); form2^ gform2 = gcnew form2; gform2->Show(); gform2->textBox1->Text = this->textBox1->Text; > >; >
А в «form2» просто поменяйте private на public у элемента textBox ^
#pragma once namespace Two_Forms < using namespace System; . . . public: System::Windows::Forms::TextBox^ textBox1; // protected: private: /// /// Требуется переменная конструктора. /// . . .
Результат: Следующий урок >>
Источник
BestProg
Пример создания и вызова новой формы приложения в C#
Содержание
Поиск на других ресурсах:
Условие задания
Разработать демонстрационное приложение, осуществляющее вызов из главной формы второстепенной формы по схеме, изображенной на рис. 1. Приложение реализует взаимодействие между различными формами, которыми могут быть диалоговые окна любой сложности.
В главной форме Form1 разместить:
Во второстепенной форме Form2 разместить:
Рис. 1. Схема взаимодействия между формами
⇑
Выполнение
1. Создать приложение типа Windows Forms Application
Сохранить проект в произвольной папке.
После создания приложения у нас есть одна форма. Программный код формы размещен в файле « Form1.cs » (рис. 2).
Рис. 2. Главная форма приложения Form1
⇑
2. Разработка главной формы приложения
Из палитры элементов управления Toolbox выносим на форму:
Рис. 3. Главная форма приложения после внесенных изменений
⇑
3. Создание второстепенной формы
Для создания второстепенной формы в C# можно воспользоваться несколькими способами.
Способ 1.
Для добавления формы №2 в проект этим способом нужно вызвать команду (рис. 4)
Рис. 4. Команда « Add Windows Form… » для добавления новой формы в проект
В результате откроется окно « Add New Item — Windows Forms Application1 «. В этом окне выбираем элемент « Windows Form » (рис. 5). Оставляем имя формы как « Form2.cs «.
Рис. 5. Окно добавления новой формы к проекту
После нажатия на кнопке « Add » новая форма будет добавлена к проекту (рис. 6).
Рис. 6. Новосозданная форма Form2 и файл « Form2.cs «
Способ 2.
Также новую форму можно добавить к проекту с помощью соответствующей команды из контекстного меню (рис. 7).
Последовательность действий следующая:
Рис. 7. Добавление новой формы из Solution Explorer
В результате откроется точно такое же окно как на рисунке 5.
⇑
4. Разработка второстепенной формы
Рис. 8. Второстепенная форма Form2
⇑
5. Программирование событий клика на кнопках OK и Cancel формы Form2
В программный код обработчика события button1_Click() (кнопка « OK «) вписываем следующую строку:
это значит, что результат возврата из формы Form2 есть « OK «.
Точно так же в обработчике события button2_Click вписываем:
это значит выбор кнопки « Cancel » ( button2 ).
После внесенных изменений листинг программного кода файла « Form2.c s» будет иметь следующий вид:
Рис. 9. Команда « View Code » для перехода в режим программного кода
⇑
6. Вызов формы Form2 из главной формы приложения
Согласно с условием задачи, для вызова Form2 из Form1 нужно запрограммировать событие клика на кнопке « Show Form 2 «.
Программный код обработчика события будет иметь следующий вид:
Листинг всего программного кода формы Form1 следующий
⇑
7. Выполнение приложения
После выполненных действий можно выполнять приложение и исследовать его работу.
Источник
Создание приложения Windows Forms на C# в Visual Studio
В рамках этого краткого знакомства с возможностями интегрированной среды разработки Visual Studio (IDE) вы создадите простое приложение на C# с пользовательским интерфейсом на основе Windows.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.
На некоторых снимках экрана в этом учебнике используется темная тема. Если вы не используете темную тему, но хотите переключиться на нее, см. страницу Персонализация интегрированной среды разработки и редактора Visual Studio.
Установите Visual Studio 2022 бесплатно со страницы скачиваемых материалов Visual Studio 2022, если еще не сделали этого.
На некоторых снимках экрана в этом учебнике используется темная тема. Если вы не используете темную тему, но хотите переключиться на нее, см. страницу Персонализация интегрированной среды разработки и редактора Visual Studio.
Создание проекта
Сначала вы создадите проект приложения на C#. Для этого типа проекта уже имеются все нужные файлы шаблонов, что избавляет вас от лишней работы.
Откройте Visual Studio 2017.
В верхней строке меню последовательно выберите Файл > Создать > Проект.
Запустите Visual Studio.
На начальном экране выберите Создать проект.
В окне Создать проект выберите шаблон Приложение Windows Forms (.NET Framework) для C#.
(При желании вы можете уточнить условия поиска, чтобы быстро перейти к нужному шаблону. Например, введите Приложение Windows Forms в поле поиска. Затем выберите C# в списке языков и Windows в списке платформ.)
Если шаблон Приложение Windows Forms (.NET Framework) отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов.
Затем нажмите кнопку Изменить в Visual Studio Installer. Вам может быть предложено сохранить результаты работы; в таком случае сделайте это. Выберите Продолжить, чтобы установить рабочую нагрузку. После этого вернитесь к шагу 2 в процедуре Создание проекта.
В поле Имя проекта окна Настроить новый проект введите HelloWorld. Затем нажмите Создать.
Новый проект открывается в Visual Studio.
Создание приложения
Когда вы выберете шаблон проекта C# и зададите имя файла, Visual Studio открывает форму. Форма является пользовательским интерфейсом Windows. Мы создадим приложение Hello World, добавив элементы управления на форму, а затем запустим его.
Добавление кнопки на форму
Щелкните Панель элементов, чтобы открыть всплывающее окно «Панель элементов».
(Если параметр для всплывающего окна Панель элементов отсутствует, его можно открыть в строке меню. Для этого выберите Вид > Панель элементов. Либо нажмите клавиши CTRL+ALT+X.)
Щелкните значок Закрепить, чтобы закрепить окно Панель элементов.
Выберите элемент управления Кнопка и перетащите его на форму.
(Если окно Свойства не отображается, его можно открыть в строке меню.) Для этого выберите Вид > Окно свойств. Или нажмите клавишу F4.)
Добавление метки на форму
Теперь, когда мы добавили элемент управления »Кнопка» для создания действия, давайте добавим элемент управления «Метка», куда можно отправлять текст.
Выберите элемент управления Метка в окне Панель элементов, а затем перетащите его на форму и расположите под кнопкой Нажмите это.
В разделе Проект или (DataBindings) окна Свойства измените имя Label1 на lblHelloWorld и нажмите клавишу ВВОД.
Добавление кода на форму
В окне Form1.cs [Проект] дважды щелкните кнопку Нажмите это, чтобы открыть окно Form1.cs.
(Кроме того, можно развернуть узел Form1.cs в обозревателе решений, а затем выбрать Form1.)
Запуск приложения
Нажмите кнопку Запустить, чтобы запустить приложение.
Будет выполнено несколько операций. В интегрированной среде разработки Visual Studio откроются окна Средства диагностики и Вывод. Кроме того, вне этой среды откроется диалоговое окно Form1. Оно будет содержать вашу кнопку Нажмите это и текст Label1.
Закройте диалоговое окно Form1, чтобы завершить работу приложения.
Следующие шаги
Для получения дополнительных сведений перейдите к следующему руководству:
Источник
Добавьте формы в свой проект с помощью Visual Studio. Если в приложении несколько форм, вы сможете выбрать начальную форму для приложения или одновременно отобразить несколько форм.
Добавление новой формы
Добавьте новую форму в Visual Studio.
В поле Имя введите имя формы, например MyNewForm. Visual Studio сформирует имя по умолчанию, которое является уникальным. Можно использовать это имя.
После добавления формы Visual Studio откроет конструктор форм для этой формы.
Добавление ссылки на проект в форму
Если у вас есть исходные файлы для формы, можно добавить форму в проект, скопировав файлы в папку проекта. Ссылки на все файлы кода в папке проекта и в дочерних папках проекта будут автоматически добавлены в проект.
Форма включает два файла с одинаковыми именами и разными расширениями: form2.cs (form2 — пример имени файла) и form2.Designer.cs. Иногда присутствует файл ресурсов с тем же именем — form2.resx. В предыдущем примере form2 представляет собой базовое имя файла. Необходимо скопировать все связанные файлы в папку проекта.
Кроме того, можно использовать Visual Studio для импорта файла в проект. При добавлении существующего файла в проект файл копируется в папку проекта.
В Visual Studio найдите панель Обозреватель проектов. Щелкните проект правой кнопкой мыши и выберите Добавить > Существующий элемент.
Источник
Как создавать дочерние формы MDI
Дочерние MDI-формы являются ключевым элементом приложений с интерфейсом MDI, так как эти формы являются центром взаимодействия с пользователем.
в следующей процедуре используется Visual Studio для создания дочерней MDI-формы, отображающей RichTextBox элемент управления, аналогично большинству приложений для обработки текстов. Подставив System.Windows.Forms элемент управления другими элементами управления, такими как DataGridView элемент управления или сочетанием элементов управления, можно создавать дочерние MDI-окна (и, по расширениям, приложения MDI) с различными возможностями.
Создание дочерних форм MDI
При этом форма назначается в качестве MDI-контейнера для дочерних окон.
Из Toolbox перетащите элемент управления MenuStrip в форму. Присвойте Text свойству значение File.
В обозревателе решений щелкните проект правой кнопкой мыши и выберите пункты Добавить > Новый элемент.
Дочерняя форма MDI, созданная на этом этапе, является стандартной формой Windows Forms. Таким образом, у нее есть свойство Opacity, которое позволяет управлять прозрачностью формы. Однако свойство Opacity предназначено для окон верхнего уровня. Его не следует использовать в дочерних формах MDI, иначе могут возникнуть проблемы с рисованием.
Эта форма будет шаблоном для дочерних форм MDI.
Перетащите элемент управления RichTextBox из панели элементов в форму.
В окне Свойства задайте Anchor для свойства значение сверху, слева и Dock свойство для заполнения.
В результате элемент управления RichTextBox будет целиком заполнять область дочерней формы MDI, даже если ее размеры изменятся.
Дважды щелкните Новый элемент меню, чтобы создать Click для него обработчик событий.
Вставьте код, аналогичный приведенному ниже, чтобы создать новую дочернюю форму MDI, когда пользователь щелкнет Новый элемент меню.
В C++ добавьте следующую #include директиву в верхней части Form1. h:
Это позволяет меню » окно » поддерживать список открытых дочерних окон MDI с галочкой рядом с активным дочерним окном.
Источник
Каким образом можно добавить к проекту новую форму? У меня есть один проект с одной формой, и по истечении времени должна появляться другая форма… так вот как мне ее в visual studio 2010 добавить к первой форме так, чтобы я мог её конструировать?
задан 4 апр 2012 в 9:46
В Solution Explorer (Обозреватель решений) кликаем правой кнопкой на нужном проекте, выбираем команду Add(Добавить) и выбираем Windows Form…
ответ дан 4 апр 2012 в 9:49
DonilDonil
4,20223 серебряных знака49 бронзовых знаков
Когда добавляете Form она будет в соседней вкладке, там можно редактировать. Всплывание привязать к таймеру, команда показа «show» на сколько я помню. (HardMode) Так же можно создать еще один проект с формой, отредактировать и привязать к нужной.
ответ дан 18 сен 2012 в 9:08
Leo5oOLeo5oO
111 бронзовый знак
Для
добавления новой формы нам необходимо
следующее: выделим правой кнопкой мыши
название нашего проекта в обозревателе
решений (),
далее в выпадающем списке выполняемДобавить
-> Создать
элемент…
(Ctrl+Shift+A).
В окне добавления нового элемента ищем:
Форма
Windows
Forms.
Вводим и Имя: LWP04Children.cs.
Теперь в обозревателе решений появилась
новая форма:
Настроим
её:
Text |
изменим |
^
Поменяем заголовок формы (то что
отображается в шапке приложения слева).
Icon |
изменим |
Size |
изменим |
^
Поменяем
размер формы.
FormBorderStyle |
изменим |
^
Сделаем окно «неизменяем» по размерам.
MaximizeBox |
изменим |
^
Уберём кнопку Развернуть.
Новая
форма будет выглядеть примерно так:
Рис.
4. 1. Новая добавленная форма приложения
Теперь
надо определиться, как именно быдет
вызываться новая форма. Как модальное
окно, или как подчинённая форма
(родительская форма будет контейнером
для обращение к дочерней форме). Наиболее
интересен второй вариант, так как он
позволяет напрямую обращаться к элементам
дочерней формы, а не ждать завершения
формы. Реализуем сначала этот способ.
Первое
что необходимо сделать для вызова второй
формы из первой это объявить конструктор
класса новой формы:
В
файле кода главной формы (изначально
созданной средой разработки) ищем:
public
partial
class
LWP04Main
: Form
{
После
добавляем:
LWP04Children
dlg = new
LWP04Children();
Добавим
вызывающую кнопку Button
(показан
конечный вариант кнопки):
Параметры
добавленной кнопки таковы:
(Name): |
ButtonShowChildren |
Text: |
Подчинённая |
Size: |
150; |
ToolTip |
Передача |
Событие
Click
кнопки
ButtonShowChildren:
private
void
ButtonShowChildren_Click(object
sender, EventArgs
e)
{
if
(!dlg.Visible)
dlg.Show(this);
}
Если
откомпилировать приложение, нажать на
кнопку тем самым вызван подчинённую
форму, закрыть её и снова нажать на
кнопку, то мы увидим следующую ошибку:
Рис.
4. 2. Ошибка вызванная нажатием кнопки
вызова формы
После
закрытия второй формы объект уничтожается.
Для правильной обработки повторного
вызова нужно добавить событие FromClosing
для формы LWP04Childred:
private
void
LWP04Children_FormClosing(object
sender, FormClosingEventArgs
e)
{
//
Определяем
кто
закрывает
приложение
if
(e.CloseReason == CloseReason.UserClosing)
{
Hide();
e.Cancel
= true;
}
}
Это
правильный обработчик закрытия формы
для нашего приложения. Однако, если в
кнопке закрыть для дочерней формы
применить код уничтожения объекта и
высвобождения ресурсов, то кнопка
Подчинённая форма вновь вызовет подобную
ошибку. Высвобождает ресурс метод
Dispose().
Обработчик
уничтожения формы по нажатию кнопки
Закрыть
может выглядеть так (не
добавляем
для нашего случая, иначе будет потеряна
часть будущей функциональности именно
для этой дочерней формы):
private
void
ButtonClose_Click(object
sender, EventArgs
e)
{
Close();
//
Кнопка Закрыть
Dispose();
//
Уничтожаем окно и все его параметры до
следующего вызова конструктора формы
}
Компилируем
приложение, проверяем работу кнопки.
Соседние файлы в папке Ермаков
- #
- #
- #
- #
- #
- #
Формы – это главный элемент визуального отображения в технологии Windows Forms, как не трудно догадаться из названия этой технологии. Вообще, вся операционная система Windows («Окна») построена по оконной системе, они отошли от консольных приложений. Поэтому, при программировании Win32 приложений в системе Visual Studio – необходимо хорошо разбираться в тех свойствах, который можно изменять у форм. Этим и займемся.
Но – пока не начали, немного расскажу о политике, ведь ей сейчас можно увлекаться. Вы знаете кто является учредителем и президентом компании Krull Corp? А я знаю, если по ссылке перейдете — то и вы узнаете. Почитайте биографию Александра Мирчева, может быть — тоже захотите вложить свои деньги куда-нибудь. А я пока — перейду к статье.
Для начала – один из самых главных моментом (по моему мнению) – это определение места отображения окна. Обычно оно появляется где попало на экране – а я хочу, чтобы оно появлялось строго по середине. Для этого находим свойство формы StartPosition и там выбираем значение CenterScreen, теперь данное окно у нас будет появляться по центру экрана. Если вы вызываете одну форму из другой (по нажатии на кнопку), то вызываемая форма должна (я, по крайней мере, всегда так делаю) по середине вызвавшей формы. Для этого нужно у того же свойства StartPosition вызываемой формы выбрать значение CenterParent – и оно будет всегда появляется по середине вызвавшей ее формы.
Теперь давайте вспомним виды окон. Они бывают разные, но – я говорю про обычные и диалоговые окна. Диалоговые появляются, чаще всего, для ввода от пользователя каких-либо значений. Эти диалоговые окна не исчезают, пока пользователь не закроет их, доступа к другим окнам программы (при активном диалоговом окне) нету.
Для понимания этого создайте проект в Visual Studio, киньте две формы. На главную форму положите кнопку, в обработчике нажатия этой кнопки введи вот такой вот простой код (Form2 – это имя второй формы):
Form2.ShowDialog()
И запустите приложение. Теперь, если вы нажмете на кнопку, у вас появится вторая форма, а к первой вы вернуться не сможете, пока не закроете вторую.
Вообще, чтобы отобразить окно, нужно написать его название, поставить точку – и ввести команду – либо Show() – это обычное отображение, либо ShowDialog() – это диалоговое отображение. Других видов я не знаю. Также, чтобы диалоговое окно не отображалось в панели задач – нужно у этого диалогового окна найти свойство ShowInTaskBar и присвоить ему значение False. Теперь можете проверить программу, нажав на сочетание Alt+TAB.
Теперь вернитесь к свойствам первой формы (вторую форму вообще можете удалить). Иногда возникает потребность в том, чтобы у формы отображался только крестик в правом верхнем углу (то есть – форму нельзя ни максимизировать, ни сворачивать). Чтобы сделать это, необходимо найти свойство FormBorderStyle:
По умолчанию значение там = Sizable. Но – все это можно менять. Поупражняйтесь сами, но – я обычно ставлю SizableToolWindow – только закрытие окна.
Но – можно на форме просто отключить кнопку максимизации окна. Для этого задайте свойству MaximizeBox значение True. И проверьте работу программы (FormBorderStyle должен быть установлен в Sizable). Тоже можно сделать и с кнопкой сворачивания формы в трей, для этого свойству MinimizeBox задайте значение False.
Также можно у формы менять иконку (изображение сверху слева окна). Для этого – найдите свойство с говорящем названием Icon, нажмите на кнопку с тремя точками – и в открывшемся обозревателе найдите необходимую вам иконку.
И еще о двух свойствах расскажу. Но – перед этим поместите на форму две кнопки, назовите их B_OK и B_Cancel. Теперь найдите у формы свойство AcceptButton, нажмите на кнопку выбора значений – можно будет выбрать из двух наших кнопок. Выберите B_OK. В свойстве AcceptButton указывается кнопка по умолчанию, то есть та, обработчик нажатия которой будет запускаться при нажатии пользователем кнопки Enter.
А если вам нужно автоматически обрабатывать кнопку Escape – чтобы окно закрывалось, то для этого есть свойство CancelButton. Таким же образом выберете кнопку B_Cancel, в обработчике ее напишите код закрытия окна. Теперь, если вы нажмете кнопку Escape – то у вас форма автоматически закроется. Очень подходит для диалоговых окон.