<
  • Главная
Статьи

Урок 7 - Рисование на графике в C # .NET

  1. Рисование на графике
  2. Дизайн формы
  3. Логический слой
  4. Заговор
  5. Связать форму с логическим слоем

На последнем уроке Напоминание о дне рождения - Хранение данных и вывод Мы закончили создание напоминания о дне рождения. Мы попробовали основные элементы формы, а также привязки и обработку ошибок. Мы уже можем создавать довольно сложные приложения. Сегодняшний урок по C # .NET будет посвящен рисованию.

Рисование на графике

Мы создадим приложение, которое направлено на продажу билетов в кино. Как известно, в зале много мест, и работник кинотеатра должен увидеть в приложении, какие места уже заняты. Вы можете подумать, чтобы перейти к PictureBoxes. Однако, если в кинотеатре было 15 рядов и 30 рядов в каждом, у нас есть 450 PictureBoxes. Вы, наверное, догадываетесь, что есть лучший способ, чем начать стучать в PictureBox1, PictureBox2 ... И как тогда они будут обрабатываться? В случае, если нам нужно сделать что-то более требовательное, чем просто одну или две картинки, мы будем использовать графику. Это потому, что мы помещаем один PictureBox в форму и рисуем то, что нам нужно, на его холсте.

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

Дизайн формы

Создайте новое приложение Windows Forms, переименуйте форму в KinoForm, заголовки должны быть в Evidence Cinema. Загрузите PictureBox поверх большей части формы, которую мы называем cinemaPictureBox. Ниже PictureBox находится кнопка с названием saveButton и текстом Save. Наконец, перетащите SaveFileDialog на форму. Это не добавлено непосредственно к форме, но к строке ниже этого. Это не элемент формы, а только вспомогательный компонент. Мы переименуем его в cinemaSaveFileDialog. Вы можете играть с якорями и тому подобное. Ваша форма должна выглядеть так:

Логический слой

Возможно, вы не удивитесь, добавив класс Kinosal в ваше приложение. У него будет один закрытый атрибут, это будет двумерный массив мест. Если вы еще не работали с 2D-массивом, вы можете думать о нем как о таблице. Одномерный (классический) массив - это всего лишь одна строка. Затем мы работаем с двумерным массивом точно так же, как с одномерным массивом, за исключением того, что мы должны указать две координаты (X и Y). Во многих языках 2D-массивы выполняются как массивы, C # может определять 2D-массивы напрямую следующим образом:

класс Kinosal {private bool [,] seat = new bool [30, 15]; }

Места типа bool, потому что мы заботимся только о том, свободны они или заняты. 30 - ширина поля, 15 - его высота.

Мы добавим в класс 2 приватные константы, одна из которых будет указывать размер визуализированного места в пикселях, а другая - расстояние между местами в пикселях. Привыкайте к константам, когда вы хотите увеличить места, просто замените одну константу и не расшифровывайте код рендеринга.

private const int size = 16; private const int space = 2;

Мы можем перейти к методам.

Заговор

Кинозал должен быть в состоянии сделать. Мы уже упоминали, что будем рисовать на холсте. Этот холст имеет тип Graphics, и мы можем получить его в параметре метода Plot (). Вам нужно добавить использование System.Drawing для типа Graphics, но это, конечно, вас не удивило. Затем холст рисуется с использованием его методов. На данный момент нас будет интересовать только метод FillRectangle (), который рисует прямоугольник, заполненный цветом. Существует множество методов для разных геометрических фигур, как заполненных, так и незаполненных. Вы можете пройти через них, мы попробуем некоторые из них на других уроках.

В графике есть два типа цвета - цвет заливки (кисть) и цвет контура (перо = перо). Для закрашенного прямоугольника мы должны ввести кисть. Готовые экземпляры, настроенные на определенные цвета, можно найти в статическом классе кистей (или для контуров перьев), просто выберите. Кисти также могут рисовать узоры или рисунки, но это не важно для нас.

