Управляемое заполнение фигур
Листинг 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).