Articles in this section
Category / Section

How to format the ScaleLabel text in WinForms RadialGauge?

3 mins read

RadialGauge formatting text

In WinForms RadialGauge ScaleLabel value will be calculated and rendered based on MajorDifference with respect to its MinimumValue and MaximumValue. But when loading multiple digit values like thousands in RadialGauge control, it will be better to format ScaleLabel value as like in Microsoft Excel.

For example

Representing scale value as 150K is nicer than 150000.

 

You can format the ScaleLabel value in RadialGauge by using its Custom Renderer support. Below steps helps to configure the Custom Renderer class to customize the RadialGauge appearance.

 

  1. Define new Custom Renderer class inherited from IRadialGaugeRenderer Interface.
  2. Implement all necessary functions for Custom Rendering purpose in RadialGauge.
  3. Perform the required Number formatting in DrawTickMark function.
  4. Apply Custom Renderer class to RadialGauge.

 

The following code demonstrates the same. 

C#

// Custom Renderer class inherited from IRadialGaugeRenderer
public class CustomRenderer : IRadialGaugeRenderer
{
  public void DrawTickMarks(Graphics Graphics, GraphicsPath GraphicsPath, Int32 
GaugeArcRadius, Int32 GaugeArcStart, Int32 GaugeArcEnd, Int32 MajorTickMarkWidth, 
Point Center, int ScaleNumbersRadius)
  {
    String valueText = "";
    if (RadialGauge.ShowScaleLabel)
    {
      if (this.RadialGauge.TextOrientation != TextOrientation.Horizontal)
      {
        Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        Graphics.RotateTransform(90.0F + GaugeArcStart + countValue * GaugeArcEnd / (RadialGauge.MaximumValue - RadialGauge.MinimumValue));
      }
    Graphics.TranslateTransform((Single)(Center.X + ScaleNumbersRadius * Math.Cos((GaugeArcStart + countValue * GaugeArcEnd / (RadialGauge.MaximumValue - RadialGauge.MinimumValue)) * Math.PI / 180.0f)),
(Single)(Center.Y + ScaleNumbersRadius * Math.Sin((GaugeArcStart + countValue * GaugeArcEnd / (RadialGauge.MaximumValue - RadialGauge.MinimumValue)) * Math.PI / 180.0f)),
System.Drawing.Drawing2D.MatrixOrder.Append);
    if(valueText != "0")
    {
      switch(valueText)
      {
        case "1000":
             valueText = "1K";
             break;
        case "2000":
             valueText = "2K";
             break;
        case "3000":
             valueText = "3K";
             break;
        case "4000":
             valueText = "4K";
             break;
        case "5000":
             valueText = "5K";
             break;
        case "6000":
             valueText = "6K";
             break;
        case "7000":
             valueText = "7K";
             break;
        case "8000":
             valueText = "8K";
             break;
        case "9000":
             valueText = "9K";
             break;
        case "10000":
             valueText = "10K";
             break;
        case "11000":
             valueText = "11K";
             break;
        case "12000":
             valueText = "12K";
             break;
        case "13000":
             valueText = "13K";
             break;
        case "14000":
             valueText = "14K";
             break;
        case "15000":
             valueText = "15K";
             break;
      }
    }
    Graphics.DrawString(valueText, RadialGauge.Font, new SolidBrush(this.RadialGauge.ScaleLabelColor), -boundingBox.Width/4, -fontBoundY1, StringFormat.GenericTypographic);
  }
 }
}
CustomRenderer custom;custom = new CustomRenderer(radialGauge1);radialGauge1.MajorDifference = 1000;radialGauge1.MajorTickMarkHeight = 15;// Applying Custom Renderer in RadialGaugethis.radialGauge1.Renderer = custom;

VB

'Custom Renderer class inherited from IRadialGaugeRendererPublic Class CustomRenderer Implements IRadialGaugeRenderer  Public Sub DrawTickMarks(ByVal Graphics As Graphics, ByVal GraphicsPath As GraphicsPath, ByVal GaugeArcRadius As Int32, ByVal GaugeArcStart As Int32, ByVal GaugeArcEnd As Int32, ByVal MajorTickMarkWidth As Int32, ByVal Center As Point, ByVal ScaleNumbersRadius As Integer) Implements IRadialGaugeRenderer.DrawTickMarks
  Dim valueText As String = ""  If RadialGauge.ShowScaleLabel Then
    If Me.RadialGauge.TextOrientation <> TextOrientation.Horizontal Then
      Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias
      Graphics.RotateTransform(90.0F + GaugeArcStart + countValue * GaugeArcEnd / (RadialGauge.MaximumValue - RadialGauge.MinimumValue))
    End If
    Graphics.TranslateTransform(CSng(Center.X + ScaleNumbersRadius * Math.Cos((GaugeArcStart + countValue * GaugeArcEnd / (RadialGauge.MaximumValue - RadialGauge.MinimumValue)) * Math.PI / 180.0F)), CSng(Center.Y + ScaleNumbersRadius * Math.Sin((GaugeArcStart + countValue * GaugeArcEnd / (RadialGauge.MaximumValue - RadialGauge.MinimumValue)) * Math.PI / 180.0F)), System.Drawing.Drawing2D.MatrixOrder.Append)
    If valueText <> "0" Then
      Select Case valueText
         Case "1000"
              valueText = "1K"
         Case "2000"
              valueText = "2K"
         Case "3000"
              valueText = "3K"
         Case "4000"
              valueText = "4K"
         Case "5000"
              valueText = "5K"
         Case "6000"
              valueText = "6K"
         Case "7000"
              valueText = "7K"
         Case "8000"
              valueText = "8K"
         Case "9000"
              valueText = "9K"
         Case "10000"
              valueText = "10K"
         Case "11000"
              valueText = "11K"
         Case "12000"
              valueText = "12K"
         Case "13000"
              valueText = "13K"
         Case "14000"
              valueText = "14K"
         Case "15000"
              valueText = "15K"
      End Select
    End If
    Graphics.DrawString(valueText, RadialGauge.Font, New SolidBrush(Me.RadialGauge.ScaleLabelColor), -boundingBox.Width \ 4, -fontBoundY1, StringFormat.GenericTypographic)
  End If End SubEnd Class
Dim custom As CustomRenderercustom = New CustomRenderer(radialGauge1)radialGauge1.MajorDifference = 1000radialGauge1.MajorTickMarkHeight = 15'Applying Custom Renderer in RadialGaugeMe.radialGauge1.Renderer = custom

 

Screenshot
Without Formatting

Format the scalelabel text with formatting text

 

With Formatting

Format the scalelabel text without formatting text

 

Samples:

C#:  RadialGaugeFormatStringSample

VB:  RadialGaugeFormatStringSample

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied