Отображение текста на ProgressBar в C#
Было бы неплохо, если бы вы могли отобразить сообщение о ходе работы над ProgressBar. К сожалению, вы не можете этого сделать. Вы даже не можете помещать ярлык над ProgressBar, не закрывая его, чтобы вы не могли видеть прогресс.
Простым обходным путем является отображение прогресса в PictureBox. Затем вы можете нарисовать любой текст или другую информацию, которая вам нравится, на PictureBox.
В этом примере используется следующий код для отслеживания прогресса.
private int ProgressMinimum = 0; private int ProgressMaximum = 100; private int ProgressValue = 0; private void btnGo_Click(object sender, EventArgs e) { ProgressValue = 0; picProgress.Refresh(); tmrWork.Enabled = true; } private void tmrWork_Tick(object sender, EventArgs e) { ProgressValue += 4; if (ProgressValue > ProgressMaximum) { ProgressValue = 0; tmrWork.Enabled = false; } picProgress.Refresh(); }
Переменные ProgressMinimum, ProgressMaximum и ProgressValue дают минимальное, максимальное и текущее значение прогресса. В этом примере диапазон значений составляет от 0 до 100.
Когда вы нажимаете кнопку «Перейти», программа устанавливает значение в 0 и обновляет PictureBox, чтобы сделать ее самой. Это описано коротко. Затем он включает управление tmrWork Timer.
Когда таймер гаснет, программа добавляет 4 к текущему значению. Если значение больше максимального значения, программа сбрасывает значение до 0 и отключает таймер. Если значение больше максимального или нет, программа затем обновляет PictureBox, что делает следующий код выполненным.
// Покажите ход выполнения. private void picProgress_Paint(object sender, PaintEventArgs e) { // Очистите фон. e.Graphics.Clear(picProgress.BackColor); // Нарисуем индикатор выполнения. float fraction = (float)(ProgressValue - ProgressMinimum) / (ProgressMaximum - ProgressMinimum); int wid = (int)(fraction * picProgress.ClientSize.Width); e.Graphics.FillRectangle( Brushes.LightGreen, 0, 0, wid, picProgress.ClientSize.Height); // Рисуем текст. e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; using (StringFormat sf = new StringFormat()) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; int percent = (int)(fraction * 100); e.Graphics.DrawString( percent.ToString() + "%", this.Font, Brushes.Black, picProgress.ClientRectangle, sf); } }
Этот код сначала очищает PictureBox цветом фона. Затем он вычисляет долю элемента управления, который должен быть окрашен, чтобы указать текущий прогресс. Он использует фракцию для вычисления ширины, которая должна быть окрашена, и затем заполняет эту часть элемента светло-зеленым.
Далее код создает объект StringFormat для центрирования текста по вертикали и по горизонтали. Он преобразует долю прогресса в проценты и направляет ее по центру.