Используйте два вложенных цикла, чтобы отсканировать все места в поле и нарисовать зеленый или красный квадрат на экране. Мы будем циклически проходить через внешний цикл, внутренний столбец в текущей строке. Цвет (точнее, кисть) определяется тем, является ли место истинным или ложным по заданной координате. Код метода будет следующим:

public void Draw (Графика g) {Кисть; for (int j = 0; j <мест. GetLength (1); j ++) {for (int i = 0; i <мест. GetLength (0); i ++) {if (мест [i, j]) кисть = кисти .Red; еще кисть = кисти. Зеленый; g.FillRectangle (кисть, i * (размер + пробел), j * (размер + пробел), размер, размер); }}}

Обратите внимание, что мы не используем значения 30 и 15 в циклах, но мы используем метод GetLength () с параметрами 0 и 1. Этот метод используется для получения размера двумерного массива. 0 - это ширина, 1 - это высота (конечно, от нас зависит, какое измерение мы определяем как высоту, а какое - как ширину). Конечно, мы не указываем фиксированный размер, потому что в будущем мы можем увеличивать / уменьшать поле и искать в коде, где мы использовали значения 30 и 15. Всегда лучше избегать этих проблем и работать с длиной поля.

Стоит упомянуть про рендеринг самого прямоугольника. Первый параметр метода FillRectangle () - Brush, который определяет цвет заливки. Два других параметра - это координаты верхнего левого угла прямоугольника. Последние два параметра определяют его высоту и ширину. Поскольку каждое место имеет ширину 16 пикселей и ширину 2 пикселя, нам нужно умножить его координату на это значение. Например, если значение vi равно 2 (мы рисуем третий столбец), мы рисуем координату X 36, а не 2 Стоит упомянуть про рендеринг самого прямоугольника То же самое относится и к координате Y.

Позже вы можете попытаться заменить FillRectangle () методом FillOval (). Он работает точно так же, но рисует эллипс. Обязательно попробуйте нарисовать другие фигуры после завершения приложения.

Связать форму с логическим слоем

Основа логики сделана, давайте подключим ее к форме. Перейдите к коду формы и создайте личный экземпляр кинотеатра в классе:

частный киносал киносал = новый киносал ();

Теперь нажмите на событие Paint в PictureBox. Вы должны сделать это с помощью значка вспышки в окне свойств. Событие вызывает систему, когда окно должно быть перерисовано. Это, конечно, тот случай, когда вы запускаете приложение, но также и после восстановления из минимизации, когда мы перемещаемся через окно приложения через другое окно и так далее.

В обработчике событий мы вызываем метод Draw () для экземпляра cinema. Мы видим холст как свойство параметра события. Мы просто передаем это логическому методу, который опирается на него.

private void cinemaPictureBox_Paint (отправитель объекта, PaintEventArgs e) {kinosal.Kykresli (e.Graphics); }

Нам не нужно стыдиться результата

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


Похожие

