現在、スマート デバイス プロジェクトで湾曲したプログレス バーに取り組んでいます。OnPaint 関数をオーバーライドします。
Override OnPaint() 関数では、カーブしたプログレス バーを濃い灰色で描画し、プログレス バーの変化する値 (30% など) を反映するために、プログレス バーの一部を黄色で描画します。ただし、値が連続的に変化している場合、進行状況バーの色の一部が黄色に変化することがわかります。ただし、湾曲したプログレス バー自体も再描画されます。値が変化している間に元の湾曲したプログレスバーを再描画しないようにする方法を知っている人はいますか? そのため、値が変更されている場合、プログレス バーの一部のみが黄色で再描画され、元のグレーのプログレス バーは再描画されません。OnPaint関数で使用するコードは次のとおりです。
protected override void OnPaint(PaintEventArgs e)
{
gx = e.Graphics;
// Draw the original curved progress bar
int intPosition1 = m_NumberOfSpoke;
for (int intCounter1 = 0; intCounter1 < m_NumberOfSpoke; intCounter1++)
{
intPosition1 = intPosition1 % m_NumberOfSpoke;
DrawLine(e.Graphics,
GetCoordinate(m_CenterPoint, m_InnerCircleRadius, m_Angles[intPosition1]),
GetCoordinate(m_CenterPoint, m_OuterCircleRadius, m_Angles[intPosition1]),
Color.DarkGray, m_SpokeThickness);
intPosition1++;
}
// Draw a part of the progress bar to reflect the changing current value(such as 30%)
int intPosition = CurrentValue;
for (int intCounter1 = 0; intCounter1 < CurrentValue; intCounter1++)
{
intPosition = intPosition % CurrentValue;
DrawLine(gx,
GetCoordinate(m_CenterPoint, m_InnerCircleRadius, m_Angles[intPosition]),
GetCoordinate(m_CenterPoint, m_OuterCircleRadius, m_Angles[intPosition]),
Color.Yellow, m_SpokeThickness);
intPosition++;
}
base.OnPaint(e);
}
Override OnBackgroundPaint を使用して、元の湾曲したプログレス バーを背景として描画し、OnPaint で再描画しないようにしようとしましたが、機能しません。フォームがロードされたときに何も見えません。何か案は?
事前に助けてくれてありがとう。
よろしく