Forms что это за программа

C#. Windows Forms. Пример создания немодальной формы в Windows Forms приложении. Модальные и немодальные окна

Любая более или менее серьезная программа использует диалоговые окна для организации интерфейса с пользователем. В графическом интерфейсе операционной системы Windows различают два вида диалоговых окон:

  • модальные окна;
  • немодальные окна.

Модальные окна являются наиболее распространенным видом окон. Если открыто модальное окно, то чтобы попасть в основную программу, его обязательно нужно закрыть. Без закрытия модального окна невозможно перейти в программу, которая его вызвала. В программах Windows Forms возможна ситуация, когда одно модальное окно открывает другое (следующее) модальное окно. Таким образом получается цепочка вызовов.

Как правило, модальное окно содержит кнопки типа OK, Cancel (или другие), при нажатии на которые это окно закрывается.

Примером модального окна может быть команда Open… редактора Microsoft Word, которая открывает окно выбора файла. Пока не будет выбран файл или не будет нажата одна из кнопок отмены, перейти в редактор не удастся.

Уроки C# .NET Windows Forms / #4 — Авторизация пользователя через базу данных

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

Пример немодального окна – это команда «Insert Symbol» редактора Microsoft Word, которая позволяет вставлять символ в документ. Из окна вставки символа можно переключаться в основной документ и наоборот, из документа можно переходить в немодальное окно.

2. Особенности работы с немодальными окнами в Windows Forms

В технологии Windows Forms основной программе соответствует форма – экземпляр класса, унаследованного от класса Form . Также модальному или немодальному окну соответствует некоторая форма.

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

  • в немодальном окне есть одна кнопка Close , которая его закрывает;
  • вызов немодального окна из главной программы происходит с помощью метода Show() класса Form (чтобы вызвать модальное окно нужно использовать метод ShowDialog() ).

В нижеследующем коде приведены примеры вызова модального и немодального окна

// 1. Вызов модального окна dlgResult = modalForm.ShowDialog(); // Обработка результата возврата, который размещается в dlgResult // . // 2. Вызов немодального окна nonModalForm.Show(); // здесь не нужно ничего обрабатывать

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

3. Способы обмена информацией между главной формой и немодальной формой

При использовании немодальных форм важным есть обмен информацией между основной программой (главной формой) и немодальной формой.

ЭТО and all its forms. THIS and THAT in Russian

Здесь возможны две ситуации:

  • передача информации из главной формы в немодальную. Эта ситуация решается без проблем, поскольку в основной форме создается экземпляр немодальной формы. Через этот экземпляр осуществляется доступ к компонентам немодальной формы стандартным способом;
  • передача информации из немодальной формы в главную форму. Здесь возникает проблема: как из немодальной формы доступиться к экземпляру главной формы.

Чтобы передать данные (информацию) с немодальной формы в главную, можно использовать один из следующих способов:

  1. С помощью статической ссылки на главную форму. Как известно, статические переменные есть глобальными, поэтому удобно могут использоваться для обмена информацией между разными разделенными экземплярами или процессами. Имея ссылку на главную форму, можно легко обращаться к компонентам этой формы. Этот способ наиболее прост в использовании.
  2. С помощью механизма событий. При этом способе в немодальной форме объявляется событие, которое возникает каждый раз, когда главной форме нужно передать информацию. Тем не менее, сам обработчик этого события помещается в главной форме. Если из немодальной формы нужно передать информацию главной форме, то возникает событие. В результате, в главной форме вызывается обработчик этого события. Этот обработчик получает объект типа «немодальное диалоговое окно», который сгенерировал событие. Имея доступ к измененному объекту немодального окна, можно обновить информацию в главной форме.
  3. С помощью записи информации во временный файл. Как известно, файлы подобны статическим переменным. Поэтому, записав порцию информации в файл в немодальной форме, можно ее прочитать в главной форме. Этот способ не является эффективным, поскольку работает медленнее (чтение из носителей информации происходит дольше чем из оперативной памяти).
4. Пример разработки демонстрационной программы использования немодальной формы

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

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

4.1. Создать проект типа Windows Forms

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

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

Создать основную форму и разместить на ней следующие элементы управления:

  • элемент управления типа Button . Создается экземпляр кнопки с именем button1 ;
  • элемент управления типа Label . Создается экземпляр метки с именем label1 ;
  • элемент управления типа TextBox . Создается экземпляр поля ввода с именем textBox1 .

Настроить свойства формы и элементов управления как показано на рисунке 1:

  • в элементе управления Form1 свойство Text = «Main Form» (в дальнейшем Form1.Text );
  • button1.Text = «Show Modeless Form» ;
  • label1.Text = «Text» ;
  • textBox1.Modifiers = Public . Значение Public необходимо, чтобы этот элемент управления был видим из немодальной формы.

Также нужно откорректировать размеры главной формы.

После настройки главная форма будет иметь вид как изображено на рисунке 1.

C#. Windows Forms. Немодальная форма. Главная форма программы

Рисунок 1. Главная форма программы

4.3. Создать новую форму Form2

Создание новой формы осуществляется стандартным способом с помощью команд

Project -> Add Form (Windows Forms. )

В окне, которое откроется, нужно указать шаблон «Form (Windows Forms)» . Имя файла оставить по умолчанию Form2.cs. В результате будет создан экземпляр формы с именем Form2.

4.4. Проектирование формы Form2

Разместить на форме Form2 следующие элементы управления:

  • один элемент управления типа Label . Будет создан объект с именем label1 ;
  • два элемента управления типа Button . Будет создано два объекта с именами button1 , button2 ;
  • один элемент управления типа TextBox . Будет создан экземпляр с именем textBox1 .

Настроить следующие свойства элементов управления формы Form2 :

  • Form2.Text = «Modeless Form» ;
  • button1.Text = «Copy to Form1» ;
  • button2.Text = «Close» ;
  • label1.Text = «Text» ;
  • textBox1.Modifiers = Public .

