Управляемое заполнение фигур

 

Листинг 57.1. Метод для элемента управления PictureBox.

//Объявляем глобальную переменную filled_height

//для текущей высоты заполнения фигуры и приравниваем нулю:

int filled_height = 0;

private void pictureBox1_Paint(object sender,

PaintEventArgs e)

{

//Задаем стиль и цвет заполняющих элементов:

HatchBrush myHatchBrush =

new HatchBrush(HatchStyle.Cross, Color.Blue);

//Объявляем объект класса Graphics

//и задаем ему свойство Graphics:

Graphics myGraphics = e.Graphics;

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

//на текущую высоту filled_height:

myGraphics.FillRectangle(myHatchBrush, 0, 0,

pictureBox1.Size.Width, filled_height);

//Увеличиваем текущую высоту заполнения

//на следующий шаг progressBar1.Step:

filled_height = filled_height + progressBar1.Step;

}

Дадим краткие пояснения. В главной строке кода:

myGraphics.FillRectangle(myHatchBrush, 0, 0,

pictureBox1.Size.Width, filled_height);

нули (0, 0) соответствуют координатам верхнего левого угла, а последние два параметра (pictureBox1.Size.Width, filled_height) соответствуют ширине и высоте заполняемого прямоугольника в виде элемента управления PictureBox.

Чтобы установить значение свойства Interval компонента Timer в зависимости от свойства Value ползунка элемента управления TrackBar, дважды щелкаем элемент управления TrackBar в режиме проектирования. Появляется файл Form11.cs с шаблоном, который после записи нашего кода принимает такой вид.

Листинг 57.2. Метод для элемента управления TrackBar.

private void trackBar1_Scroll(object sender, EventArgs e)

{

timer1.Enabled = true;

timer1.Interval = trackBar1.Value;

}

Чтобы подключить к работе таймер, дважды щелкаем значок для компонента Timer (ниже формы в режиме проектирования). Появляется файл Form11.cs с шаблоном, который после записи нашего кода принимает следующий вид.

Листинг 57.3. Метод для компонента Timer.

private void timer1_Tick(object sender, EventArgs e)

{

//Задаем максимальное значение progressBar1.Maximum

//индикатора процесса,

//равное высоте заполняемой панели picturebox1.Height:

progressBar1.Maximum = pictureBox1.Height;

//Если текущее значение Value индикатора

//стало больше максимального значения:

if (progressBar1.Value >= progressBar1.Maximum)

{

//отключаем таймер:

timer1.Enabled = false;

}

else

{

//Увеличиваем текущее значение Value индикатора

//на величину шага Step:

progressBar1.PerformStep();

//Перерисовываем клиентскую область

//элемента управления PictureBox

//через каждый Interval времени:

pictureBox1.Refresh();

}

}

В качестве следующего примера из списка методов класса Graphics (рис. 57.1) выберем второй метод FillEllipse для заполнения фигуры в виде эллипса. На листинге 57.1 заменим одну строку кода (с методом FillRectangle) на строку кода с методом FillEllipse:

myGraphics.FillEllipse(myHatchBrush, 0, 0, -

picturebox1.Size.Width, filled_height);

На листинге 57.1 заменим одну строку кода (с методом FillRectangle) на строку кода с методом FillPie:

myGraphics.FillPie(myHatchBrush, 0, 0,

pictureBox1.Size.Width, pictureBox1.Size.Height –

progressBar1.Height, 0, filled_height);

Если строку кода с методом FillPie записать в таком виде:

myGraphics.FillPie(myHatchBrush, 0, 0,

pictureBox1.Size.Height, pictureBox1.Size.Height –

ProgressBar1.Height, 0, filled_height);

то получим частный случай заполнения сектора в круге (рис. 57.7).

Предлагаю ознакомиться с аналогичными статьями: