#c# #.net #winforms
#c# #.net #winforms
Вопрос:
private void NewsUpdate()
{
counter = 1;
progressBar1.Value = counter;
int percent = progressBar1.Value;
progressBar1.CreateGraphics().DrawString(
percent.ToString() "%", new Font("Arial", (float)8.25, FontStyle.Regular),
Brushes.Black, new PointF(progressBar1.Width / 2 - 10, progressBar1.Height / 2 - 7));
//progressBar1.Refresh();
label9.Text = counter.ToString();
label9.Visible = true;
if (counter == 10)
{
Extractions();
counter = 0;
}
}
Таким образом, я вижу проценты в середине progressBar1, но они мигают.
Я пытался добавить progressBar1.Refresh(); до и после рисования пытался аннулировать progressBar1, но ничего не помогает, он мигает.
Этот метод NewsUpdate я вызываю его через событие таймера, для которого установлен интервал 1000 мс
Как я могу сделать его плавным, не мигая?
Редактировать
Это то, что я сделал, я добавил событие переопределения OnPaint:
protected override void OnPaint(PaintEventArgs e)
{
int percent = progressBar1.Value = counter;
base.OnPaint(e);
e.Graphics.DrawString(percent.ToString() "%",
SystemFonts.DefaultFont,
Brushes.Black,
new PointF(progressBar1.Width / 2 - (e.Graphics.MeasureString(percent.ToString() "%",
SystemFonts.DefaultFont).Width / 2.0F),
progressBar1.Height / 2 - (e.Graphics.MeasureString(percent.ToString() "%",
SystemFonts.DefaultFont).Height / 2.0F)));
}
В методе, который я обновляю в таймере, я сделал недействительным:
private void NewsUpdate()
{
counter = 1;
this.Invalidate();
Проблема сейчас в том, что я вижу проценты в верхней части form1. Как я могу переместить процент, который будет отображаться на ProgressBar в середине?
Редактировать
Я попробовал это сейчас:
protected override void OnPaint(PaintEventArgs e)
{
int percent = progressBar1.Value = counter;
base.OnPaint(e);
Graphics gr = e.Graphics;
using (gr = progressBar1.CreateGraphics())
{
gr.DrawString(percent.ToString() "%",
SystemFonts.DefaultFont,
Brushes.Black,
new PointF(progressBar1.Width / 2 - (gr.MeasureString(percent.ToString() "%",
SystemFonts.DefaultFont).Width / 2.0F),
progressBar1.Height / 2 - (gr.MeasureString(percent.ToString() "%",
SystemFonts.DefaultFont).Height / 2.0F)));
}
}
Теперь он находится на панели прогресса, но снова мигает. Проценты мигают.
Комментарии:
1. Поместите элемент управления WPF TextBlock (вместо Label) с завершением в процентах вне элемента управления ProgressBar. Rgds,
2. @AlexBell: Он не использует WPF.
3. Вам нужно обработать и отрисовать
Paint
событие.4. Является ли это отображением progressbar?
5. Сара нет. Я создал руководство OnPaint в form1, только что добавил метод с именем OnPain. У ProgressBar нет каких-либо событий paint или onpain. Как я могу создать событие progressBar1 OnPaint ?
Ответ №1:
Если вы установили максимальное значение индикатора выполнения равным 100, вам не нужно вычислять процент от значения progressbar.
private void progressbar1_Paint(object sender, PaintEventArgs e)
{
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
Font font = new Font("Arial", 8.25f, FontStyle.Bold, GraphicsUnit.Point);
RectangleF rf = new RectangleF(0,0,progressbar1.Width, progressbar1.Height);
e.Graphics.DrawString(progressbar1.Value.ToString("# %"), font, Brushes.Black,rf, sf);
}
и место progressbar1.Invalidate()
, где вы обновляете progressbar1.Value
progressbar1.Value = 1;
progressbar1.Invalidate();
Комментарии:
1. У ProgressBar dosent есть событие рисования.