С#. Windows Applications 2 План лекции Типы проектов
04_c#_windows_applications.ppt
- Количество слайдов: 29
С#. Windows Applications
2 План лекции Типы проектов Организация интерфейса Форма и элементы управления Взаимодействие форм Рисование в форме Класс Graphics Методы класса Graphics Пример проекта
3
4 Передача информации между формами Представим себе, что несколько форм должны работать с объектом класса Books. Пусть в главной форме такой объект объявлен: public Books myBooks; В конструкторе главной формы такой объект создается: myBooks = new Books(max_books); где max_books - заданная константа. Пусть еще в главной форме объявлена форма - объект класса NewBook: public NewBook form2;
5 Передача информации между формами При создании объекта form2 его конструктору передается ссылка на главную форму: form2 = new NewBook(this); Класс NewBook содержит поля: private Form1 mainform; private Books books; а его конструктор следующий код: mainform = form; books = mainform.myBooks;
6 Передача информации между формами Теперь объекту form2 доступны ранее созданные объекты, задающие книги и главную форму, так что в обработчике события Closed, возникающего при закрытии формы, можно задать код: private void NewBook_Closed(object sender, System.EventArgs e) { mainform.Show(); } открывающий главную форму.
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, DrawLine, DrawArc и др.; Fill - FillEllipse, FillPie, FillRectangle и др.;
9 Класс Pen. Класс Brush Класс Brush является абстрактным классом, так что создавать кисти этого класса нельзя, но можно создавать кисти классов-потомков Brush. Таких классов пять - они задают кисть: SolidBrush - для сплошной закраски области заданным цветом; TextureBrush - для закраски области заданной картинкой (image); HatchBrush - для закраски области предопределенным узором; LinearGradientBrush - для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается линейным градиентом; PathGradientBrush - для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается более сложным путем. Первые два класса кистей находятся в пространстве имен System.Drawing, остальные - в System.Drawing.Drawing2D.
10 Пример проекта Построим проект для рисования в формах. В одной из форм будем рисовать пером, в другом - кистями различного типа. Главную форму сделаем простой кнопочной формой. Вот как она выглядит.
11 Пример проекта Построим проект для рисования в формах. В одной из форм будем рисовать пером, в другом - кистями различного типа. Главную форму сделаем простой кнопочной формой. Вот как она выглядит. Выбор соответствующей командной кнопки открывает форму для рисования пером или кистью.
12 Пример. Кривые Безье. Окно формы
13 Пример. Паутина Безье //fields Point center; Point[] points = new Point[10]; Pen pen; Graphics graph; int count; }
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++) 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; 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(); //Debug.WriteLine(count++); }
18 Пример. Кривые Безье. Окно формы
19 Пример. Рисование кистью
20 Пример. Рисование кистью //fields int cx,cy; Graphics graph; Brush brush; Color color; Random rnd;
21 Пример. Рисование кистью void MyInit() { cx = ClientSize.Width; cy = ClientSize.Height; graph = CreateGraphics(); rnd = new Random(); }
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 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), 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), 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, как уже говорилось, встроим в обработчик события Click формы RandomShapes: private void RandomShapes_Click(object sender, System.EventArgs e) { DrawShapes(); }
27 Пример. Рисование кистью
28 Вопросы ? ? ?
29 План лекции Типы проектов Организация интерфейса Форма и элементы управления Взаимодействие форм Образцы форм Работа со списками Наследование форм Организация меню в формах Создание инструментальной панели с командными кнопками Рисование в форме Класс Graphics Методы класса Graphics Пример проекта