syncfusion-winforms-radial-gauge
Implementing Gauges
When to Use This Skill
Use this skill when the user needs to implement Syncfusion Gauge controls in a Windows Forms application. This skill covers three gauge types for different visualization needs:
RadialGauge Use Cases
- Speedometers and tachometers - Vehicle instrumentation, RPM displays
- Temperature gauges - HVAC controls, system monitoring, weather displays
- Pressure gauges - Industrial monitoring, tire pressure, hydraulic systems
- Progress indicators - Circular progress for loading, completion percentage
- KPI dashboards - Performance metrics with color-coded ranges
- Dial controls - Volume, brightness, or any rotary control visualization
- Compass displays - Navigation, orientation indicators
- Clock faces - Analog time displays with custom styling
LinearGauge Use Cases
- Progress bars - Task completion, download progress, loading status
- Level indicators - Battery level, fuel gauge, volume meters
- Slider visualizations - Temperature sliders, adjustment controls
- Horizontal meters - Audio levels, signal strength, capacity indicators
- Vertical meters - Building height indicators, elevator position
- Thermometer displays - Temperature scales, medical thermometers
- Timeline indicators - Project timelines, milestone tracking
DigitalGauge Use Cases
- Digital clocks - Time displays, countdown timers, stopwatches
- Counters - Visitor counters, production counters, score displays
- Alphanumeric status - System codes, product IDs, status messages
- LED displays - Retro-style indicators, industrial displays
- Price displays - Gas station prices, retail pricing
- Measurement readouts - Digital multimeters, sensor readings
When NOT to use: For simple text displays without gauge visualization, use standard Label or TextBox controls. For charts and graphs, use Chart controls.
Component Overview
Syncfusion provides three gauge controls for data visualization in Windows Forms:
1. RadialGauge
Visualizes values on a circular or arc scale with customizable needles, ranges, and frames.
Key Features:
- 4 frame types: FullCircle, HalfCircle, QuarterCircle, Fill
- Multiple needles support
- Color-coded ranges for visual thresholds
- Customizable scales, ticks, and labels
- Gradient backgrounds and styling
- Custom needle styles (Default, Advanced, Pointer)
2. LinearGauge
Visualizes values on a linear scale (horizontal or vertical) with pointer indicators.
Key Features:
- Horizontal and vertical orientations
- Pointer placement (Top, Center, Bottom)
- Color-coded ranges
- Major and minor tick marks
- Value indicator bars
- Gradient styling
3. DigitalGauge
Displays alphanumeric characters in LED/digital format.
Key Features:
- 4 character types: DotMatrix, SevenSegment, FourteenSegment, SixteenSegment
- Configurable character count
- Segment spacing control
- Invisible segment display option
- Rounded corners support
All gauges support:
- Visual themes (9 built-in + custom)
- Data binding for real-time updates
- Custom renderers for complete visual control
- Professional styling options
Documentation and Navigation Guide
Installation and Setup
π Read: references/installation-and-setup.md
When user needs to set up gauge controls for the first time. Covers:
- Assembly references (Syncfusion.Gauge.Windows.dll, Syncfusion.Shared.Base.dll)
- NuGet package installation
- Namespace imports (Syncfusion.Windows.Forms.Gauge)
- Framework support (.NET 4.5+, .NET 6.0-8.0)
- Deployment requirements
- Toolbox configuration
- Sample browser location
RadialGauge (Circular Gauges)
π Read: references/radial-gauge.md
When user needs circular, arc, or dial-style gauges. Covers:
- Frame types (FullCircle, HalfCircle, QuarterCircle, Fill)
- Designer and code-based setup
- Scales and labels (placement, orientation, colors)
- Ticks (major/minor configuration, heights, colors)
- Needles (single and multiple, styles, colors)
- Ranges (color-coded value ranges with start/end)
- Scaling divisions (MajorDifference, MinorDifference)
- StartAngle and SweepAngle customization
- Frame appearance (gradients, arc colors)
- Label customization with DrawLabel event
- Performance optimization tips
LinearGauge (Bar/Slider Gauges)
π Read: references/linear-gauge.md
When user needs horizontal or vertical bar-style gauges. Covers:
- Frame types (Horizontal, Vertical)
- Designer and code-based setup
- Scales and label configuration
- Tick marks (major/minor)
- Pointer placement options
- Needle display and styling
- Ranges (LinearRange with colors)
- Value indicator positioning
- Frame appearance customization
- Complete orientation examples
DigitalGauge (LED Display)
π Read: references/digital-gauge.md
When user needs LED-style alphanumeric displays. Covers:
- Character types (DotMatrix, SevenSegment, FourteenSegment, SixteenSegment)
- Designer and code-based setup
- Character count limiting
- Segment spacing configuration
- ShowInvisibleSegments property
- RoundCornerRadius for rounded edges
- Value property for string display
- Frame customization
- Examples for each character type
Visual Themes and Styling
π Read: references/visual-themes.md
When user wants to apply professional themes or custom styling. Covers:
- VisualStyle property (applies to all 3 gauge types)
- Built-in themes (Blue, Black, Silver, Metro, Office2016 variants)
- Custom theme creation (ThemeBrush collections)
- Color customization properties
- Design-time theme setup
- Theme-specific examples for each gauge type
- Consistent application-wide theming
Custom Renderers
π Read: references/custom-renderers.md
When user needs complete control over gauge rendering and appearance. Covers:
- IRadialGaugeRenderer interface
- ILinearGaugeRenderer interface
- Creating custom renderer classes
- DrawOuterArc, DrawNeedle, DrawLabel, DrawRanges methods
- Renderer property assignment
- Advanced customization scenarios
- Complete custom renderer examples
Data Binding
π Read: references/data-binding.md
When user needs real-time data updates or database-driven gauges. Covers:
- DataSource property configuration
- DisplayMember (column mapping)
- DisplayRecordIndex (row mapping)
- High-frequency data updates
- Real-time monitoring scenarios
- Performance considerations
- Complete binding examples for all gauge types
Quick Start Examples
RadialGauge: Speedometer
using Syncfusion.Windows.Forms.Gauge;
// Create RadialGauge
RadialGauge speedometer = new RadialGauge();
speedometer.Size = new Size(300, 300);
speedometer.Location = new Point(20, 20);
// Configure gauge properties
speedometer.MinimumValue = 0;
speedometer.MaximumValue = 200;
speedometer.MajorDifference = 20;
speedometer.MinorDifference = 5;
speedometer.Value = 60;
// Set frame type
speedometer.FrameType = FrameType.HalfCircle;
// Configure appearance
speedometer.ShowNeedle = true;
speedometer.NeedleStyle = NeedleStyle.Advanced;
speedometer.GaugeLabel = "Speed (MPH)";
// Add color-coded ranges
Range range1 = new Range();
range1.StartValue = 0;
range1.EndValue = 80;
range1.Color = Color.Green;
range1.Height = 10;
speedometer.Ranges.Add(range1);
Range range2 = new Range();
range2.StartValue = 80;
range2.EndValue = 150;
range2.Color = Color.Yellow;
range2.Height = 10;
speedometer.Ranges.Add(range2);
Range range3 = new Range();
range3.StartValue = 150;
range3.EndValue = 200;
range3.Color = Color.Red;
range3.Height = 10;
speedometer.Ranges.Add(range3);
// Add to form
this.Controls.Add(speedometer);
LinearGauge: Battery Level
using Syncfusion.Windows.Forms.Gauge;
// Create LinearGauge
LinearGauge batteryLevel = new LinearGauge();
batteryLevel.Size = new Size(300, 125);
batteryLevel.Location = new Point(20, 20);
// Set horizontal orientation
batteryLevel.LinearFrameType = LinearFrameType.Horizontal;
// Configure gauge properties
batteryLevel.MinimumValue = 0;
batteryLevel.MaximumValue = 100;
batteryLevel.MajorDifference = 20;
batteryLevel.MinorTickCount = 3;
batteryLevel.Value = 75;
// Configure appearance
batteryLevel.ShowNeedle = true;
batteryLevel.PointerPlacement = Placement.Center;
// Add color-coded ranges
LinearRange lowRange = new LinearRange();
lowRange.StartValue = 0;
lowRange.EndValue = 20;
lowRange.Color = Color.Red;
lowRange.Height = 8;
batteryLevel.Ranges.Add(lowRange);
LinearRange normalRange = new LinearRange();
normalRange.StartValue = 20;
normalRange.EndValue = 80;
normalRange.Color = Color.Yellow;
normalRange.Height = 8;
batteryLevel.Ranges.Add(normalRange);
LinearRange highRange = new LinearRange();
highRange.StartValue = 80;
highRange.EndValue = 100;
highRange.Color = Color.Green;
highRange.Height = 8;
batteryLevel.Ranges.Add(highRange);
// Add to form
this.Controls.Add(batteryLevel);
DigitalGauge: LED Clock
using Syncfusion.Windows.Forms.Gauge;
// Create DigitalGauge
DigitalGauge digitalClock = new DigitalGauge();
digitalClock.Size = new Size(250, 100);
digitalClock.Location = new Point(20, 20);
// Configure character display
digitalClock.CharacterType = CharacterType.SevenSegment;
digitalClock.CharacterCount = 8;
digitalClock.SegmentSpacing = 2.0f;
// Set initial value
digitalClock.Value = DateTime.Now.ToString("HH:mm:ss");
// Configure appearance
digitalClock.ForeColor = Color.Red;
digitalClock.ShowInvisibleSegments = true;
// Add timer to update clock
Timer clockTimer = new Timer();
clockTimer.Interval = 1000; // 1 second
clockTimer.Tick += (s, e) => {
digitalClock.Value = DateTime.Now.ToString("HH:mm:ss");
};
clockTimer.Start();
// Add to form
this.Controls.Add(digitalClock);
Common Patterns
Pattern 1: Dashboard with Multiple Gauges
// Create dashboard layout
FlowLayoutPanel dashboard = new FlowLayoutPanel();
dashboard.Dock = DockStyle.Fill;
// Temperature gauge (RadialGauge)
RadialGauge tempGauge = new RadialGauge();
tempGauge.MinimumValue = -20;
tempGauge.MaximumValue = 120;
tempGauge.Value = 72;
tempGauge.GaugeLabel = "Β°F";
tempGauge.FrameType = FrameType.HalfCircle;
dashboard.Controls.Add(tempGauge);
// Fuel level (LinearGauge)
LinearGauge fuelGauge = new LinearGauge();
fuelGauge.LinearFrameType = LinearFrameType.Vertical;
fuelGauge.MinimumValue = 0;
fuelGauge.MaximumValue = 100;
fuelGauge.Value = 45;
dashboard.Controls.Add(fuelGauge);
// Status counter (DigitalGauge)
DigitalGauge statusCounter = new DigitalGauge();
statusCounter.CharacterType = CharacterType.SevenSegment;
statusCounter.Value = "1234";
dashboard.Controls.Add(statusCounter);
this.Controls.Add(dashboard);
Pattern 2: Data-Bound Real-Time Gauge
// Setup data source
DataTable sensorData = new DataTable();
sensorData.Columns.Add("SensorValue", typeof(float));
sensorData.Rows.Add(0);
// Create and bind gauge
RadialGauge sensorGauge = new RadialGauge();
sensorGauge.DataSource = sensorData;
sensorGauge.DisplayMember = "SensorValue";
sensorGauge.DisplayRecordIndex = 0;
// Timer to simulate sensor updates
Timer dataTimer = new Timer();
dataTimer.Interval = 100; // 10 updates per second
dataTimer.Tick += (s, e) => {
// Update data source (gauge updates automatically)
sensorData.Rows[0]["SensorValue"] = GetSensorReading();
};
dataTimer.Start();
Pattern 3: Themed Gauge Set
// Apply consistent theme to all gauges
void ApplyTheme(Control.ControlCollection controls, ThemeStyle theme)
{
foreach (Control control in controls)
{
if (control is RadialGauge radial)
radial.VisualStyle = theme;
else if (control is LinearGauge linear)
linear.VisualStyle = theme;
else if (control is DigitalGauge digital)
digital.VisualStyle = theme;
if (control.HasChildren)
ApplyTheme(control.Controls, theme);
}
}
// Usage
ApplyTheme(this.Controls, ThemeStyle.Office2016Colorful);
Gauge Type Selection Guide
| Need | Use This Gauge | Why |
|---|---|---|
| Circular display (speedometer style) | RadialGauge | Natural for rotary values, intuitive needle movement |
| Arc/partial circle | RadialGauge (HalfCircle/QuarterCircle) | Space-efficient, modern dashboard look |
| Horizontal progress bar | LinearGauge (Horizontal) | Clear left-to-right progression |
| Vertical level indicator | LinearGauge (Vertical) | Natural for height/depth/level visualization |
| Time display (LED style) | DigitalGauge (SevenSegment) | Classic digital clock appearance |
| Alphanumeric status code | DigitalGauge (FourteenSegment/SixteenSegment) | Supports letters and numbers |
| Multiple needles on one dial | RadialGauge (EnableCustomNeedles) | Compare multiple values on same scale |
| Fill-based progress indicator | RadialGauge (FrameType.Fill) | Visual fill from start to current value |
Key Properties Comparison
Common to All Gauges
| Property | Type | Description |
|---|---|---|
Value |
float (Radial/Linear) / string (Digital) | Current displayed value |
MinimumValue |
float | Minimum scale value (Radial/Linear only) |
MaximumValue |
float | Maximum scale value (Radial/Linear only) |
VisualStyle |
ThemeStyle | Theme: Blue, Black, Silver, Metro, Office2016*, Custom |
DataSource |
object | Data source for binding |
DisplayMember |
string | Column name for value binding |
DisplayRecordIndex |
int | Row index for value binding |
RadialGauge Specific
| Property | Type | Description |
|---|---|---|
FrameType |
FrameType | FullCircle, HalfCircle, QuarterCircle, Fill |
StartAngle |
int | Starting angle of arc (degrees) |
SweepAngle |
int | Arc span length (degrees) |
ShowNeedle |
bool | Display pointer needle |
NeedleStyle |
NeedleStyle | Default, Advanced, Pointer |
EnableCustomNeedles |
bool | Allow multiple needles |
Ranges |
RangeCollection | Color-coded value ranges |
MajorDifference |
float | Spacing between major ticks |
MinorDifference |
float | Spacing between minor ticks |
LinearGauge Specific
| Property | Type | Description |
|---|---|---|
LinearFrameType |
LinearFrameType | Horizontal or Vertical |
PointerPlacement |
Placement | Top, Center, Bottom |
ShowNeedle |
bool | Display pointer |
Ranges |
LinearRangeCollection | Color-coded value ranges |
MajorDifference |
float | Spacing between major ticks |
MinorTickCount |
int | Number of minor ticks between majors |
DigitalGauge Specific
| Property | Type | Description |
|---|---|---|
Value |
string | Text to display |
CharacterType |
CharacterType | DotMatrix, SevenSegment, FourteenSegment, SixteenSegment |
CharacterCount |
int | Number of characters to display |
SegmentSpacing |
float | Spacing between characters |
ShowInvisibleSegments |
bool | Show inactive segments |
RoundCornerRadius |
int | Corner rounding radius |
Common Use Cases
1. Industrial Dashboard
Scenario: Monitor multiple sensors (pressure, temperature, RPM)
Solution: Multiple RadialGauges with color-coded ranges and real-time data binding
2. Progress Indicator
Scenario: Show task completion percentage
Solution: LinearGauge (Horizontal) or RadialGauge (Fill type) with 0-100 range
3. Digital Clock Display
Scenario: Display current time in LED format
Solution: DigitalGauge with SevenSegment character type, timer for updates
4. Vehicle Instrument Cluster
Scenario: Speedometer, tachometer, fuel gauge
Solution: RadialGauges (HalfCircle for speed/RPM), LinearGauge (Vertical for fuel)
5. System Monitor
Scenario: CPU usage, memory, network speed
Solution: Mix of RadialGauges (percentage dials) and DigitalGauges (numeric readouts)
6. Temperature Control
Scenario: Thermostat with visual temperature display
Solution: RadialGauge (FullCircle) with color ranges (blue=cold, yellow=moderate, red=hot)
Best Practices
- Choose appropriate gauge type - RadialGauge for rotary values, LinearGauge for linear progression, DigitalGauge for alphanumeric
- Use color-coded ranges - Visual thresholds improve readability (green=good, yellow=warning, red=critical)
- Set meaningful scales - Configure Min/Max and MajorDifference to match your data range
- Apply consistent themes - Use same VisualStyle across all gauges in application
- Optimize real-time updates - Use data binding for frequent updates instead of manual Value setting
- Label your gauges - Set GaugeLabel property to clarify what's being measured
- Consider performance - For many gauges, use SuspendLayout/ResumeLayout when configuring multiple properties
- Test different frame types - HalfCircle and QuarterCircle save space while remaining readable