Простейшее приложение WinForms может выглядеть подобно следующему примеру: using System; using System.Windows.Forms; namespace SimpleApp < // главное окно class MainWindow : Form < public MainWindow() < >> // класс программы class Program < static void Main(string[] args) < // создаем главное окно Application.Run(new MainWindow()); > > > Как видно, помимо реализующего точку входа приложений класса Program, создается класс, наследующий от Form. Экземпляр данного класса и представляет собой главное окно запускаемого приложения. Собственно запуск оконного приложения осуществляется при помощи вызова Application.Run(), которому передается ссылка на экземпляр главного окна.
Элементы управления
- В классе, порожденном от Form, определяется переменная-член нужного элемента UI.
- Настраивается внешний вид и поведение элемента UI.
- Полученный элемент UI добавляется в контейнер ControlCollection нужного родитель с помощью вызова Controls.Add()
События
Реализация функциональности, позволяющая создавать отзывчивые приложения с графическим интерфейсом, основана на использовании событий. Каждый визуальный элемент предоставляет определенный, зачастую довольно большой набор событий, которые позволяют программисту создавать методы, обрабатывающие те или иные изменения состояния элемента. Например:
Intro to Windows Forms (WinForms) in .NET 6
class MainWindow : Form
// Устанавливаем обработчики событий создания окна и щелчка мышью
Развертывание приложений на клиентских компьютерах
После создания приложения необходимо отправить его пользователям, чтобы они могли установить и запустить его на своих клиентских компьютерах. С помощью технологии ClickOnce можно развертывать приложения из Visual Studio всего в несколько щелчков, а затем предоставлять пользователям URL-адрес приложения в Интернете. ClickOnce управляет всеми элементами и зависимостями в приложении и обеспечивает его правильную установку на клиентском компьютере.
Приложения ClickOnce можно настроить для работы только при подключении к сети или для работы как в сетевом, так и в автономном режиме. Если вы указываете, что приложение должно поддерживать работу в автономном режиме, то технология ClickOnce добавляет ссылку на приложение в меню Пуск пользователя. Затем пользователь может открывать приложение без использования URL-адреса.
При обновлении приложения вы публикуете на веб-сервере новый манифест развертывания и новую копию приложения. ClickOnce обнаруживает, что доступно обновление, и обновляет установку пользователя. Таким образом, для обновления старых приложений не требуется писать специальный код.
См. также
- Руководство по созданию приложения WinForms
- Добавление формы в проект
- Добавление элемента управления
Источник: learn.microsoft.com
C# Programming Tutorials: Beginners 05 Windows Forms and Event Handlers
WinForms F# — интерактивное приложение
Приложение Windows Forms создано на основе консольной F# программы. Код приложения разделён на несколько логических модулей. Модули инициализации элементов управления и формы сгруппированы в отдельной папке. Программный код интерактивности приложения также вынесен в отдельный модуль. Такое построение напоминает разделённый на частичные классы приложение языка C#.
В приложение добавлен простейший код F# для демонстрации интерактивности приложения.
На основе предлагаемого приложения можно заниматься изучением языка программирования F#. В оконном приложении гораздо нагляднее смотрятся результаты функций и выражений. Кроме того, на основе данного исходника, можно создавать вполне работоспособные приложения на языке F#.
Перестройка консольного приложения
Прежде всего в интегрированной среде программирования MS Visual Studio 2019 создаётся консольное приложение для языка F#. На данный момент для приложения выбрана максимальная целевая платформа .NET5.
Для поддержки функционирования каркаса Windows Forms в файле проекта консольного приложения необходимо сделать соответствующие изменения. В 16 версии Visual Studio нет возможностей визуального добавления поддержки платформы Windows Forms для проектов языка F# (появилась в 17 версии студии), поэтому изменим файл проекта вручную, в встроенном текстовом редакторе. В окне обозревателя решений щелкаем правой кнопкой мыши над именем проекта и в появившемся диалоговом окне вызываем текстовый редактор для файла проекта.
В окне текстового редактора отобразится следующая XML-разметка:
Exe net5.0 3390;$(WarnOn)
Код, заключенный в теге элемента PropertyGroup следует заменить как показано ниже в листинге изменённой XML-разметки файла проекта:
WinExe net5.0-windows true
После перезагрузки проекта, в обозревателе решений, в зависимостях проекта, можно увидеть добавленную платформу Microsoft.Windows.Desktop.App.WindowsForms для поддержки оконных элементов.
Структура кода приложения
Структура предлагаемого приложения Windows Forms на языке F# состоит из четырех файлов-модулей. Три файла — InitControls.fs, FormModule.fs, CodeFormModule.fs — формируют код формы и находятся в одном пространстве имён. Один — Program.fs — это общий файл запуска приложения. Файлы — InitControls.fs, FormModule.fs — в которых происходит инициализация формы и элементов управления сгруппированы в папку.
Файл формы CodeFormModule.fs, предназначенный для рабочего кодирования, вынесен за пределы папки формы. Такое построение структуры модулей позволило отделить код инициализации формы и визуальных элементов управления от программного кода бизнес-логики приложения.
Модуль в контексте языка программирования F# — это основной способ группирования логически связанного программного кода. Модули могут представлять из себя отдельные файлы или же в одном файле можно объявить несколько модулей. Описываемая структура приложения создавалась именно с целью распределить логически родственные коды F# по отдельным модулям приложения.
Модуль инициализации элементов управления
InitControls.fs — файл-модуль F# объявления и инициализации элементов управления перед добавлением в главную форму приложения. Модуль содержит несколько функций, составные выражения которых возвращают полностью подготовленные элементы для размещения на форме.
Для примера взяты табличный контейнер TableLayoutPanel и четыре кнопки Button, динамически размещаемые в ячейках табличного элемента управления.
Листинг кода модуля InitControls.fs:
namespace MyWindowsForm open System.Windows.Forms open System.Drawing module InitControls = // — Объявление и инициализация свойств элементов управления — // Виды кнопок. let standardButton = Size(100, 70) let plumpButton = Size(200,200) let tableLayoutPanel = let tlp = new TableLayoutPanel() tlp.CellBorderStyle ignore tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)) |> ignore tlp.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)) |> ignore tlp.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)) |> ignore tlp.Dock
Модуль создания формы приложения
Модуль FormModule.fs предназначен для объявления собственного класса MyForm формы приложения. В этом же модуле создаётся объект MyForm и к нему добавляются элементы управления предварительно инициированные в модуле InitControls.fs.
Для формирования внешнего вида приложения элементы добавляются к форме внутри поля между спаренными методами SuspendLayout() — ResumeLayout(). Данные методы исключают повторы перерасчета макета формы при добавлении каждого элемента и запускают формирование макета только после вызова метода ResumeLayout(). Конечно, если форма состоит из нескольких элементов, спаренные методы заметно не увеличивают производительность. Но с учётом возможного роста создаваемого проекта приложения, такое построение кода создания формы всё же желательно использовать, тем более что накладные расходы при вызовах SuspendLayout() — ResumeLayout() не существенны.
Программный код модуля формы FormModule.fs:
namespace MyWindowsForm open System.Windows.Forms open System.Drawing open InitControls module FormModule = // — Модуль создания и инициализации формы — type MyForm() = inherit Form() do base.Text
Модуль рабочего кода приложения
Модуль F# CodeFormModule.fs предназначен для рабочего кода приложения, это модуль взаимодействия элементов управления и бизнес-логики приложения. Здесь находятся методы обработки событий компонентов формы, здесь же осуществляется изменение свойств элементов и формы для обеспечения интерактивности программы.
namespace MyWindowsForm open System open System.Windows.Forms open InitControls open FormModule open System.Drawing // — Модуль рабочего кода формы — module Code = let myCodeForm = myForm myCodeForm.Text Button if button = button1 then Console.Beep(300, 300) if button = button2 then Console.Beep(500, 300) if button = button3 then Console.Beep(1000, 300) if button = button4 then Console.Beep(3000, 300) // Если кнопка стандартная, то делаем её пухлой, // и наоборот. if isStandart button then button.Size
Модуль запуска работы приложения
В модуле F# Program.fs находится код настроек и запуска приложения.
open System.Windows.Forms open MyWindowsForm // Стили элементов управления для поддержки тем операционной системы. Application.EnableVisualStyles() // Режим отображения текста в окнах приложения. // Улучшает качество отображения строк. // Повышает графическую производительность приложения. Application.SetCompatibleTextRenderingDefault(false) // Запускает стандартный цикл обработки сообщений приложения // в текущем потоке и делает указанную форму видимой. Application.Run(Code.myCodeForm)
Исходник Windows Forms F#
Исходник написан в интегрированной среде программирования MS Visual Studio 2019, тестировался в Visual Studio 2022 Preview 4.
Источник: www.interestprograms.ru