Пример разработки простейшего приложения типа Windows Forms на языке C++ в MS Visual Studio
В данной теме рассмотрен пример создания приложения расчета площади треугольника по формуле Герона. Приложение реализовано в системе Microsoft Visual Studio как Windows Forms Application .
В работе описывается программирование события клика на кнопке. Также рассматриваются особенности взаимодействия программного кода с компонентами Label (метка), Button (кнопка), Edit (строка ввода). Поиск на других ресурсах:
Математическая постановка задачи
Заданы длины сторон треугольника a , b , c . Используя средства системы Microsoft Visual Studio разработать приложение, которое вычисляет площадь треугольника по формуле Герона. Приложение реализовать на языке C++ как Windows Forms Application . Формула Герона для расчета площади треугольника:
где a , b , c – стороны треугольника; p – полупериметр, рассчитывается по формуле:
⇑
Выполнение
1. Запустить Microsoft Visual Studio . Создать проект.
Уроки C# / Как сделать первое Windows приложение
Запустить MS Visual Studio . Создать проект как Windows Forms Application на базе шаблона Visual C++ . Пример создания проекта типа Windows Forms Application в C++ и типы создаваемых файлов приведен здесь. Сохранить файл, задать ему произвольное имя (например « MyApp01 «). В результате, будет создана главная форма приложения как изображено на рисунке 1. По умолчанию, создается класс формы с именем Form1 . Ему отвечает файл с именем « Form1.h » (рисунок 1). Для того, чтобы перейти в режим просмотра кода файла « Form1.h » существует три способа:
– команда View -> Code (рисунок 2);
– команда « View Code » из контекстного меню, которое вызывается кликом на названии файла Form1.h в утилите Solution Explorer (рисунок 3);
– клик на соответствующей кнопке ( View Code или View Designer ) в Solution Explorer (рисунок 4). Рис. 1. Главная форма приложения
Рис. 2. Команда Code с меню View
Рис 3. Вызов режима просмотра кода из контекстного меню
Рис 4. Вызов режима просмотра кода из Solution Explorer В результате перехода в режим просмотра, откроется окно с текстом файла « Form1.h «.
– конструктор Form1() ;
– деструктор
Form1() ;
– метод InitializeComponent() , в котором можно реализовать начальную инициализацию внутренних переменных.
2. Размещение компонент на форме.
Для работы программы нужно разместить соответствующие компоненты на форме. Чтобы размещать компоненты, нужно перейти в режим проектирования ( Design ) одним из вышеописанных способов. Компоненты находятся на панели инструментов Toolbox (рисунок 6). Рис. 6. Палитра инструментов Toolbox В нашем случае размещаются следующие компоненты:
– три компонента типа Label (метка) (рисунок 7). Предназначены для вывода информационных сообщений « a = «, « b = «, « c = «. В результате создается три экземпляра (объекта) с именами label1 , label2 , label3 ;
– три компонента типа TextBox (строка ввода) – для ввода значений переменных a , b , c (рисунок 8). Создается три объекта с именами textBox1, textBox2, textBox3;
– один компонент типа Button (кнопка) (рисунок 9). Предназначен для реализации команды вычисления площади и вызова соответствующего обработчика события. Создается экземпляр с именем button1;
– один компонент типа Label (рисунок 10). Предназначен для вывода результата (площадь треугольника). Создается объект с именем label4. После размещения компонент форма будет иметь вид как показано на рисунке 10.
Рисунок 8. Компонент TexbBox
Рисунок 9. Компонент Button
Рисунок 10. Компонент Label
3. Настройка свойств компонент.
Чтобы форма имела более наглядный для решения задачи вид, нужно настроить ее свойства а также свойства компонент размещенных на ней.
Для настройки свойств формы и компонент используется окно « Properties » (рисунок 11). Это окно вызывается командой
После этого в заголовке окна « Properties » может появиться название формы Form1 . Следующим шагом нужно свойство Text установить в значение « Площадь треугольника » (рисунок 12).
Подобным образом настраиваются свойства компонент, размещенных на форме. Настроить такие свойства компонент:
– в компоненте label1 свойство Text = « a = «;
– в компоненте label2 свойство Text = « b = «;
– в компоненте label3 свойство Text = « c = «;
– в компоненте label4 свойство Text = « Площадь треугольника = «;
– в компоненте button1 свойство Text = « Вычислить «. После выполненных действий, форма будет иметь вид, как изображено на рисунке 13. Рис. 13. Вид формы после настройки компонент
4. Программирование события клика на кнопке button1.
Результатом работы программы есть вычисление площади треугольника. Вычисление происходит в момент когда пользователь делает клик на кнопке « Вычислить «. В результате формируется событие Click . В программе этому событию отвечает фрагмент программного кода, который называется обработчиком события (event handler). Этот фрагмент формируется средствами Microsoft Visual Studio . Для того чтобы вызвать обработчик события клика на кнопке button1 , нужно выполнить следующие действия (рисунок 14):
– выделить компонент button1 ;
– в окне Properties активировать вкладку « Events » (события);
– в списке событий, в поле ввода события Click сделать двойной клик мышкой. Рис. 14. Вызов обработчика события Click клика на кнопке button1 В результате выполненных действий, система Microsoft Visual Studio сформирует обработчик события и переключит окно в режим ввода программного кода.
Обработчик события (метод) имеет название button1_Click . Формируется следующий программный код: Между фигурными скобками нужно вписать собственный код вычисления площади треугольника по формуле Герона. Листинг программного кода обработчика события button1_Click() следующий: Объясним некоторые фрагменты кода. Чтобы перевести значение компонента textBox1->Text из строки в соответствующей вещественный тип float используется метод Parse() из класса System::Double . Чтобы занести в переменную a типа float значение строки с textBox1->Text можно использовать один из двух способов: Указатель this есть указателем на данный класс (класс Form1 ).
Для вычисления квадратного корня используется функция Sqrt() из класса Math : Для преобразования из типа float в строчный ( string ) используется метод ToString() :
5. Запуск проекта на выполнение.
Теперь можно запускать проект на выполнение (клавиша F5 ) и тестировать его работу. Источник
Введение в Windows Forms — пишем первую программу
В данной статье будет рассказано о том как написать простой обработчик событий на C++ для приложения Windows Forms, работающего под управления .NET Framework. Мы создадим простейшую Windows программу, которая вычисляет факториал целого числа. Для написания данной программы Вам понадобится Visual Studio 2008 Express Edition или Professional. Для начала создадим проект. Откроем Visual Studio, далее жмем Файл→Создать→Проект, далее выбираем пункт CLR и отмечаем Приложение Windows Forms, даем имя проекта, к примеру factr и жмем Ok.
После того как мы создали проект, должна появиться пустая форма, которая должна выглядеть примерно так: Справа должна появиться панель элементов, если ее нет, то можно включить ее в меню Вид→Панель Элементов или нажатием горячих клавиш — Ctrl + Alt + X. На ней расположены различные элементы для вставки в форму, нам понадобятся только элементы Button (Кнопка), Label (Надпись) и TextBox (Текстовое поле).
Перетащите на форму три элемента Label, Два элемента TextBox, и одну кнопку (Button), расставьте элементы примерно так: Теперь нам нужно будет изменить текст надписей для элементов Label и Button и Задать подходящие имена классов для элементов TextBox. Для этого Выделите элемент label1, перейдите в Панель свойств, (обычно она находится под Панелью элементов, если панель выключена, включите ее в меню Вид -> Диспетчер свойств.) и задайте для данного элемента значение атрибута Text как показано на рисунке.
Задайте атрибут Text для всех элементов Label и Кнопки Button аналогичным образом. Наша форма должна принять примерно следующий вид: Я сделал кнопку развернуть неактивной, так как изменение размеров данной формы испортит ее внешний вид, Вы также можете это сделать, щелкнув левой кнопкой мыши на пустом месте формы и в Панели свойств задать для атрибута MaximizeBox параметр False. Теперь задайте для текстовых полей (TextBox) Атрибуты Name в Панели Свойств – для первого поля это будет num1, а для второго, соответственно num2. Тем самым мы изменили имена классов для полей TextBox, чуть позднее Вы поймете зачем.
Итак, каркас формы готов, если откомпилировать и запустить программу, то мы увидим, какой будет наша форма на финише, правда сейчас она совершенно бесполезна. Перейдем к написанию обработчика событий для кнопки Button, т.е. что будет происходить при нажатии на эту кнопку, также мы напишем саму функцию вычисления факториала, которую мы будем использовать в обработчике.
Первым делом нужно добавить заголовочный файл fact.h в проект, для этого щелкаем правой кнопкой мыши в Обозревателе решений на папке Заголовочные файлы, далее меню Добавить -> Создать Элемент, вписываем название файла – fact.h и нажимаем Добавить. В данном файле будет содержаться прототип функции для вычисления факториала.
Добавляем туда следующий исходный код. Далее подключаем этот файл к проекту с помощью директивы #include – Открываем файл factr.cpp и добавляем после строчки #include «stdafx.h» следующий код. Теперь наш заголовочный файл подключен к проекту, далее аналогичным образом создаем файл исходного кода fact.cpp в проект.
В него добавляем саму функцию вычисления факториала целого числа. Теперь наш проект содержит функцию вычисления факториала, откомпилируйте его, если ошибок нет, то можно приступить к написанию обработчика событий для кнопки Button. Открываем файл Form.h, в нем мы видим визуальное представление нашей формы. Щелкаем двойным щелчком на кнопке Button и переходим к исходному коду.
После фигурной скобки ставим абзац и приступаем к кодированию. Любой набор символов, которые мы вводим с клавиатуры в текстовое поле программы является строкой, поэтому нам нужно вытащить значение из текстового поля и привести его к целочисленному типу. Это довольно сложная процедура, но, к счастью в языке C++ уже есть множество функций, выполняющих конвертирование типов данных.
Сначала нам необходимо описать и инициализировать переменную, в которой будет храниться значение числа, для которого должен быть вычислен факториал. Добавим в том место, где Вы поставили абзац следующий код: Эта строка инициализирует переменную, которая хранит в себе число для вычисления его факториала.
Далее нам нужно будет произвести вызов нашей функции fact с переменной number в качестве единственного аргумента и занести результат работы функции в новую переменную factor. И затем преобразовать полученное значение обратно в строку и присвоить его второму текстовому полю. Таким образом, наш простой обработчик событий будет выглядеть вот так: Теперь можно скомпилировать и запустить готовую программу и проверить ее. Помните, что тип double в С++ может хранить число не превышающее !170. Результат работы программы можно проверить в инженерном калькуляторе Windows. Источник
Источник: onecomp.ru
5.1 Windows Forms и .NET
Это бесплатная глава книги Библия C#. В новом издании эта глава переписана с учетом универсальных при-ложений Windows, а старая версия главы, которая не потеряла еще своей актуаль-ности стала бесплатной и доступной всем.
Начнем с создания пустого приложения и посмотрим, что для нас сгенерирует мастер Visual Studio, чтобы на экране появилось окно программы, и из чего все это состоит. Для создания проекта выполняем команду меню File | New | Project и в открывшемся окне выбираем Windows Forms Application в разделе языка программирования Visual C# | Windows (рис. 5.1). Я назвал свое новое приложение OurFirstVisualApplication.
Давайте посмотрим, какие модули добавлены в решение. Их всего два: Form1.cs (этот модуль состоит из нескольких файлов) и Program.cs. Начнем со второго файла, потому что именно с него начинается выполнение программы, и там находится метод Main(). Код файла вы можете увидеть в листинге 5.1.
Листинге 5.1. Содержимое файла Program.cs
using System; using System.Collections.Generic; using System.Windows.Forms; namespace OurFirstVisualApplication < static class Program < [STAThread] static void Main() < Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); >> >
Рис. 5.1. Окно создания нового проекта (выделен пункт для создания визуального приложения)
Чтобы сэкономить место, я убрал комментарии, но в них всего лишь было написано, что перед нами входная точка приложения. А мы уже и без комментариев знаем, что метод Main() всегда вызывается первым при запуске приложения. Но давайте все по порядку.
Файл Program.cs нужен только в качестве заглушки, в которой объявлен класс с методом Main(). Он не несет в себе никакой логики, кроме создания приложения и отображения главного окна программы. Чаще всего в этот файл вы заглядывать не будете, но знать о его существовании желательно.
5.1.1. Пространства имен
В самом начале файл Program.cs подключает три пространства имен, с которыми будет происходить работа. На самом деле для компиляции программы достаточно только двух пространств: первого и третьего. Второе пространство не нужно, и в данном коде не используется, поэтому мы не будем его пока рассматривать. Это пространство имен относится к коллекциям, а это тема отдельного и очень серьезного разговора главы 8.
Из необходимых остаются два пространства имен:
- System — мы подключали это пространство имен для всех приложений, которые писали до сих пор, — точнее, мастер подключал его вместо нас. В этом пространстве в .NET объявлены основные типы данных и все, без чего не проживет ни одно приложение .NET, которое хоть что-то делает;
- System.Windows.Forms — в этом пространстве имен расположено все, что необходимо для функционирования формы. Формами в .NET называют проект будущего окна. Если класс — это спецификация, по которой создается объект, то форма — это спецификация, по которой создается окно. Мы планируем работать с визуальным интерфейсом, поэтому это пространство имен просто необходимо.
Как узнать, какие пространства имен подключать, а какие не нужно? Тут может помочь файл помощи и MSDN, где при описании каждого класса, метода или свойства обязательно указывается, в каком пространстве имен его можно найти. Откройте файл помощи — командой меню Help | Index (Помощь | Индекс) — и введите в строку поиска Look for (Искать) в левой панели открывшегося окна: Application class. Щелкните по найденному имени двойным щелчком, и откроется страница помощи по этому классу (рис. 5.2).
Рис. 5.2. Файл помощи по классу Application
На рис. 5.2 я выделил рамкой тот фрагмент, где как раз и написано, в каком пространстве имен находятся описание и сборка (DLL-файл) с реализацией класса. Нас больше интересует именно пространство имен, а не сборка. Мне ни разу не приходилось использовать файл сборки, по крайней мере этот. Все основные файлы добавляются в раздел References проекта автоматически при создании проекта.
Но если вы будете использовать что-либо специфическое, то может потребоваться подключение нужного файла сборки самостоятельно.
Второй метод узнать пространство имен — не думать о нем, а возложить всю головную боль на среду разработки. У Visual Studio голова достаточно хорошая, и она с легкостью решит такую задачу.
Попробуйте сейчас ввести где-нибудь в коде метода Main() слово OleDbConnection. Это класс, который используется для соединения с базами данных, — компилятор не найдет его среди подключенных пространств имен и конечно же подчеркнет. Теперь вы можете щелкнуть правой кнопкой по подчеркнутому имени, в контекстном меню раскрыть пункт Resolve (Разрешить), и в его подменю будут перечислены пространства имен, в которых среда разработки смогла найти указанное слово (рис. 5.3).
Рис. 5.3. Контекстное меню позволяет решить проблему подключения пространств имен
В контекстом меню доступны два варианта решения проблемы, между которыми находится разделитель. Выше разделителя указаны варианты, которые добавляют в начало модуля кода оператор using с выбранным пространством имен. Варианты ниже разделителя изменяют короткое имя метода на полное. То есть, в случае с типом данных OleDbConnection, если вы выберете вариант ниже разделителя, то тип данных заменится на System.Data.OleDb.OleDbConnection. Если вы знаете, что это единственное обращение к такому типу данных, то можно использовать полный путь, но если в модуле кода вы станете использовать этот тип данных много раз, то проще будет сразу добавить его в раздел using.
Чаще всего в этом подменю будет приведен только один вариант — и до разделителя, и после, но некоторые имена могут быть объявлены как для Windows, так и для Web. В таких случаях требуется выбрать нужную сборку. Это не сложно, потому что для Интернета чаще всего используется пространство имен System.Web. Например, класс Application для интернет-программирования находится в пространстве имен Microsoft.Web.Administration. Это определяется ключевым словом Web, которое находится в середине.
Обратите также внимание, что мастер создания проекта поместил весь код нашего проекта в пространство имен, идентичное имени проекта. Всегда обрамляйте код в пространство имен.
Пространство имен по умолчанию для вашего проекта можно изменить. Для этого щелкните правой кнопкой мыши по имени проекта и выберите в контекстном меню пункт Properties, чтобы изменить свойства проекта. Здесь в разделе Application в поле Default namespace (Пространство имен по умолчанию) вы можете изменить имя пространства имен. При этом уже существующий код останется в старом пространстве имен.
То есть, существующий код изменяться автоматически не будет, а вот новые файлы, которые будут добавляться в проект, станут попадать уже в новое пространство. Если вам нужно перенести существующий код в новое пространство, то следует сделать это руками, изменяя текущее пространство имен на новое. Можно оставить и старое имя, потому что в одной сборке могут быть и два, и три разных пространства имен, если вас это устраивает.
5.1.2. Потоки
Обратите внимание, что перед методом Main() в квадратных скобках стоит ключевое слово STAThread (см. листинг 5.1). Оно указывает на то, что модель разделения потоков для приложения будет одиночная (Single Thread Apartment model). Такой атрибут должен быть указан для всех точек входа в WinForms-приложения. Если он будет отсутствовать, то компоненты Windows могут работать некорректно.
Дело в том, что без атрибута STAThread приложение будет пытаться использовать многопоточную модель разделения MTAThread (Multi Threaded Apartment model), которая не поддерживается для Windows Forms.
5.1.3. Класс Application
В листинге 5.1 в методе Main() все строки кода являются обращением к классу Application, который предоставляет статичные свойства и методы (это значит, что не нужно создавать экземпляр класса, чтобы их вызвать) для поддержки работы приложения. Основными методами являются запуск и останов приложения, а также обработка сообщений Windows.
При возникновении каких-либо ситуаций ОС отправляет окну событие, и окно должно отработать это событие. Например, если пользователь нажал на кнопку закрытия окна, то этому окну направляется событие WM_CLOSE (если мне не изменяет память). Поймав это событие, окно должно отреагировать, освободить запрошенные ресурсы и приготовиться к уничтожению. Любой ввод пользователя, включая нажатие клавиш на клавиатуре и движение курсора мыши, обрабатывает ОС, а потом с помощью сообщений отправляет изменения в приложение.
Чтобы отлавливать сообщения, которые направляет приложению операцион- ная система, в приложении должен быть запущен цикл. В таких языках, как С/С++, цикл получает от ОС сообщение, обрабатывает его и ожидает следующего сообщения. Этот цикл продолжается до тех пор, пока не произойдет выхода из программы.
Класс Application берет на себя всю ответственность за получение сообщений от системы и перенаправление их в окна, чтобы вы могли эти сообщения обработать. Чуть позже мы научимся ловить сообщения, а пока нам нужно знать, что за подготовку сообщения для обработки отвечает именно класс Application.
Рассмотрим методы, которые вызываются в классе, который сгенерировал нам мастер Visual Studio. Первый метод класса Application, который мы вызываем:
EnableVisualStyles(). Этот метод включает отображение в стилях ОС, на которой запущено приложение. Если удалить эту строку и запустить программу, то все элементы управления будут выглядеть в стиле Windows 9x с квадратными углами даже в Windows 7. Не вижу смысла возвращаться в доисторические времена визуального интерфейса, но если вам вдруг это понадобится, теперь вы знаете, какую строку нужно удалить.
Следующий метод приложения, который вызывает программа: SetCompatibleTextRenderingDefault(). Некоторые элементы управления могут отображать текст с помощью старых функций GDI или с помощью новых функций GDI+. Если методу SetCompatibleTextRenderingDefault() передать значение false, то будут использоваться функции GDI+.
Это все были подготовительные методы, а последний метод: Run() является наиболее важным. Этот метод запускает скрытый цикл обработки сообщений ОС и делает видимой форму, которая передается в качестве параметра. В нашем примере в качестве параметра передается инициализация объекта класса Form1, для чего вызывается конструктор класса с помощью оператора new, как мы это делали ранее. Просто мы всегда присваивали результат выполнения new переменной, а в этом случае нам переменная не нужна, и мы больше не будем использовать объект в методе Мain(), поэтому, нигде ничего не сохраняя, сразу передаем новый объект методу. То же самое можно было написать так:
Form1 form = new Form1(); Application.Run(form);
Источник: www.flenov.info
Windows Forms C#
Уроки C# .NET Windows Forms / #1 — Создание приложения на C#
В ходе курса вы научитесь работать с C# .NET Windows Forms, а также создадите приложение с дизайном и подключением к базе данных. Вы изучите как подключать программы к базе данных, поработайте с MySQL, а также создадите красивый дизайн для приложения.
Видеоурок
Полезные ссылки:
- Курс по языку C# ;
- Курс по созданию сайта на C# ;
- Скачать Visual Studio .
Информация про C#
Благодаря незаурядной мощности языка, на него пал выбор разработчиков движка Unity . Сегодня является одним из топовых движков для игр на Windows. Выпуск и активное использование движка пошли на руку C#, который стал ещё популярнее.
После базового изучения принципов работы с языком и его синтаксисом, можно сразу перейти к углублённому изучению библиотек и смежных технологий. Большинство современных проектов пишутся с их привлечением, на чистом C# работают редко.
Если сравнить С# с прочими языками, его можно назвать довольно молодым, хотя за плечами уже пройден немалый путь. Впервые полноценная версия языка появилось после выхода Microsoft Visual Studio .NET, событие датируется февралём 2002 года. На сегодня актуальная версия — C# 7.0, выпущенная 7.03.2017 параллельно с Visual Studio 2017.
В C# используется синтаксис, сильно напоминающий Си и приближённый к С++ , Java . Если есть познания в одном из перечисленных языков, изучить C# станет значительно легче.
C# это объектно-ориентированный язык, который немало позаимствовал из С++ и Java. Для примера, С# обладает поддержкой наследственности, полиморфизма, повторную загрузку операторов, статической типизации. Такой подходит помогает в решении распространённых задач в сфере разработки крупных приложений, сохраняющих гибкость, расширяемость и масштабируемость. C# всё ещё развивается, после каждого дополнения в языке появляются новые функции, преимущественно довольно полезные. Среди них: асинхронная работа, переменное связывание, лямбды и т. п.
Какова роль .NET?
Если речь заходит о C#, часто подразумеваются технологии, связанные с платформой .NET (WPF, ASP.NET). То же самое справедливо в обратном направлении, говоря про .NET, думают про C#. Безусловно, понятия имеют жёсткую взаимосвязь, но не являются синонимами. C# — это язык, созданный для взаимодействия с фреймворком .NET. Тем не менее .NET – это довольно широкое понятие.
Сейчас вспоминаются слова Билла Гейтса, не дословно, но смысл таков: «Платформа .NET – лучшее творение Microsoft». Может так и есть, ведь фреймворк очень мощный и постоянно используется в разработке приложений.
Ключевые черты платформы:
- Работает параллельно с разными языками. Популярностью С# во многом обязан общеязыковой среде CLR. Сейчас платформа способна работать с С#, VB.NET, C++, F#, но и на этом список не заканчивается, ведь она работает с диалектами, что привязаны к .NET (наподобие Delphi.NET). После компиляции кода с любого из перечисленных языков, вся интерпретируется в общий язык CIL – это своеобразный ассемблер для .NET. Такой подход позволяет использовать несколько языков для создания подключаемых модулей программы;
- Кроссплатформенность. Данную платформу реально переносить, хоть и есть отдельные ограничения. Сегодня актуальная версия фреймворка работает на всех поддерживаемых Виндовс: от Windows Vista до «десятки». За счёт проекта Mono появилась возможность разрабатывать программы под Linux (различные дистрибутивы), Android и iOS;
- Обширная библиотека классов. .NET Framework обладает единой, унифицированной библиотекой классов, с которой работают все поддерживаемые языки. Библиотека классов пригодится при создании любых программ: от блокнота до огромного веб-сайта;
- Масса встроенных технологий. Среда CLR в сочетании с библиотекой классов – это основа для большого пакета вспомогательных технологий. Их могут использовать все программисты во время разработки приложений. В качестве примера, при взаимодействии с базами данных можно использовать технологию ADO.NET. Во время создания графических редакторов с многочисленными функциями удобно использовать WPF. Во время веб-разработки наверняка используют ASP.NET.
Стоит упомянуть об одной особенности фреймворка и языка – автоматическая очистка хлама в памяти. Таким образом отпадает необходимость вспоминать, и вручную задавать код для высвобождения занятой памяти. Среда CLR без дополнительных команд позаботится о сборе мусора и его удалении.
План курса
В ходе курса мы с вами будем изучать Windows Forms. Это платформа, на основе которой можно строить программы с графическим интересом, но при этом лишь под Windows. Мы изучим саму платформу, научимся добавлять различные объекты, добавлять к ним обработчики событий, а также познакомимся с добавлением баз данных и реализацией их внутри нашего проекта.
Сразу стоит сказать, что для создания красивого интерфейса вам стоит взглянуть на фреймворк C# WPF. На сайте также будут уроки по данной платформе, но прежде чем к ней приступить вам необходимо будет разобраться с Windows Forms.
Дополнительные курсы
На нашем сайте вы можете найти дополнительные курсы по языку C#. Все курсы представлены на этой странице .
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Источник: itproger.com