После настройки немодальная форма будет иметь вид как изображено на рисунке 2.

C#. Windows Forms. Немодальная форма после настройки элементов управления

Рисунок 2. Немодальная форма Form2 после настройки элементов управления

4.5. Ввод статической ссылки на форму Form1

В тексте класса Form1 нужно ввести статическую переменную с именем form1:

. public partial class Form1 : Form < // Ссылка на текущий экземпляр главной формы — сохраняем // в статической переменной, которая доступна из любой части программы public static Control form1; public Form1() < InitializeComponent(); >> .

Статическая переменная имеет тип Control . Все элементы управления унаследованы из класса Control . Это же касается и формы.

4.6. Программирование обработчика события Click элемента управления button1 формы Form1

При нажатии на кнопке button1 ( Show Modeless Form ) открывается окно немодальной формы и в поле ввода немодальной формы ( Form2.textBox1.Text ) вписывается текст из поля ввода главной формы ( Form1.textBox1.Text ).

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

Текст обработчика события следующий:

// Обработчик события Click элемента управления button1. // Выполняет следующие действия: // — вызывает немодальную форму; // — в textBox1 записывается текст из формы Form1. private void button1_Click(object sender, EventArgs e) < // 1. Объявить экземпляр немодальной формы Form2 f2 = new Form2(); // 2. Записать в статическую переменную form1 текущий экземпляр form1 = this; // 3. Отобразить немодальную форму f2.Show(); // 4. Записать в Form2.TextBox1 текст из строки основной формы f2.textBox1.Text = this.textBox1.Text; >

4.7. Программирование обработчика события Click кнопки button1 формы Form2

При нажатии на кнопке button1 ( Copy to Form1 ) текст из поля ввода немодальной формы ( Form2.textBox1.Text ) должен скопироваться в соответствующее поле ввода главной формы ( Form1.textBox1.Text ).

Сначала нужно активировать форму Form2 и сформировать обработчик события Click элемента управления button1 .

Текст обработчика события следующий:

. // В этом обработчике выполняются следующие операции: // — содержимое Form2.textBox1 копируется в Form1.textBox1 private void button1_Click(object sender, EventArgs e) < // Получить элемент управления textBox1 главной формы. // Для реализации этого осуществляется обход всех элементов // управления главной формы. for (int i = 0; i < Form1.form1.Controls.Count; i++) < // Поиск элемента управления textBox1 if ((Form1.form1.Controls[i] is TextBox) (Form1.form1.Controls[i].Name == «textBox1»)) < // если textBox1 найден, то записать в него текст из Form2. Form1.form1.Controls[i].Text = this.textBox1.Text; break; > > > .

В обработчике события на основе статической ссылки form1 происходит циклический поиск элемента управления типа TextBox с именем textBox1 (на всякий случай, если в главной форме несколько textBox-ов).

4.8. Программирование обработчика события Click элемента управления button2

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

. // Закрыть немодальную форму private void button2_Click(object sender, EventArgs e) < this.Close(); > .

Как видно из вышеприведенного кода, немодальная форма закрывается точно так же как и модальная.

4.9. Запуск программы на выполнение

После прохождения инструкции, можно запускать программу. Во время выполнения программы с помощью кнопки «Show Modeless Form» можно вызвать несколько немодальных форм из главной формы (рисунок 3). При этом из второстепенных немодальных форм можно передавать информацию в главную программу поочередно.

C#. Windows Forms. Вызов нескольких форм из немодальной формы

Рисунок 3. Случай, когда из главной формы вызваны 4 немодальных формы

Связанные темы

Источник: www.bestprog.net

Windows Forms: Современная модель программирования для создания GUI приложений

Чтобы создать GUI приложения в Microsoft .NET нужно использовать Windows Forms. Windows Forms — новый стиль построения приложения на базе классов .NET Framework class library. Они имеют собственную модель программирования, которая более совершеннее, чем модели, основанные на Win32 API или MFC, и они выполняются в управляемой среде .NET Common Language Runtime (CLR). Эта статья дает представление о том, что такое Windows Forms, рассматривая ее от модели программирования до Microsoft Intermediate Language и JIT-транслятора.

Читайте также:
Notification manager for adobe creative cloud что это за программа

Вы уже много слышали, что Microsoft .NET — новая платформа, которая основана на Windows. Это целая новая парадигма программирования, которая изменит путь, которым вы сейчас думаете о написании программ для Windows. Она реализована на библиотеке классов .NET Framework class library и содержит более единую модель программирования, улучшенную защиту и более богатые возможности для написания полнофункциональных веб-приложений. И это только начало.

Windows Forms — одна из наиболее интересных возможностей Microsoft .NET. Если вы знакомы с MFC (или Windows API), то Windows Forms хорошее начало для работы с .NET Framework class library, потому что она позволяет писать традиционные GUI приложения с окнами, формами и т.п. вещами. Однажды, начав работать с Windows Forms вы сможете быстро понять .NET Framework.

Главная выгода от написания Windows-приложений с использованием Windows Forms — это то, что Windows Forms гомогенизируют (создают более однородную (гомогенную) структуру) программную модель и устраняют многие ошибки и противоречия от использования Windows API. Например, каждый опытный программист под Windows знает, что некоторые стили окна могут применяться только к окну, когда оно уже создано.

Windows Forms в значительной степени устраняют такое противоречие. Если вы хотите существующему окну задать стиль, который может быть присвоен только в момент создания окна, то Windows Forms спокойно уничтожит окно и вновь создаст его с указанным стилем. Кроме того, .NET Framework class library намного более богаче, чем Windows API, и когда вы будете писать приложения, используя Windows Forms, вы получите в распоряжение больше возможностей. Написание приложения с использованием Windows Forms потребует меньшего количества кода, чем приложения, которые используют Windows API или MFC.

