Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методпособие - версия 1

.pdf
Скачиваний:
7
Добавлен:
02.06.2015
Размер:
1.1 Mб
Скачать

Рис 1.5 - Использование градиентной кисти.

Текстурные кисти (класс TextureBrush) задают заливку с помощью изображения (рис. 1.6). Для создания такой кисти требуется указать изображение, например, загруженное из файла.

TextureBrush br = new TextureBrush( new Bitmap("Chrysanthemum.jpg"));

Рис 1.6 - Использование текстурной кисти

5 Задание цвета

При создании перьев и кистей, а также задании свойств фона, текста и др. может потребоваться указать цвет. За хранение цвета отвечает структура Color. Создать объект этой структуры можно следующими способами:

Выбрать из перечисления;

Color c = Color.Yellow;

Создать цвет по его имени:

Color c = Color.FromName("Red");

Создать цвет по трем составляющим модели RGB (количество красного,

зеленого и синего цвета):

Color c = Color.FromArgb(200,100,0);

Далее можно будет обратиться к свойствам объекта для получения и имени цвета (Name), и каждого из компонентов цвета (R – красный цвет, G – зеленый цвет, B – синий цвет).

6 Диалог. Диалоговые окна

Диалогом называют специальные окна, которые не являются главным окном приложения, вызываются по необходимости (при возникновении определенных событий – выборе пункта меню, нажатии кнопок, нажатии кнопки мыши и т.д.). Эти окна используются для того, чтобы пользователь задавал какие-то данные, выбирал настройки приложения и для других служебных целей. Особенностью диалога является то, что его окно не позволяет переключаться на другие окна приложения, пока пользователь не закроет диалог с помощью кнопок (OK, Отмена, Да, Нет, Повторить, Игнорировать, Прервать и др.). После закрытия диалогового окна можно узнать, по нажатию какой кнопки диалог был завершен.

Диалоговое окно выбора цвета

Диалоги можно создавать самостоятельно в приложении. Для стандартный настроек, которые часто требуется сделать в различных приложениях, в библиотеке языка C# существуют классы для стандартных диалогов. Примером такого диалога является диалог выбора цвета (1.7).

Рис 1.7 - Стандартное окно диалога выбора цвета.

Для вызова такого диалога используется класс ColorDialog. Например, пусть по щелчку мыши на форме требуется вызвать этот диалог и поменять на цвет, выбранный в нем, цвет фона окна. Для этого потребуется создать объект диалога, вызвать его с помощью специальной функции ShowDialog() и, если диалог был закрыт по нажатию

кнопки OK (функция ShowDialog() возвращает значение из перечисления DialogResult со значением соответствующей кнопки), изменить цвет фона на тот цвет, который был выбран (свойство диалога Color).

//создание объекта окна диалога

ColorDialog dlg = new ColorDialog();

//показ диалога на экран и проверка, с помощью какой кнопки он был закрыт if (dlg.ShowDialog() == DialogResult.OK)

//изменение цвета фона путем обращения к цвету, выбранному в диалоге

BackColor = dlg.Color;

Диалоговое окно выбора файл

Другой пример стандартного диалога – диалог открытия (OpenFileDialog) или сохранения (SaveFileDialog) файла. Эти два диалога отличаются только названием кнопки, нажатие которой эквивалентно OK.

Например, такой диалог (рис. 1.8) можно применить для выбора файла-картинки, который должен отобразиться в окне.

Рис 1.8 - Стандартное окно диалога выбора файла

После выбора файла (рис. 1.9).

Рис 1.9 - Загруженное изображение из файла

Сначала, как и в примере в ответе на предыдущий вопрос, создается объектдиалог, производятся его настройки и производится его вызов (обращение к функции ShowDialog()). Вывод изображения будет осуществляться в специальный элемент

управления, который предназначен для просмотра изображений (PictureBox). Для создаваемого PictureBox указываются левый верхний угол (Location), размеры (Size – из ClientSize окна), Image – загруженное изображение из файла, SizeMode – режим показа изображения (центрирование, сжатие и пр.). После задания всех свойств PictureBox он добавляется на форму в коллекцию принадлежащих ей элементов управления Controls.

//создание объекта окна диалога

OpenFileDialog dlg = new OpenFileDialog();

//настройка типов файлов, которые должны отображаться в диалоге

dlg.Filter = "jpg-файлы|*.jpg|gif-файлы|*.gif|png-файлы|*.png|bmp-файлы|*.bmp"; // вызов диалога

if (dlg.ShowDialog() == DialogResult.OK)

{

//создание PictureBox для показа изображения

PictureBox pb = new PictureBox();

//установка левого верхнего угла изображения pb.Location = new Point(0, 0);

//установка размеров изображения pb.Size = ClientSize;

//загрузка изображения из выбранного файла dlg.FileName pb.Image = new Bitmap(dlg.FileName);

//указание, что изображение должно быть масштабировано под размер PictureBox pb.SizeMode = PictureBoxSizeMode.StretchImage;

//добавление PictureBox на форму

Controls.Add(pb);

}

