Лабораторная работа №4 С#

  • Лабораторные работы
  • docx
  • 04.04.2018
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Реализуем методы рисования, для реализованных классов. Если классы создавались в консольном приложении, то их необходимо перенести в приложение типа Windows Forms (WF). Благодаря тому, что каждый файл реализован в отдельном файле и как независимая сущность, то процесс переноса будет заключаться лишь в импорте данных файлов новый проект. Создадим новое приложение WF. В окне обозревателя решений, нажимаем правой кнопкой на название нашего проекта (выделено жирным), выбираем пункт Добавить-Существующий элемент. В открывшемся окне выбираем все реализованные в предыдущих работах классы (файлы с расширением .cs , кроме файла program.cs) и нажимаем Добавить. Откроем любой из файлов фигур, нажмем правой кнопкой на название его пространства имен и выберем пункт Переименовать.
Иконка файла материала Лабораторная работа №4.docx
Лабораторная работа №4. Реализуем методы рисования, для реализованных классов. Если классы создавались в консольном приложении, то их необходимо перенести в приложение типа Windows Forms (WF). Благодаря тому, что каждый файл реализован в отдельном файле и как независимая сущность, то процесс переноса будет заключаться лишь в импорте данных файлов новый проект. Создадим новое приложение WF. В окне обозревателя решений, нажимаем правой кнопкой на название нашего проекта (выделено жирным), выбираем пункт Добавить-Существующий элемент. В открывшемся окне выбираем все реализованные в предыдущих работах классы (файлы с расширением .cs , кроме файла program.cs) и нажимаем Добавить. Откроем любой из файлов фигур, нажмем правой кнопкой на название его пространства имен и выберем пункт Переименовать. Изменим данное имя, на имя пространства имен созданного приложения и нажмем кнопка Применить. (Если не менять имя проекта при его создании, то пространство имен проекта будет WindowsFormsApplication1). Таким образом, мы изменим пространство имен не только в этом файле, но и во всех других импортированных файлах. После этого данные классы можно использовать в новом проекте. Наша задача, реализовать метод рисования каждой фигуры. Для рисования на форме, используется специальный класс graphics, в котором реализованы функции рисования основных фигур. Для того, чтобы правильно реализовать данный метод рисования, нужно правильно продумать бедующую структуру и возможности разрабатываемого приложения. В нашем случае речь идет о рисовании статистических графиков, а значит помимо самого рисования необходимых фигур, нам необходимо иметь возможность создавать цвета заливки и обводки фигур, а также иметь какие-то дополнительные поля, которые будут привязываться к отображаемому цифровому значению. Мы можем добавить все эти дополнительные свойства в каждый класс, однако это приведет к тому, что при необходимости добавить еще одно дополнительное свойство, либо при исправлении допущенных ошибок, нам необходимо будет эти действия проводить для каждого класса. Это приведет к запутыванию кода и увеличению времени его поддержки. Данную проблему можно решить, создав еще один класс «Базовая фигура». Данный класс не будет являться фигурой как таковой (а значит мы не должны иметь возможность ее создать), однако он будет содержать набор всех свойств и методов, которые присуще каждой фигуре.Добавим класс basefigure и сделаем его абстрактным. Так же перечислим в нем такие свойства, как цвет заливки, цвет обводки, значения и метод рисования, который будет переопределяться для каждой фигуры. abstract class basefigure { public Color fill = Color.Yellow; public Color stroke = Color.Black; public Double value = 0; public virtual void draw (Graphics g){} } Приписка abstract, говорит о том, что мы не можем создать объект данного класса. Приписка virtual у функции, говорит о том, что данную функцию, можно будет переопределить в классах наследниках. В данном классе используется класс Color и Graphics, которые хранятся в не подключаемом по умолчанию пространстве имен. Для того, чтобы иметь возможность использовать данные классы, необходимо добавить строчку: using System.Drawing; в блок подключения пространств имен (в самое начало файла класса). Для того, чтобы данные свойства получили, наши реализованные классы фигур, необходимо унаследовать их от класса basefigure, причем наследовать нужно классы, которые не наследуются от других фигур (например, будет наследоваться класс прямоугольник, но не будет наследоваться класс квадрат, так как он наследуется от класса прямоугольник, а значит и от всех классов, от которых он наследуется) Реализму метод рисования для линии. class Line : basefigure { public Point start; public Point end; public bool IsPointOnLine (Point p) { return (double)(p.x - start.x) / (end.x - start.x) == (double)(p.y - start.y) / (end.y - start.y); } public override void draw(Graphics g) { g.DrawLine(new Pen(this.stroke), new PointF(this.start.x, this.start.y), new PointF(this.end.x, this.end.y)); } public Line(Point start, Point end) { this.start = start; this.end = end; } }Добавим на нашу форму элемент Picturebox и ставим ему значение свойства dock=fill. Создадим событие загрузки формы, щелкнув 2 раза по заголовку окна формы в конструкторе. В данном событии нарисуем линию, которая будет проходить от верхнего левого угла, до правого нижнего. private void Form1_Load(object sender, EventArgs e) { pictureBox1.Image = new Bitmap(Width, Height); Graphics g = Graphics.FromImage(pictureBox1.Image); Line l = new Line(new Point(0, 0), new Point(Width, Height - 30)); l.draw(g); } Примечание: вычитать 30 из координаты «у» у точки правого нижнего угла необходимо, из-за того, что высота формы высчитывается с учетом заголовка окна, высота которого равна 30 пикселям. Задание: 1. Реализовать методы рисования для оставшихся объектов. 2. Проверить реализацию, выведя на экран все фигуры.