Другая выгода от Windows Forms — вы используете тот же самый API, независимо от языка программирования, который вы выбрали. В прошлом, выбор языка программирования управлял выбором API. Если вы программировали в Visual Basic, вы использовали один API (реализованный на языке Visual Basic), в то время как программисты C использовали Win32 API, а программисты C++, вообще говоря, использовали MFC.

MFC-программисту было трудно переключиться на Visual Basic и наоборот. Но теперь такого больше нет. Все приложения, которые используют Windows Forms, используют один API из .NET Framework class library. Знание одного API достаточно позволит программисту писать приложения фактически на любом языке, который он выберет.

Windows Forms ни как не меньше, чем современная модель программирования для GUI приложений. В отличие от модели программирования Win32, в которой многое идет еще от Windows 1.0, новая модель была разработана с учетом всех современных требований. Цель этой статьи состоит в том, чтобы познакомить читателя с моделью программирования Windows Forms. Чтобы компилировать и выполнять примеры кода, приведенного далее, на вашем компьютере должнен быть установлен пакет Microsoft .NET Framework SDK (.NET Framework SDK Beta 1 доступен на сайте Microsoft).

Модель программирования Windows Forms

В Windows Forms термин «форма» — синоним окна верхнего уровня. Главное окно приложения — форма. Любые другие окна верхнего уровня, которые имеет приложение — также формы. Окна диалога также считаются формами. Несмотря на название, приложения, использующие Windows Forms, не выглядят как формы.

Подобно традиционным Windows-приложениям приложения осуществляют полный контроль над событиями в собственных окнах.

Программисты видят Microsoft .NET через линзу .NET Framework class library. Представьте MFC на порядок больше и вы получите точную картину о ширине и глубине .NET Framework class library. Чтобы облегчить противоречия в обозначениях и придать организацию многим сотням классов, .NET Framework class library разбита на иерархические разделы по именам. Корневой раздел, System, определяет фундаментальные типы данных, используемые всеми приложениями .NET.

Приложения, использующие Windows Forms используют классы System.WinForms. Этот раздел включает такие классы, как Form, который моделирует поведение окон или форм; Menu, который представляет меню; Clipboard, который дает возможность приложениям Windows Forms использовать буфер обмена. Он также содержит многочисленные классы, предоставляющие средства управления, например: Button, TextBox, ListView, MonthCalendar и т.д. Эти классы могут быть включены в приложение либо с использованием только имени класса, либо с использованием полного имени, например: System.WinForms.Button.

В основе почти каждого приложения, написанного с применением Windows Forms, — производный класс от System.WinForms.Form. Образец этого класса представляет главное окно приложения. System.WinForms.Form имеет множество свойств и методов, которые имеют богатый программный интерфейс к формам. Хотите знать размеры клиентской области формы? В Windows вы вызвали бы функцию API GetClientRect.

В Windows Forms нужно использовать свойства ClientRectangle или ClientSize.

Приложения, основанные на Windows Forms, которые используют кнопки, списки и другие типы компонентов Windows, используют классы управления System.WinForms, значительно упрощающие программирование управления. Хотите создать стилизованную кнопку с изображением в виде фона? Нет проблем. Включите требуемое изображение в объект System.Drawing.Bitmap и назначьте его свойству кнопки BackgroundImage.

Как насчет управления цветом? Вы когда-либо пробовали настраивать цвет фона текстового поля? В Windows Forms это просто: нужно просто присвоить цвет свойству BackColor, все отстальное система сделает сама.

Другой важный «строительный» блок приложения, который использует Windows Forms — класс System.WinForms по имени Application. Этот класс содержит статический метод Run, который загружает приложение и отображает окно.

Вы скажете: если приложения, которые являются Windows Forms, не обрабатывают сообщения, как они отвечают на пользовательский ввод или знают когда рисовать? Много классов имеют виртуальные методы, которые можно переопределить. Например, System.WinForms.Form содержит виртуальный метод OnPaint, который вызывается когда клиентская область формы нуждается в обновлении. OnPaint — один из многих виртуальных методов, который можно переопределить в производном классе для формирования интерактивных форм.

Другая важная грань модели программирования Windows Forms — механизм, который формы используют для ответа на ввод в меню, средств управления и других элементов GUI приложения. Традиционные Windows-приложения обрабатывают сообщения WM_COMMAND и WM_NOTIFY используя события процесса Windows Forms. В C# и на других языках, которые поддерживают .NET Common Language Runtime (CLR), события — члены типа первого класса наравне с методами, полями и свойствами. Фактически все управляющие классы (control classes) Windows Forms (а также и многие неуправляющие классы) создают события. Например, кнопка (экземпляр System.WinForms.Button) после нажатия создает событие Click. Форма, которая должна ответить на нажатие кнопки может использовать следующий код, чтобы соединить кнопку на обработчиком события Click:

MyButton.Click += new EventHandler (OnButtonClicked); . private void OnButtonClicked (object sender, EventArgs e)

EventHandler — специальный обработчик событий, который выполняет метод OnButtonClicked когда MyButton создает событие Click. Первый параметр OnButtonClicked идентифицирует объект, который вызвал событие. Второй параметр в основном бессмысленен для события Click, но используется некоторым другие типами событий, чтобы передать дополнительную информацию.

Приложение «Hello World» с Windows Forms

Самый простой способ начать изучение новой платформы — создание приложения «Hello World». В Листинге 1 показана версия, созданная при помощи Windows Forms. Все примеры в этой статье написаны на C#, но вы можете писать приложения Windows Forms на любом языке, для которого есть компилятор .NET. Сегодня это: C#, Visual Basic, JScript и C++.

using System; using System.WinForms; using System.Drawing; public class MyForm : Form < public MyForm () < Text = «Windows Forms Demo»; >protected override void OnPaint (PaintEventArgs e) < e.Graphics.DrawString («Hello, world», Font, new SolidBrush (Color.Black), ClientRectangle); >public static void Main (string[] args) < Application.Run (new MyForm ()); >>