7 Пример использования средств рисования

Далее приведен пример использования различных методов рисования (линии, прямоугольники, эллипсы), а также свойств пера и кисти (рис. 1.10)

Graphics g = this.CreateGraphics();// Создает графический объект и

// связываем его с формой

g.Clear(Color.White) ; // цвет фона задаем белым

// Рисуем линию определенного стиля

Pen pen1 = new Pen(Color.Blue, 3.0f); // создаем перо синего цвета и толщиной 3пик

pen1.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; // задаем стиль

пера

g.DrawLine(pen1, 20,120, 100,60); // рисуем линию

// Рисуем закрашенный красный квадрат

SolidBrush sb1 = new SolidBrush(Color.Red); // задаем заливку g.FillRectangle(sb1, 60, 30, 40, 40); // рисуем закрашенный квадрат

//Рисуем закрашенный прямоугольник и его окантовку

SolidBrush sb2 = new SolidBrush(Color.Yellow); Pen pen2 = new Pen(Color.Aqua, 2.0f);

pen2.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; g.FillRectangle(sb2, 90,40, 60,45); g.DrawRectangle(pen2, 90,40, 60,45);

//Рисуем закрашенный эллипс

System.Drawing.Drawing2D.HatchBrush hb1 = new System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.DiagonalCross, Color.Black, Color.Green);

g.FillEllipse(hb1, 30,100, 65,50);

// Рисуем наклонный эллипс

Pen pen3 = new Pen(Color.Fuchsia, 2.0f);

pen3.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDotDot; g.ResetTransform();

g.RotateTransform(45); g.DrawEllipse(pen3, 70, -10, 100, 50);

Рисунок 1.10 – Результат выполнения программного кода

8 Пример работы

На рисунке 1.3 представлена форма в процессе проектирования, на рисунке 1.4 – форма в процессе выполнения.

Рисунок 1.3 - Форма в процессе проектирования

Рисунок 1.4 - Форма в процессе выполнения

В листинге 1.2 представлены программные коды файла Form1.cs.

Листинг 1.2 - Программные коды файла Form1.cs

public partial class Form1 : Form

{

 

public Form1()

{

InitializeComponent(); }

 

static int a =

40;

 

 

 

// Метод вычисления значений координат

 

private void func(float f, int b, out float x, out float y)

{

x= (float)((a * Math.Pow(Math.Cos(f), 2) - b * Math.Pow(Math.Sin(f), 2)) *

Math.Cos(f));

y= (float)((a * Math.Pow(Math.Cos(f), 2) - b * Math.Pow(Math.Sin(f), 2)) *

Math.Sin(f));

}

private void btnExit_Click(object sender, EventArgs e)

{

Close();

 

}

private void scrb_Scroll(object sender, ScrollEventArgs e) { lblb.Text=String.Concat("b = ", (scrb.Value).ToString());

}

 

 

private void btnDraw_Click(object sender, EventArgs e)

{

int b=scrb.Value;

 

 

float h = 0.05f, k_max = 0, tt, x1, y1, x2, y2;

 

// Определение масштаба

 

 

for(float f=0;f<=2*Math.PI;f=f+h)

{

 

func(f, b, out x2, out y2);

 

 

if(f == 0) k_max=(x2>y2) ? x2 : y2; else {

tt=(x2>y2) ? x2 : y2; k_max=(tt>k_max) ? tt : k_max;

}

}

int pict_size=(pctDraw.Width<pctDraw.Height)? pctDraw.Width : pctDraw.Height;

pict_size/=2;

// Подготовка к рисованию

Graphics g = pctDraw.CreateGraphics(); g.Clear(Color.White) ;

g.ScaleTransform(pict_size/(float)k_max, pict_size/(float)k_max); g.TranslateTransform(pctDraw.Width/2, pctDraw.Height/2,

System.Drawing.Drawing2D.MatrixOrder.Append); Pen p = new Pen(Color.Black);

// Оси координат

g.DrawLine(p, -pctDraw.Width/2, 0, pctDraw.Width/2, 0); g.DrawLine(p, 0, -pctDraw.Height/2, 0, pctDraw.Height/2); // Рисование графика функции

p.Color=Color.Green;

 

func(0, b, out x1, out y1);

 

float xmax=0, ymax=0;

 

for(float f=h;f<=2*Math.PI+h;f=f+h)

{

func(f, b, out x2, out y2);

 

g.DrawLine(p, x1, y1, x2, y2);

 

x1 = x2;

 

y1 = y2;

 

xmax=(x1>xmax) ? x1 : xmax;

 

ymax=(y1>ymax) ? y1 : ymax;

 

}

// Подпись осей координат

g.DrawString( (xmax).ToString(),new System.Drawing.Font("Arial", 8), new SolidBrush(Color.Black), xmax,0);

g.DrawString( (ymax).ToString(),new System.Drawing.Font("Arial", 8), new SolidBrush(Color.Black), 0, -ymax);

}

}