04_C#_Windows Applications.ppt
- Количество слайдов: 29
С#. Windows Applications 04. C#. Windows Applications
План лекции Типы проектов q Организация интерфейса q Форма и элементы управления q Взаимодействие форм q Рисование в форме q Класс Graphics q Методы класса Graphics q Пример проекта q 04. C#. Windows Applications 2
04. C#. Windows Applications 3
Передача информации между формами Представим себе, что несколько форм должны работать с объектом класса Books. Пусть в главной форме такой объект объявлен: public Books my. Books; В конструкторе главной формы такой объект создается: my. Books = new Books(max_books); где max_books - заданная константа. Пусть еще в главной форме объявлена форма - объект класса New. Book: public New. Book form 2; 04. C#. Windows Applications 4
Передача информации между формами При создании объекта form 2 его конструктору передается ссылка на главную форму: form 2 = new New. Book(this); Класс New. Book содержит поля: private Form 1 mainform; private Books books; а его конструктор следующий код: mainform = form; books = mainform. my. Books; 04. C#. Windows Applications 5
Передача информации между формами Теперь объекту form 2 доступны ранее созданные объекты, задающие книги и главную форму, так что в обработчике события Closed, возникающего при закрытии формы, можно задать код: private void New. Book_Closed(object sender, System. Event. Args e) { mainform. Show(); } открывающий главную форму. 04. C#. Windows Applications 6
Класс Graphics При рисовании в формах можно объявить в форме поле, описывающее объект класса Graphics: Graphics graph; а в конструкторе формы произвести связывание с реальным объектом: graph = Create. Graphics(); Затем всюду в программе, где нужно работать с графикой, используется глобальный для формы объект graph и его методы. Есть другой способ получения этого объекта - обработчики некоторых событий получают объект класса Graphics среди передаваемых им аргументов. Например, в обработчике события Paint, занимающегося перерисовкой, этот объект можно получить так: protected override void On. Paint(System. Windows. Forms. Paint. Event. Args e) { Graphics gr = e. Graphics; //перерисовка, использующая методы объекта gr } 04. C#. Windows Applications 7
Методы класса Graphics Для рисования важны три группы методов: q Draw. String; q Draw - Draw. Ellipse, Draw. Line, Draw. Arc и др. ; q Fill - Fill. Ellipse, Fill. Pie, Fill. Rectangle и др. ; 04. C#. Windows Applications 8
Класс Pen. Класс Brush является абстрактным классом, так что создавать кисти этого класса нельзя, но можно создавать кисти классов-потомков Brush. Таких классов пять - они задают кисть: Solid. Brush - для сплошной закраски области заданным цветом; Texture. Brush - для закраски области заданной картинкой (image); Hatch. Brush - для закраски области предопределенным узором; Linear. Gradient. Brush - для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается линейным градиентом; Path. Gradient. Brush - для сплошной закраски с переходом от одного цвета к другому, где изменение оттенков задается более сложным путем. Первые два класса кистей находятся в пространстве имен System. Drawing, остальные - в System. Drawing 2 D. 04. C#. Windows Applications 9
Пример проекта Построим проект для рисования в формах. В одной из форм будем рисовать пером, в другом - кистями различного типа. Главную форму сделаем простой кнопочной формой. Вот как она выглядит. 04. C#. Windows Applications 10
Пример проекта Построим проект для рисования в формах. В одной из форм будем рисовать пером, в другом - кистями различного типа. Главную форму сделаем простой кнопочной формой. Вот как она выглядит. Выбор соответствующей командной кнопки открывает форму для рисования пером или кистью. 04. C#. Windows Applications 11
Пример. Кривые Безье. Окно формы 04. C#. Windows Applications 12
Пример. Паутина Безье //fields Point center; Point[] points = new Point[10]; Pen pen; Graphics graph; int count; } 04. C#. Windows Applications 13
Пример. Паутина Безье void My. Init() { int cx = Client. Size. Width; int cy = Client. Size. 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. Create. Graphics(); center = new Point(cx/2, cy/2); count =1; } 04. C#. Windows Applications 14
Пример. Паутина Безье void Draw. Web() { for (int i = 0; i<8; i++) graph. Draw. Bezier(pen, center, points[i], points[i+2], points[i+1]); } 04. C#. Windows Applications 15
Пример. Паутина Безье private void Bezier. Web_Mouse. Move(object sender, System. Windows. Forms. Mouse. Event. Args e) { pen = System. Pens. Control; Draw. Web(); center. X = e. X; center. Y = e. Y; //pen = new Pen(Color. Aquamarine); pen = System. Pens. Control. Text; Draw. Web(); } 04. C#. Windows Applications 16
Пример. Событие Paint protected override void On. Paint(System. Windows. Forms. Paint. Event. Args e) { pen = System. Pens. Control. Text; Draw. Web(); //Debug. Write. Line(count++); } 04. C#. Windows Applications 17
Пример. Кривые Безье. Окно формы 04. C#. Windows Applications 18
Пример. Рисование кистью 04. C#. Windows Applications 19
Пример. Рисование кистью //fields int cx, cy; Graphics graph; Brush brush; Color color; Random rnd; 04. C#. Windows Applications 20
Пример. Рисование кистью void My. Init() { cx = Client. Size. Width; cy = Client. Size. Height; graph = Create. Graphics(); rnd = new Random(); } 04. C#. Windows Applications 21
Пример. Рисование кистью void Draw. Shapes() { 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; } 04. C#. Windows Applications 22
Пример. Рисование кистью //градиентной кистью рисуется эллипс, //местоположение случайно 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 Linear. Gradient. Brush(top, bottom, Color. White, color); graph. Fill. Ellipse(brush, rct); 04. C#. Windows Applications 23
Пример. Рисование кистью //сплошной кистью рисуется сектор, //местоположение случайно 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 Solid. Brush(color); graph. Fill. Pie(brush, rct, 30 f, 60 f); 04. C#. Windows Applications 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); Hatch. Style hs = (Hatch. Style)rnd. Next(52); brush = new Hatch. Brush(hs, Color. White, Color. Black); graph. Fill. Rectangle(brush, rct); } } 04. C#. Windows Applications 25
Пример. Рисование кистью Вызов метода Draw. Shapes, как уже говорилось, встроим в обработчик события Click формы Random. Shapes: private void Random. Shapes_Click(object sender, System. Event. Args e) { Draw. Shapes(); } 04. C#. Windows Applications 26
Пример. Рисование кистью 04. C#. Windows Applications 27
Вопросы ? ? ? 04. C#. Windows Applications 28
План лекции q q q q Типы проектов Организация интерфейса Форма и элементы управления Взаимодействие форм Образцы форм Работа со списками Наследование форм Организация меню в формах Создание инструментальной панели с командными кнопками Рисование в форме Класс Graphics Методы класса Graphics Пример проекта 04. C#. Windows Applications 29