Начнем сначала. Слово «using» вверху файла позволяют сослаться на классы в пакетах System, System.WinForms и System.Drawing. Например,

using System.WinForms;
public class MyForm : System.WinForms.Form
public class MyForm : Form

В приложении, использующем Windows Forms, каждое окно — или форма — представлено экземпляром класса, производного от System.WinForms.Form (Листинг 1 — класс MyForm). Конструктор MyForm устанавливает текст заголовка формы «Windows Forms Demo» используя свойство Text.

Text — одно из более чем 100 свойств, которые форма наследует от System.WinForms.Form, но пока единственное, в котором вы нуждаетесь.

Как вы знаете, окна получают сообщения WM_PAINT и большинство перерисовок экрана выполнено в ответ на эти сообщения. В Windows Forms эквивалент сообщения WM_PAINT — виртуальный метод по имени OnPaint. Производный класс формы может переопределить этот метод в случае надобности выполнять собственную перерисовку в ответ на сообщения WM_PAINT.

Обратите внимание на ключевое слово в Листинге 1, которое компилятор C# интерпретирует как подтверждение, что вы хотите переопределить виртуальный метод, унаследованный от базового класса. Перопределенный OnPaint записывает «Hello, world» в клиентской области формы. OnPaint вызывает объект PaintEventArgs (System.WinForms.PaintEventArgs), который содержит свойства Graphics и ClipRectangle. Свойство Graphics ссылается к объекту Graphics (System.Drawing.Graphics), который является эквивалентом контекста устройства (device context) в Windows Forms. ClipRectangle производное объекта Rectangle (System.Drawing.Rectangle), который описывает какая часть формы является недопустимой.

Метод OnPaint из MyForm использует Graphics.DrawString, чтобы выполнить вывод на экран. Первый параметр DrawString — непосредственно само сообщение (строка) «Hello, world». Второй — объект Font (System.Drawing.Font), который описывает шрифт для вывода текста. MyForm.OnPaint использует шрифт формы (которой установлен в свойстве Font формы). Третий параметр — Brush (System.Drawing.Brush) — объектное определение цвета текста.

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

Заключительная часть MyForm — статический метод Main. Main — точка входа в приложение. Каждое приложение .NET должно иметь этот метод. Main может быть объявлен любым из следующих способов:

public static void Main () public static int Main () public static void Main (string[] args) public static int Main (string[] args)