Ciasta.net - холодный чизкейк с черникой
Нежный и освежающий холодный чизкейк со сливами и желе со вкусом лесных фруктов, на печенье. Сочетание сыра и боровки - отличное сочетание. Я делаю чизкейк из гомогенизированных сырных тортов с ванильным вкусом с добавлением взбитых сливок, сахарной пудры и желатина. Выполнение чизкейка быстрое, я рекомендую его особенно во время жары, когда мы избегаем выпекать пирожные в духовке, может быть, только
Дизайн маленькой ванной - фото уютного и модного интерьера
Небольшая ванная комната в блоке - обычно темная и трудная комната для удобного и функционального устройства. Тем не менее, соответствующий дизайн интерьера позволит вам установить необходимое оборудование в каждой ванной комнате, а продуманная отделка стен поможет вам отрегулировать пропорции. Сегодня мы представляем дизайн маленькой ванной в современной и функциональной квартире. Ванная комната в блоке чаще всего примыкает к кухне,
Amazon Fire HD 10 (2017)
Fire HD 10 выполняет простой план Amazon для его таблетки Как и другие Fires, это недорогой ($ 149,99 с рекламой на экране блокировки) способ потреблять контент Amazon. На первый взгляд, похоже, что Fire HD 8 не является сожжением сарая, но он по-прежнему предлагает много денег. Вы получаете четкий дисплей 1080p, солидную общую производительность и простой в использовании пользовательский интерфейс, включающий родительский
Обзор WD My Cloud Home Duo
Новейшие комплекты WD My Cloud NAS, однодисковый Home и двухдисковый Home Duo - это не просто новые продукты, а новые продукты, ориентированные на простоту использования. С этой целью настройка, управление и просмотр веб-страниц были максимально приближены к знакомым службам онлайн-хранения; то есть, вы входите через веб-портал для настройки, просмотра ваших файлов и настройки устройства. Нам нравится этот подход, и для WD вполне уместно называть My Cloud Home не NAS (сетевое хранилище),
Стильный с раннего возраста
... наты в светлых тонах Украшения для детской комнаты следует подбирать так, чтобы они вдохновляли ребенка, привносили радостное настроение и не перегружали пространство"> Картины и постеры для детской комнаты в светлых тонах Украшения для детской комнаты следует подбирать так, чтобы они вдохновляли ребенка, привносили радостное настроение и не перегружали пространство. Идеи для изображения или плаката обычно должны обсуждаться с ребенком. Наконец должно быть хорошо в вашей
Тест Asus ZenFone 3 5.2 "(ZE520KL): наш полный обзор
После долгого ожидания Asus наконец представила новое поколение ZenFone. ZenFone 3 выпускается во многих версиях, среди которых иногда бывает трудно найти. Классическая модель, ZE520KL, теперь находится в центре внимания. И это, пожалуй, не самое интересное из серии. Видео тест ZenFone 3 Ссылка на YouTube Подписаться на FrAndroid
Создать отзывчивый шаблон рассылки
Напоминание о том, как создать шаблон рассылки новостей Прежде всего, вы должны иметь в виду, что шаблон бюллетеня сделан с таблицами . Эта структура не такая гибкая, как структура сайта (с <div> и <span>), и не позволяет вам использовать веб-библиотеки, такие как: Bootstrap или Jquery. Чтобы получить хороший результат на каждом почтовом клиенте (в основном Outlook), вы должны сделать
Обзор Motorola Moto G 2015: наш полный обзор
введение Нам понравилась и во многом рекомендована самая первая Moto G, а также ее версия 4G, выгодные предложения в удобном для них формате. Их преемник в конце прошлого года, больше, мы оставили на голоде, вина первоначальной версии только 3G на рынке, который все чаще оснащается 4G. В этом году под коленями Lenovo бренд возвращается с новым «большим» Moto G третьего поколения: этот смартфон способен исправлять выстрел? Ответ в нашем тесте. Motorola Moto G 3rd Gen
Xiaomi Mi6 против Xiaomi Mi5. Стоит ли покупать более новую модель?
Год назад Mi5 буквально почищал конкурентов в своем ценовом диапазоне. В этом году Mi6 тоже отличный телефон, но «без эффекта вау». Выгодно ли менять Mi5 на более новую модель? Я сделал это Я провел год с Mi5, а теперь два месяца с Mi6. Используйте мой опыт, чтобы принять лучшее решение. Причина № 1 для покупки более новой версии - улучшенный дизайн. Дизайн полностью изменился. В Mi5 у нас были стеклянные
iPhone 8 и iPhone 8 Plus - Apple представила новые телефоны
... на Apple на первый взгляд напоминают телефоны, представленные 3 года назад. IPhone 8 и iPhone 8 Plus имеют форму, аналогичную iPhone 6. Дьявол, конечно, в деталях. Apple убеждает, что
И как тогда они будут обрабатываться?
В этом году под коленями Lenovo бренд возвращается с новым «большим» Moto G третьего поколения: этот смартфон способен исправлять выстрел?
5. Стоит ли покупать более новую модель?
Выгодно ли менять Mi5 на более новую модель?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью