0
私はGraphics.DrawArc
メソッドを使用して小さな問題があります。使用すると、実際のサイズよりも短くなります。私はこのコントロールを他の投稿から外していますhereDrawArcが短くなっています
私はこれをいくつかのプロパティを持つUserControl
にして展開しようとしています。問題は、1つの割合を50%と設定すると短くなります。
UserControl
は50%のように表示されます...円の下に中央に配置する必要があります。私はできること全てを調整しようとしましたが、今は失われています。
ここに私の現在のコードは、あなたが整数で角度を計算している...
Color _ProgressCompletedColor = SystemColors.MenuHighlight;
Color _ProgressNotCompleted = Color.LightGray;
Int32 _ProgressThickness = 2;
Single _ProgressCompleted = 25;
public AttuneProgressBar()
{
InitializeComponent();
}
public Single PercentageCompleted
{
get
{
return this._ProgressCompleted;
}
set
{
this._ProgressCompleted = value;
this.Invalidate();
}
}
public Int32 ProgressBarThickness
{
get
{
return this._ProgressThickness;
}
set
{
this._ProgressThickness = value;
this.Invalidate();
}
}
public Color ProgressNotCompletedColor
{
get
{
return this._ProgressNotCompleted;
}
set
{
this._ProgressNotCompleted = value;
this.Invalidate();
}
}
public Color ProgressCompletedColor
{
get
{
return this._ProgressCompletedColor;
}
set
{
this._ProgressCompletedColor = value;
this.Invalidate();
}
}
protected override void OnPaint(PaintEventArgs e)
{
// Call the OnPaint method of the base class.
base.OnPaint(e);
DrawProgress(e.Graphics, new Rectangle(new Point(1,1), new Size(this.ClientSize.Width - 3, this.ClientSize.Height - 3)), PercentageCompleted);
}
private void DrawProgress(Graphics g, Rectangle rec, Single percentage)
{
Single progressAngle = (360/100 * percentage);
Single remainderAngle = 360 - progressAngle;
try
{
using (Pen progressPen = new Pen(ProgressCompletedColor, ProgressBarThickness), remainderPen = new Pen(ProgressNotCompletedColor, ProgressBarThickness))
{
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawArc(progressPen, rec, -90, progressAngle);
g.DrawArc(remainderPen, rec, progressAngle - 90, remainderAngle);
}
}
catch (Exception exc) { }
}
}
定数の浮動小数点数を使用する方がよいでしょう。 – MarkusEgle
@ MarkusEgleこの場合は多分ですが、intのみを使用し、結果がintを変更するのが最良の方法です。もちろん、オーバーフローを排除することはできません。 –
@SamKuhmonenあなたは100%正しいです、ダングタイプは私をもう一度持っています!これはすばらしいことです。今日は約1時間私を悩ませていましたが、私が間違っていたことを理解できませんでした。再度、感謝します! – Codexer