С#. Windows Applications 2 План лекции Типы проектов

Скачать презентацию С#. Windows Applications 2 План лекции Типы проектов Скачать презентацию С#. Windows Applications 2 План лекции Типы проектов

04_c#_windows_applications.ppt

  • Количество слайдов: 29

>С#. Windows Applications С#. Windows Applications

>2 План лекции Типы проектов Организация интерфейса Форма и элементы управления Взаимодействие форм Рисование 2 План лекции Типы проектов Организация интерфейса Форма и элементы управления Взаимодействие форм Рисование в форме Класс Graphics Методы класса Graphics Пример проекта

>3 3

>4 Передача информации между формами Представим себе, что несколько форм должны работать с объектом 4 Передача информации между формами Представим себе, что несколько форм должны работать с объектом класса Books. Пусть в главной форме такой объект объявлен: public Books myBooks; В конструкторе главной формы такой объект создается: myBooks = new Books(max_books); где max_books - заданная константа. Пусть еще в главной форме объявлена форма - объект класса NewBook: public NewBook form2;

>5 Передача информации между формами При создании объекта form2 его конструктору передается ссылка на 5 Передача информации между формами При создании объекта form2 его конструктору передается ссылка на главную форму: form2 = new NewBook(this); Класс NewBook содержит поля: private Form1 mainform; private Books books; а его конструктор следующий код: mainform = form; books = mainform.myBooks;

>6 Передача информации между формами Теперь объекту form2 доступны ранее созданные объекты, задающие книги 6 Передача информации между формами Теперь объекту form2 доступны ранее созданные объекты, задающие книги и главную форму, так что в обработчике события Closed, возникающего при закрытии формы, можно задать код: private void NewBook_Closed(object sender, System.EventArgs e) { mainform.Show(); } открывающий главную форму.