Параметр args метода Main — строковый массив параметров командной строки (задаваемых при вызове программы). Элемент args[0] хранит первый параметр командной строки, args[1] — второй и т.д. Как правило, в каждом приложении метод Main выполняется только однажды (компилятор Microsoft C# допускает использование ключа /main, указывающего в каком классе содержится метод Main, если приложение имеет несколько классов с методами Main). Main может находиться в любом классе, определенном в приложении.

Отображение нашей формы на экране — простой пример выполнения MyForm и передачи действия Application.Run. Application — другой класс, определенный в System.WinForms. Метод Run создает форму, отображает ее на экране и обрабатывает сообщения к ней. Следующая инструкция в Листинге 1

Application.Run (new MyForm ());

обрабатывает MyForm и показывает форму.

Сохраните текст программного кода (Листинг 1) в файле Hello.cs и откомпилируйте его. Чтобы это сделать, откройте окно командной строки, перейдите в каталог файла Hello.cs и введите:

Читайте также:
Html viewer что это за программа

csc /target:winexe /out:Hello.exe /reference:System.dll /reference:System.WinForms.dll /reference:System.Drawing.dll /reference:Microsoft.Win32.Interop.dll Hello.cs

Команда csc вызывает компилятор Microsoft C#. «Hello.cs» указывает на файл, который требуется откомпилировать.

Ключ «/target:winexe» сообщает компилятору, что нужно создать GUI-приложение для Windows, а «/out:Hello.exe» задает имя файла программы (этот ключ можно опустить, т.к. в данном случае по умолчанию все равно будет создан Hello.exe, т.к. CS-файл назван Hello.cs). Ключи «/reference» указывают ссылки на внешние классы, например, для System.WinForms.Form и System.Drawing.Size. Для краткости допускается заменять «/target» и «/reference» на «/t» и «/r».

Hello.exe не обычный EXE-файл, это .NET-программа, содержащая следующие важные элементы:

  • Microsoft Intermediate Language (MSIL), сгенерированный при помощи C#
  • Метаданные, описывающие типы (классы), определенные в приложении, и типы (например, System.WinForms.Form), на которые ссылается приложение, находящиеся в другом месте (например, в MsCorLib.dll и System.WinForms.dll)
  • Декларация, описывающая требуемые файлы для сборки приложения

В языке .NET, сборка — это коллекция из одного или более файлов, создающих модуль. Наша сборка содержит только один файл — Hello.exe — и этот факт отмечен в декларации внутри выполнимой программы. Декларация физически сохранена как часть метаданных.

Каждая управляемая выполнимая программа — это есть любой PE-файл, который содержит MSIL — часть сборки и каждая управляемая выполнимая программа имеет метаданные внутри. Один из файлов в .NET-сборке содержит декларацию идентификации файлов, которые должны быть включены при сборке и общедоступные типы. Компилятор C# производит всю необходимую инфраструктуру.

Теперь когда вы откомпилировали Hello.exe, можете набрать в командной строке:

Hello

Посмотрите на рис.1, чтобы увидеть результат работы нашей программы.

Рис.1. Приложение «Hello, World»

Источник: codenet.ru

Windows Forms — Windows Forms

Windows Forms (WinForms) — это бесплатно и с открытым исходным кодом графический (GUI) библиотека классов входит в состав Microsoft .NET Framework или же Моно Фреймворк, [1] предоставляя платформу для написания многофункциональных клиентских приложений для настольных, портативных и планшетных компьютеров. [2] Хотя это рассматривается как замена более ранним и более сложным C ++ основан Библиотека Microsoft Foundation Class, он не предлагает сопоставимой парадигмы [3] и действует только как платформа для уровня пользовательского интерфейса в многоуровневый решение. [4]

На Microsoft Connect мероприятие 4 декабря 2018 г., Microsoft объявила о выпуске Windows Forms как проекта с открытым исходным кодом на GitHub. Выпускается под Лицензия MIT. В этом выпуске Windows Forms стала доступна для проектов, ориентированных на .NET Core рамки. Однако фреймворк по-прежнему доступен только на платформе Windows, и Моно Неполная реализация Windows Forms остается единственной кроссплатформенной реализацией. [5] [6]

  • 1 Архитектура
  • 2 Функции
  • 3 История и будущее
  • 4 Обратная совместимость XAML с Windows Forms
  • 5 Альтернативная реализация
  • 6 Смотрите также
  • 7 Рекомендации
  • 8 внешняя ссылка

Архитектура

Этот API является частью .NET Framework 3.0

А Приложение Windows Forms является управляемое событиями приложение поддерживается Microsoft .NET Framework. В отличие от пакетная программа, большую часть времени он просто ждет, пока пользователь что-то сделает, например, заполнит текстовое окно или щелкните кнопка.

Windows Forms предоставляет доступ к собственным Пользовательский интерфейс Windows Общие элементы управления путем упаковки существующих Windows API в управляемый код. [7] С помощью Windows Forms .NET Framework предоставляет более полную абстракцию над Win32 API, чем Visual Basic или MFC. [8]

Windows Forms похож на Microsoft Foundation Class (MFC) библиотека при разработке клиентских приложений. Он предоставляет оболочку, состоящую из набора классов C ++ для разработки приложений Windows. Однако он не предоставляет платформу приложений по умолчанию, такую ​​как MFC. Каждый элемент управления в приложении Windows Forms — это конкретный экземпляр класса.

Функции

Все визуальные элементы в библиотеке классов Windows Forms являются производными от класса Control. Это обеспечивает минимальную функциональность элемента пользовательского интерфейса, такую ​​как расположение, размер, цвет, шрифт, текст, а также общие события, такие как щелчок и перетаскивание. Класс Control также имеет поддержку закрепления, позволяющую элементу управления изменять свое положение под своим родительским элементом. В Microsoft Active Accessibility поддержка в классе Control также помогает ослабленным пользователям лучше использовать Windows Forms. [9]

Помимо предоставления доступа к собственным элементам управления Windows, таким как кнопка, текстовое поле, флажок и список, Windows Forms добавила собственные элементы управления для ActiveX хостинг, компоновка, проверка и привязка данных. Эти элементы управления отображаются с использованием GDI +. [9]

История и будущее

Как Набор инструментов для абстрактного окна (AWT), эквивалент Ява API, Windows Forms был одним из первых и простых способов предоставить графический интерфейс пользователя компоненты к .NET Framework. Windows Forms построена на существующем Windows API, и некоторые элементы управления просто обертывают базовые компоненты Windows. [10] Некоторые методы позволяют получить прямой доступ к Win32. обратные вызовы, которые недоступны на платформах, отличных от Windows. [10]

В .NET Framework 2.0 в Windows Forms появились более богатые элементы управления макетом, элементы управления на панели инструментов в стиле Office 2003, компонент многопоточности, расширенная поддержка времени разработки и привязки данных, а также ClickOnce для веб-развертывания. [11] [12]

С выпуском .NET 3.0 Microsoft выпустила второй параллельный API для рендеринга графических интерфейсов: Windows Presentation Foundation (WPF) на основе DirectX, [13] вместе с декларативным языком графического интерфейса, который называется XAML. [14]

Во время сеанса вопросов и ответов в Сборка 2014 Conference Microsoft объяснила, что Windows Forms находится в режиме обслуживания, без добавления новых функций, но найденные ошибки все равно будут исправлены. [15] Совсем недавно улучшенная поддержка высокого разрешения для различных элементов управления Windows Forms была представлена ​​в обновлениях .NET Framework версии 4.5. [16]

Обратная совместимость XAML с Windows Forms

Для будущего развития Microsoft сменила Windows Forms с XAML -на основе ввода GUI с использованием таких фреймворков, как WPF и UWP. Однако размещение компонентов графического интерфейса с помощью перетаскивания аналогично Windows Forms по-прежнему обеспечивается в XAML путем замены корневого элемента XAML страницы / окна на элемент управления пользовательского интерфейса «Canvas». При внесении этого изменения пользователь может создать окно аналогично Windows Forms, напрямую перетаскивая компоненты с помощью графического интерфейса Visual Studio.

Хотя XAML обеспечивает обратную совместимость размещения перетаскиванием через элемент управления Canvas, элементы управления XAML похожи только на элементы управления Windows Forms и не имеют обратной совместимости один-к-одному. Они выполняют аналогичные функции и имеют похожий внешний вид, но свойства и методы достаточно разные, чтобы потребовать переназначения одного API на другой.

Альтернативная реализация

Мононуклеоз это проект, возглавляемый Xamarin (ранее Ximian, тогда Novell ) для создания Экма стандартное соответствие .СЕТЬ совместимый набор инструментов.

В 2011, Мононуклеоз поддержка System.Windows.Forms с .NET 2.0 объявлен завершенным; [17] System.Windows.Forms 2.0 изначально работает в Mac OS X. [18] Однако System.Windows.Forms не получил активного развития на Mono. [19] Полная совместимость с .NET была невозможна, поскольку Microsoft System.Windows Forms в основном является оболочкой для Windows API, а некоторые методы позволяют получить прямой доступ к Win32 обратные вызовы, которые недоступны на платформах, отличных от Windows. [10] Более серьезная проблема заключается в том, что, начиная с версии 5.2, [20] Mono был обновлен, так что по умолчанию предполагается использование 64-битной платформы. Однако System.Windows.Forms на Mono для платформы Macintosh OS X была создана с использованием 32-битной подсистемы, Углерод. [21] По состоянию на эту дату 64-разрядная версия System.Windows.Forms для использования в Mac OS X остается недоступной, и можно ожидать, что будут выполняться только приложения .NET, созданные для 32-разрядной платформы.

Смотрите также

  • Портал бесплатного программного обеспечения с открытым исходным кодом
  • Microsoft Visual Studio
  • ClickOnce
  • Набор инструментов для абстрактного окна (AWT), эквивалент GUIинтерфейс прикладного программирования (API) для Ява язык программирования
  • Библиотека визуальных компонентов (VCL) от Borland
  • Визуальный тест, автоматизация тестирования

Рекомендации

  1. ^ Продает, Крис (6 сентября 2003 г.). Программирование Windows Forms на C # (1-е изд.). Эддисон-Уэсли Профессионал. п. xxxviiii.
  2. ^«Рекомендации по проектированию и внедрению для веб-клиентов по шаблонам и методам Microsoft». Microsoft. Ноябрь 2003 г.
  3. ^ Продает, Крис; Вайнхардт, Майкл (16 мая 2006 г.). «Приложение Б». Переход с MFC, программирование Windows Forms 2.0 (2-е изд.). Эддисон-Уэсли Профессионал.
  4. ^«Введение в Windows Forms» (Документация по Visual Studio 2003). Microsoft 2003.
  5. ^ Мартин, Джефф (4 декабря 2018 г.). «Microsoft Open Sources WPF, WinForms и WinUI». InfoQ . Получено 2018-12-06 .
  6. ^ Хансельман, Скотт (4 декабря 2018 г.). «Объявление о переходе WPF, WinForms и WinUI на открытый исходный код» . Получено 2018-12-06 .
  7. ^ Де Смет, Барт (4 января 2011 г.). «Глава 5». C # 4.0 на свободе. Самс Паблишинг.
  8. ^ Гриффитс, Ян; Адамс, Мэтью (март 2003 г.). NET Windows Forms в двух словах. O’Reilly Media. п. 4.
  9. ^ аб Гриффитс, Ян; Адамс, Мэтью (март 2003 г.). NET Windows Forms в двух словах. O’Reilly Media. С. 27–53.
  10. ^ абc»FAQ: Winforms». mono-project.com. Очень маловероятно, что реализация когда-либо будет реализовывать все необходимое для полной совместимости с Windows.Forms. Причина в том, что Windows.Forms не является полным набором инструментов, и для решения этой проблемы программисту предоставляется доступ к некоторым базовым основам Win32 в форме предоставления обработчика сообщений Windows.
  11. ^ Продает, Крис; Вайнхардт, Майкл (16 мая 2006 г.). «Приложение A. Что нового в Windows Forms 2.0». Программирование Windows Forms 2.0 (2-е изд.). Эддисон-Уэсли Профессионал.
  12. ^ Нойес, Брайан (12 января 2006 г.). «Предисловие». Связывание данных с помощью Windows Forms 2.0: Программирование приложений данных Smart Client с помощью .NET (1-е изд.). Эддисон-Уэсли Профессионал.
  13. ^ Холл, Гэри (27 декабря 2010 г.). «DirectX, а не GDI +». Pro WPF и Silverlight MVVM: эффективная разработка приложений с помощью модели (Издание 2010 г.). Апресс. п. 2.
  14. ^ Смит, Джош (2007-09-05). «WPF против Windows Forms». Джош Смит о WPF . Получено 2011-08-25 . WPF не предназначен для замены Windows Forms. [. ] Windows Forms все еще жива и здорова, и в ближайшие годы Microsoft продолжит совершенствовать и поддерживать ее. WPF — это просто еще один инструмент, который разработчики настольных приложений Windows могут использовать при необходимости.
  15. ^»Вопросы и ответы WPF». infoq.com. 2014-04-03 . Получено 2014-04-21 . Windows Forms продолжает поддерживаться, но в режиме обслуживания. Они будут исправлять ошибки по мере их обнаружения, но новые функции отсутствуют.
  16. ^ Аллен, Джонатан (06.05.2014). «Улучшения высокого разрешения для Windows Forms в .NET 4.5.2». InfoQ . Получено 2015-02-10 .
  17. ^»WinForms». mono-project.com . Получено 2011-07-30 . Поддержка Windows Forms 2.0 завершена. На данный момент мы в основном просто исправляем ошибки и полируем наш код.
  18. ^»WinForms». mono-project.com . Получено 2011-07-30 . Работает ли Winforms на OSX? Да, начиная с Mono 1.9, Winforms имеет собственный драйвер OSX, который он использует по умолчанию.
  19. ^де Икаса, Мигель (2011-03-07). «GDC 2011» . Получено 2011-07-30 . Для инструментов, которые в основном основаны на OpenGL / DirectX, используйте Windows.Forms, помня, что с их стороны может потребоваться исправление ошибок или обходные пути, поскольку наши Windows.Forms активно не разрабатываются.
  20. ^«Введение в Mono на macOS». mono-project.com . Получено 2019-11-12 .
  21. ^ Мартин, Джесс. «Windows.Forms приходит в 64-битную Mac OS X» . Получено 2019-11-12 .
Читайте также:
Free video ediTor что это за программа

внешняя ссылка

  • MSDN: создание приложений Windows Forms
  • MSDN: справочная документация по Windows.Forms
  • MSDN: Технические статьи Windows Forms — Автоматизация Windows Form с помощью визуального тестирования

Источник: wikidea.ru

Программирование в .NET Framework

Если вы захотите писать программы, похожие на привычные приложения Windows, то наверняка воспользуетесь классами из пространства имен System.Windows.Forms . Они позволяют задействовать кнопки, списки, текстовые поля, меню, окна сообщений и множество других «элементов управления». Элементы управления — это то, что вы помещаете в форму. Они нужны для вывода информации, например, текстовой (элемент управления Label ) или графической (элемент управления PictureBox ), либо для выполнения определенных действий, например, выбора значения или перехода к другой форме после нажатия кнопки. Все элементы управления помещаются на форму.

Понятие «форма», принятое в программировании, родственно понятию «форма анкеты» или «форма документа» из обычной жизни. На форме можно в определенном порядке расположить различные элементы (текст , картинки, поля для заполнения и т. д.). Когда нам дают готовую форму документа и просят ее заполнить, мы обычно читаем содержащуюся в ней типовую информацию, а затем вписываем недостающие данные в определенные строки.

В программировании понятие формы во многом похоже: форма позволяет размещать текст, изображения, поля ввода, кнопки и т. п., добиваясь их точного расположения на экране. В консольном приложении на экран выводятся только строки текста.

Компания Майкрософт предоставила в составе библиотеки классов .NET Framework огромное количество «элементов управления», которые можно помещать на формы. Освоив этот инструмент, вы сможете быстро создавать эффектные приложения.

Некоторые полезные классы из пространства имен System.Windows.Forms

Вот некоторые элементы управления, которые можно размещать на формах:

  • Label (Надпись).
  • Button (Кнопка).
  • ListBox (Список).
  • CheckBox (Флажок).
  • RadioButton (Переключатель).
  • MessageBox (Окно сообщений).
  • Menu (Меню).
  • TabControl (Управление вкладками).
  • Toolbar (Панель инструментов).
  • TreeView (Дерево).
  • DataGrid (Сетка данных).
  • PictureBox (Изображение).
  • RichTextBox (Текстовое поле с поддержкой формата RTF ).

Работа с примерами программ Windows Forms в Visual C# Express

Возможно, вы предпочтете не использовать уже заготовленные примеры проектов, а разрабатывать их «с нуля». В таком случае нужно учесть, что для каждого проекта C# Express сразу же создает два файла (с именами Form1.cs и Program.cs ) и наполняет их исходным кодом на языке C#, то есть вы изначально получаете простейшую, но полноценную программу. Предлагаемый нами способ работы с уже полученным проектом состоит в выполнении следующих действий:

  • Удалите файл Form1.cs.
  • Замените код в файле Program.cs на код примера, с которым вы работаете.

Оба этих действия не понадобятся, если вы открываете программы с помощью команды «Открыть проект» в меню «Файл» и находите нужный проект в той папке, куда его поместили после разархивации.

Пример программы 3.3

Рассмотрим пример простейшего приложения Windows Forms. Оно всего лишь создает новую форму и выводит определенный текст в заголовок окна формы.

using System.Windows.Forms; class SimpleWindowsForm : Form < // Метод-конструктор нашего класса public SimpleWindowsForm() < // Указываем заголовок окна this.Text = «Это простая форма с заголовком»; >static void Main() < // Создаем новый экземпляр класса //и запускаем его на выполнение // В результате на экране дисплея откроется форма Application.Run(new SimpleWindowsForm()); >>
Листинг 3.3.

Пример программы 3.4

Следующий пример тоже достаточно прост, но мы делаем шаг вперед — размещаем на форме кнопку.

using System.Windows.Forms; class SimpleWindowsFormWithButton : Form < Button button1; // Метод-конструктор нашего класса public SimpleWindowsFormWithButton() < // Указываем заголовок окна this.Text = «Форма с командной кнопкой»; // Добавляем кнопку в коллекцию элементов управления формы // Хотя на кнопке написано: «Нажми меня!», // пока при нажатии ничего не происходит! button1 = new Button(); button1.Text = «Нажми меня!»; button1.Top = 100; button1.Left = 100; button1.Height = 50; button1.Width = 70; this.Controls.Add(button1); >static void Main() < // Создаем и запускаем форму Application.Run(new SimpleWindowsFormWithButton()); >>
Листинг 3.4.

Пример программы 3.5

Кнопку на форму мы поместили, но при нажатии на нее ничего не происходит. Это скучно.

Нам нужно описать метод, который будет выполнять какое-либо действие при нажатии на кнопку. Пусть при этом текст в заголовке окна будет меняться. Поскольку такой метод отслеживает наступление некоторого события (в нашем случае – нажатие на кнопку) и затем каким-то образом обрабатывает его, он, напомним, называется «обработчик события». Кроме того, надо привязать обработчик события к соответствующему событию, то есть к нажатию на кнопку.

using System; using System.Windows.Forms; using System.Drawing; class FormWithWorkingButton : Form < Button mrButton; // Метод-конструктор нашего класса public FormWithWorkingButton() < // Указываем заголовок окна this.Text = «Форма с работающей кнопкой!»; // Добавляем кнопку и привязываем ее к обработчику события mrButton = new Button(); mrButton.Text = «Нажми меня»; mrButton.Top = 100; mrButton.Left = 100; mrButton.Height = 50; mrButton.Width = 70; mrButton.Click += new System.EventHandler(mrButton_Click); this.Controls.Add(mrButton); >static void Main() < // Создаем и запускаем форму Application.Run(new FormWithWorkingButton()); >// Обработчик события, срабатывающий при нажатии кнопки void mrButton_Click(object sender, EventArgs e) < // Изменяем текст mrButton.Text = «Кнопка была нажата!»; >>
Листинг 3.5.

Пример программы 3.6

Мы добились успеха: наша программа умеет выполнять основные действия. Теперь добавим на форму несколько новых элементов управления, аккуратно разместим их и немного поработаем с ними. Возьмем элементы управления 4-х типов: Button, ListBox, MessageBox и PictureBox.

Обратите внимание: кроме System.Windows.Forms в этом примере упоминается пространство имен System.Drawing . Дело в том, что мы используем элемент управления PictureBox , а для работы с изображениями требуются классы Drawing .

using System.Windows.Forms; using System.Drawing; class MyForm : Form < // Объявим элемент ListBox как поле класса: // нам придется обращаться к нему из разных методов ListBox listBox1; // Метод-конструктор нашего класса public MyForm() < //Размеры формы this.Size = new Size(400, 400); // Создадим элемент PictureBox, поместим в него изображение, // добавим его на форму PictureBox pictureBox1 = new PictureBox(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; Bitmap image1 = new Bitmap («..//..//images//Zakat.jpg»); pictureBox1.ClientSize = new Size(this.Width, 150); pictureBox1.Image = (Image)image1; this.Controls.Add(pictureBox1); // Создаем объект Button, определяем некоторые из его свойств Button button1 = new System.Windows.Forms.Button(); button1.Location = new Point(150, 160); button1.Size = new Size(100, 30); button1.Text = «Нажми меня»; button1.Click += new System.EventHandler(button1_Click); this.Controls.Add(button1); // Создаем ListBox, определяем свойства и добавляем на форму listBox1 = new System.Windows.Forms.ListBox(); listBox1.Location = new System.Drawing.Point(20, 200); listBox1.Size = new Size(100, 100); listBox1.Items.Add(«Лес»); listBox1.Items.Add(«Степь «); listBox1.Items.Add(«Озеро»); listBox1.Items.Add(«Море»); listBox1.Items.Add(«Океан»); listBox1.SelectedIndex = 2; this.Controls.Add(listBox1); >// Обработчик события, срабатывающий при нажатии кнопки void button1_Click(object sender, System.EventArgs e) < // Выводим сообщение с указанием выбранного в списке пункта MessageBox.Show(this, «Вы выбрали » + listBox1.SelectedItem, «Уведомление», MessageBoxButtons.OK); >static void Main() < // Создаем и запускаем форму Application.Run(new MyForm()); >private void InitializeComponent() < this.SuspendLayout(); // // MyForm // this.BackColor = System.Drawing.SystemColors.Control; this.ClientSize = new System.Drawing.Size(292, 273); this.Name = «MyForm»; this.ResumeLayout(false); >>

Источник: intuit.ru

Как создать Windows Forms проект на C++

Превью к статье о создании C++ Windows Forms проекта

Windows Forms — интерфейс программирования приложений, отвечающий за графический интерфейс пользователя. Он является частью .Net Framework и создан для того, чтобы упростить взаимодействие пользователя с элементами Win API. Причём не просто упростить, а буквально полностью скрыть низкоуровневое взаимодействие с графическими элементами путём создания набора базовых компонентов и классов. При этом используемые классы не привязаны к языку разработки, благодаря чему данный проект может использоваться как на родном для Microsoft C#, так и на других языках, например, C++, VB Net и F#. Но не смотря на свою кроссплатформенность в мире языков программирования, Windows Forms проекты легко создаются на C#, однако при попытке создания проекта на C++ возникает множество проблем.

Шаг 0. А вдруг получится сразу?

В настоящее время IDE, поддерживающих Windows forms, не так много — буквально одна только Visual Studio, более известная как просто «студия». Поэтому будем рассматривать создание и решение проблем именно в этой среде разработки. Первым шагом запустим студию, начнём создавать новый проект и попытаемся найти Windows forms проект для C++:

Создаём новый проект в студии

Создаём новый проект в студии

Ищем Winfows Forms для C++

Ищем Winfows Forms для C++

Если у вас более старая версия Visual Studio, то интерфейс будет выглядеть немного иначе, однако данная функциональность будет той же. Также не исключено, что у Вас может быть данный тип проекта для C++ (на некоторых версиях формы для C++ были доступны сразу после установки IDE). Если же у Вас, как и у нас поиск не дал нужных результатов, то переходим к следующему шагу.

Шаг 1. Создание CLR проекта

Поскольку непосредственно Windows Forms проекта у нас не оказалось, мы обхитрим студию и создадим пустой CLR проект на С++. Для этого в том же окне поиска необходимо найти и выбрать Новый CLR проект , ввести имя (если нужно, то поменять директорию расположения проекта) и немного подождать, пока студия сделает свою работу.

Ищем пустой CLR проект (.Net Framework)

Ищем пустой CLR проект (.Net Framework)

Создаём новый пустой CLR проект

Создаём новый пустой CLR проект

В результате Visual Stido создаст новый C++ CLR проект, который будет выглядеть примерно так:

Результат создания нового CLR проекта

Результат создания нового CLR проекта

Шаг 2. Добавить форму

Чтобы сделать CLR проект проектом Windows Forms, нужно просто добавить в него форму. Для этого в верхнем меню нужно выбрать Проект — Добавить новый элемент и в появившемся окне выбрать категорию Visual C++ — UI и затем выбрать Форма Windows Forms .

Проект -> Добавить новый элемент

Visual C++ -> UI -> Форма Windows Forms

После данной операции нас ждёт разочарование в виде ошибки Исключение из HRESULT: 0x8000000A :

Вместо формы получили ошибку

Вместо формы получили ошибку

Шаг 3. Исправляем появившуюся ошибку

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

#include «Form1.h» #include using namespace имя_вашего_проекта; int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

В результате код файла Form1.cpp будет выглядеть следующим образом:

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

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

Шаг 4. Переоткрыть проект

Всё, что теперь осталось сделать — это закрыть текущее решение, а затем открыть его снова. Для этого можно закрыть саму студию, а можно выбрать в верхнем меню Файл — Закрыть решение , после чего в появившемся окне выбрать только что созданный проект и открыть его заново.

Форма создалась, можно добавлять компоненты

Форма создалась, можно добавлять компоненты

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

Фото Перминова Андрея, автора этой статьи

Программист, сооснователь programforyou.ru, в постоянном поиске новых задач и алгоритмов

Языки программирования: Python, C, C++, Pascal, C#, Javascript

Выпускник МГУ им. М.В. Ломоносова

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

Источник: programforyou.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru