行にオーディオ レコードを含むテーブル (ObjectListView) があります。列の 1 つ - hh:mm:ss 形式の長さ この列に再生の進行状況 (進行状況と長さの両方) を表示するには、BarRenderer をこの列に適用する必要があります。独自の Renderer を作成する必要がありますか、それとも既存のものを使用できますか?
質問する
877 次
1 に答える
1
BarRenderer から派生したカスタム クラスを使用してこれを実現しました。オーバーライドされた Render メソッドについて考えてみましょう。
public class BarTextRenderer : BarRenderer
{
#region Constructors
/// <summary>
/// Make a BarTextRenderer
/// </summary>
public BarTextRenderer() : base() {}
/// <summary>
/// Make a BarTextRenderer for the given range of data values
/// </summary>
public BarTextRenderer (int minimum, int maximum) : base(minimum, maximum) { }
/// <summary>
/// Make a BarTextRenderer using a custom bar scheme
/// </summary>
public BarTextRenderer (Pen pen, Brush brush) : base(pen, brush) { }
/// <summary>
/// Make a BarTextRenderer using a custom bar scheme
/// </summary>
public BarTextRenderer (int minimum, int maximum, Pen pen, Brush brush) : base(minimum, maximum, pen, brush) { }
/// <summary>
/// Make a BarTextRenderer that uses a horizontal gradient
/// </summary>
public BarTextRenderer (Pen pen, Color start, Color end) : base(pen, start, end) { }
/// <summary>
/// Make a BarTextRenderer that uses a horizontal gradient
/// </summary>
public BarTextRenderer (int minimum, int maximum, Pen pen, Color start, Color end) : base(minimum, maximum, pen, start, end) { }
#endregion
public override void Render(Graphics g, Rectangle r)
{
base.Render(g, r);
float x = r.X + (float)r.Width / 2f;
float w = r.Width/2f;
float h = Math.Max (r.Height-this.Font.Size, 0.8f*r.Height);
float y = (float)r.Y + 0.6f*(r.Height-h);
RectangleF rf = new RectangleF(x, y, w, h);
g.DrawString(this.Aspect.ToString(), this.Font, this.Brush, rf);
}
}
于 2014-02-17T15:34:28.150 に答える