>7 Класс Graphics При рисовании в формах можно объявить в форме поле, описывающее объект 7 Класс Graphics При рисовании в формах можно объявить в форме поле, описывающее объект класса Graphics: Graphics graph; а в конструкторе формы произвести связывание с реальным объектом: graph = CreateGraphics(); Затем всюду в программе, где нужно работать с графикой, используется глобальный для формы объект graph и его методы. Есть другой способ получения этого объекта - обработчики некоторых событий получают объект класса Graphics среди передаваемых им аргументов. Например, в обработчике события Paint, занимающегося перерисовкой, этот объект можно получить так: protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { Graphics gr = e.Graphics; //перерисовка, использующая методы объекта gr }

>8 Методы класса Graphics Для рисования важны три группы методов: DrawString; Draw - DrawEllipse, 8 Методы класса Graphics Для рисования важны три группы методов: DrawString; Draw - DrawEllipse, DrawLine, DrawArc и др.; Fill - FillEllipse, FillPie, FillRectangle и др.;

>9 Класс Pen. Класс Brush Класс Brush является абстрактным классом, так что создавать кисти 9 Класс Pen. Класс Brush Класс Brush является абстрактным классом, так что создавать кисти этого класса нельзя, но можно создавать кисти классов-потомков Brush. Таких классов пять - они задают кисть: SolidBrush - для сплошной закраски области заданным цветом; TextureBrush - для закраски области заданной картинкой (image); HatchBrush - для закраски области предопределенным узором; LinearGradientBrush - для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается линейным градиентом; PathGradientBrush - для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается более сложным путем. Первые два класса кистей находятся в пространстве имен System.Drawing, остальные - в System.Drawing.Drawing2D.

>10 Пример проекта Построим проект для рисования в формах. В одной из форм будем 10 Пример проекта Построим проект для рисования в формах. В одной из форм будем рисовать пером, в другом - кистями различного типа. Главную форму сделаем простой кнопочной формой. Вот как она выглядит.

>11 Пример проекта Построим проект для рисования в формах. В одной из форм будем 11 Пример проекта Построим проект для рисования в формах. В одной из форм будем рисовать пером, в другом - кистями различного типа. Главную форму сделаем простой кнопочной формой. Вот как она выглядит. Выбор соответствующей командной кнопки открывает форму для рисования пером или кистью.

>12 Пример. Кривые Безье. Окно формы 12 Пример. Кривые Безье. Окно формы

>13 Пример. Паутина Безье //fields Point center; Point[] points = new Point[10]; Pen pen; 13 Пример. Паутина Безье //fields Point center; Point[] points = new Point[10]; Pen pen; Graphics graph; int count; }

>14 Пример. Паутина Безье void MyInit() { int cx = ClientSize.Width; int cy = 14 Пример. Паутина Безье void MyInit() { int cx = ClientSize.Width; int cy = ClientSize.Height; points[0] = new Point(0,0); points[1] = new Point(cx/2,0); points[2] = new Point(cx,0); points[3] = new Point(0,cy/2); points[4] = new Point(cx,cy/2); points[5] = new Point(0,cy); points[6] = new Point(cx/2,cy); points[7] = new Point(cx,cy); points[8] = new Point(0,0); points[9] = new Point(cx/2,0); graph = this.CreateGraphics(); center = new Point(cx/2,cy/2); count =1; }

>15 Пример. Паутина Безье void DrawWeb() { for (int i = 0; i<8; i++) 15 Пример. Паутина Безье void DrawWeb() { for (int i = 0; i<8; i++) graph.DrawBezier(pen,center,points[i],points[i+2], points[i+1]); }

>16 Пример. Паутина Безье private void BezierWeb_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { pen = SystemPens.Control; 16 Пример. Паутина Безье private void BezierWeb_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { pen = SystemPens.Control; DrawWeb(); center.X = e.X; center.Y = e.Y; //pen = new Pen(Color.Aquamarine); pen = SystemPens.ControlText; DrawWeb(); }

>17 Пример. Событие Paint protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { pen = SystemPens.ControlText; DrawWeb(); 17 Пример. Событие Paint protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { pen = SystemPens.ControlText; DrawWeb(); //Debug.WriteLine(count++); }

>18 Пример. Кривые Безье. Окно формы 18 Пример. Кривые Безье. Окно формы

>19 Пример. Рисование кистью 19 Пример. Рисование кистью

>20 Пример. Рисование кистью //fields int cx,cy; Graphics graph; Brush brush; Color color; Random 20 Пример. Рисование кистью //fields int cx,cy; Graphics graph; Brush brush; Color color; Random rnd;

>21 Пример. Рисование кистью void MyInit() { cx = ClientSize.Width; cy = ClientSize.Height; graph 21 Пример. Рисование кистью void MyInit() { cx = ClientSize.Width; cy = ClientSize.Height; graph = CreateGraphics(); rnd = new Random(); }

>22 Пример. Рисование кистью void DrawShapes() { for(int i=0; i<3; i++) { //выбирается цвет 22 Пример. Рисование кистью void DrawShapes() { for(int i=0; i<3; i++) { //выбирается цвет - красный, желтый, голубой int numcolor = rnd.Next(3); switch (numcolor) { case 0: color = Color.Blue; break; case 1: color = Color.Yellow; break; case 2: color = Color.Red; break; }

>23 Пример. Рисование кистью //градиентной кистью рисуется эллипс, //местоположение случайно Point top = new 23 Пример. Рисование кистью //градиентной кистью рисуется эллипс, //местоположение случайно Point top = new Point(rnd.Next(cx), rnd.Next(cy)); Size sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y)); Rectangle rct = new Rectangle(top, sz); Point bottom = top + sz; brush = new LinearGradientBrush(top, bottom, Color.White,color); graph.FillEllipse(brush,rct);

>24 Пример. Рисование кистью //сплошной кистью рисуется сектор, //местоположение случайно top = new Point(rnd.Next(cx), 24 Пример. Рисование кистью //сплошной кистью рисуется сектор, //местоположение случайно top = new Point(rnd.Next(cx), rnd.Next(cy)); sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y)); rct = new Rectangle(top, sz); brush = new SolidBrush(color); graph.FillPie(brush,rct,30f,60f);

>25 Пример. Рисование кистью //узорной кистью рисуется прямоугольник, //местоположение случайно top = new Point(rnd.Next(cx), 25 Пример. Рисование кистью //узорной кистью рисуется прямоугольник, //местоположение случайно top = new Point(rnd.Next(cx), rnd.Next(cy)); sz = new Size(rnd.Next(cx-top.X), rnd.Next(cy-top.Y)); rct = new Rectangle(top, sz); HatchStyle hs = (HatchStyle)rnd.Next(52); brush = new HatchBrush(hs,Color.White, Color.Black); graph.FillRectangle(brush,rct); } }

>26 Пример. Рисование кистью Вызов метода DrawShapes, как уже говорилось, встроим в обработчик события 26 Пример. Рисование кистью Вызов метода DrawShapes, как уже говорилось, встроим в обработчик события Click формы RandomShapes: private void RandomShapes_Click(object sender, System.EventArgs e) { DrawShapes(); }

>27 Пример. Рисование кистью 27 Пример. Рисование кистью

>28 Вопросы ? ? ? 28 Вопросы ? ? ?

>29 План лекции Типы проектов Организация интерфейса Форма и элементы управления Взаимодействие форм Образцы 29 План лекции Типы проектов Организация интерфейса Форма и элементы управления Взаимодействие форм Образцы форм Работа со списками Наследование форм Организация меню в формах Создание инструментальной панели с командными кнопками Рисование в форме Класс Graphics Методы класса Graphics Пример проекта