Я пытаюсь заставить пользовательский контроль действовать как индикатор выполнения.Насколько я знаю, мне нужно нарисовать новый столбец поверх старого и увеличить его размер в соответствии с процентом завершения.У меня есть следующий код, но, к сожалению, зеленая полоса на 100%, хотя я установил процентное свойство на 0%, когда элемент управления инициализирован.Я предполагаю, что сделал глупый недосмотр, но я не могу видеть это, любая помощь будет оценена.Спасибо.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace CustomPbar
{
public partial class Pbar : UserControl
{
private int PercentageValue;
public int Percentage
{
get { return PercentageValue;}
set
{
PercentageValue = value;
this.Invalidate();
}
}
public Pbar()
{
InitializeComponent();
Percentage = 0;
using(GraphicsPath path = new GraphicsPath())
{
path.StartFigure();
// top left arc
path.AddArc(0, 0, (10), (10), 180, 90);
//rect, 180, 90);
// top right arc
path.AddArc(((this.Width) - (10)), 0, (10), (10), 270, 90);
// bottom right arc
path.AddArc(((this.Width) - (10)), ((this.Height) - (10)), (10), (10), 0, 90);
// bottom left arc
path.AddArc(0, ((this.Height) - (10)), (10), (10), 90, 90);
path.CloseFigure();
this.Region = new Region(path);
this.BackColor = SystemColors.ControlLight;
this.BackgroundImage = new Bitmap(@"c:\users\FrazMan\Desktop\pb1.bmp");
this.BackgroundImageLayout = ImageLayout.Stretch;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Rectangle rect = new Rectangle(0, 0, ((this.Width)*((Percentage)/100)), this.Height);
using (GraphicsPath gp = new GraphicsPath())
{
gp.StartFigure();
// top left arc
gp.AddArc(0, 0, (10), (10), 180, 90);
// top right arc
gp.AddArc(((rect.Width) - (10)), 0, (10), (10), 270, 90);
// bottom right arc
gp.AddArc(((rect.Width) - (10)), ((rect.Height) - (10)), (10), (10), 0, 90);
// bottom left arc
gp.AddArc(0, ((rect.Height) - (10)), (10), (10), 90, 90);
gp.CloseFigure();
SolidBrush greenBrush = new SolidBrush(Color.Green);
e.Graphics.FillPath(greenBrush, gp);
greenBrush.Dispose();
}
using(Graphics Draw = this.CreateGraphics())
{
Draw.DrawString(Percentage.ToString() + "%", ProgressBar.DefaultFont, Brushes.Black, new PointF((this.Width / 2) - ((Draw.MeasureString(Percentage.ToString() + "%", ProgressBar.DefaultFont)).Width / 2.0F),
(this.Height / 2) - ((Draw.MeasureString(Percentage.ToString() + "%", ProgressBar.DefaultFont)).Height / 2.0F)));
}
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
this.Refresh();
}
}
}