Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный_практикум.doc
Скачиваний:
74
Добавлен:
15.11.2019
Размер:
45.35 Mб
Скачать

5. Модификация приложения Windows Forms: вкладка «Объекты и градиент»

Теперь поработаем с градиентами более с более близкого расстояния. Редактируем вторую вкладку tabPage2 следующим образом:

TabPage:

Text:

Объекты и градиент

Cursor:

Hand

Рис. 5. 1. Редактор коллекции TabPage: меняем Text и Cursor

На второй вкладке разместим сначала элемент Panel ( , группа «Контейнеры» панели элементов), а затем три кнопки. Свойства всего этого дела (имена элементов не трогаем):

Panel:

(Name):

panel1

BackColor:

Black

AutoScroll:

True

Button:

(Name):

button1

Text:

Прямоугольник

Button:

(Name):

Button2

Text:

Треугольник

Button:

(Name):

Button3

Text:

Круг

Расстановка элементов выглядит примерно так:

Рис. 5. 2. Модифицированная форма приложения и расстановка необходимых элементов управления на второй вкладке

Кнопки находятся внутри элемента Panel (поверх).

Открываем код нашей формы LWP19Main (файл LWP19Main.cs). Ищем:

public LWP19Main()

{

InitializeComponent();

Добавляем после:

DoubleBuffered = true;

Ищем:

public partial class LWP19Main : Form

{

Добавляем после:

// Начало: вкладка "Объекты и градиент"

// Для работы с появлением/скрытием фигур

bool bDrawFigure1 = false;

bool bDrawFigure2 = false;

bool bDrawFigure3 = false;

// Создаём цвета

Color c1 = Color.FromArgb(51, 204, 51);

Color c2 = Color.FromName("Green");

Color c3 = Color.FromArgb(0, 0, 0);

Color c4 = Color.FromArgb(51, 104, 51);

// Конец: вкладка "Объекты и градиент"

Инициализируем событие Paint для элемента Panel второй вкладки:

private void panel1_Paint(object sender, PaintEventArgs e)

{

Graphics g = panel1.CreateGraphics();

// Задаём визуализацию со сглаживанием для объекта Graphics

g.SmoothingMode = SmoothingMode.HighQuality;

// Массив точек треугольника

Point[] triangle = { new Point(80, 150), new Point(200, 50), new Point(320, 150) };

// Задаём перья с цветами c1 и c2 и толщиной в 1 пиксель

Pen pen1 = new Pen(c1, 1);

Pen pen2 = new Pen(c2, 1);

// Заливка и цвета градиента

Brush brush1 = new LinearGradientBrush(triangle[0], triangle[2], c1, c4);

Brush brush2 = new LinearGradientBrush(triangle[0], triangle[2], c3, c2);

if (bDrawFigure1)

{

// Заливаем цветом прямоугольник

g.FillRectangle(brush2, new Rectangle(100, 150, 200, 100));

}

if (bDrawFigure2)

{

// Заливаем цветом треугольник

g.FillPolygon(brush2, triangle);

}

if (bDrawFigure3)

{

// Заливаем цветом эллипс

g.FillEllipse(brush1, new Rectangle(175, 175, 50, 50));

}

}

И последовательно инициализируем двойным нажатием события каждой кнопки. Событие Click для каждой из кнопок будет таким:

private void button1_Click(object sender, EventArgs e)

{

if (bDrawFigure1 == true) { bDrawFigure1 = false; }

else bDrawFigure1 = true;

panel1.Invalidate();

}

private void button2_Click(object sender, EventArgs e)

{

if (bDrawFigure2 == true) { bDrawFigure2 = false; }

else bDrawFigure2 = true;

panel1.Invalidate();

}

private void button3_Click(object sender, EventArgs e)

{

if (bDrawFigure3 == true) { bDrawFigure3 = false; }

else bDrawFigure3 = true;

panel1.Invalidate();

}

Компилируем (Debug) и запускаем. Переходим на закладку «Объекты и градиент» и нажимаем на кнопочки... Любуемся, как появляется «домик» с круглым окном...