![]() |
Languages »
C# »
Windows Forms
Intermediate
License: The Code Project Open License (CPOL)
Industrial ControlsBy Luca BonottoA library of controls with a custon renderer for use in the controls processes panel display |
C# (C# 2.0), .NET (.NET 2.0), GDI+, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
In my previous article , I created an analog meter with a custom renderer. Now I thought to add more controls to the library in order to be able to use it for the creation of forms to control a process or for other various reasons.
To compile this demo you need .NET 2.0. which is available here. The project is developed with SharpDevelop, a free IDE per .NET.
In this version of the library, I include these types of control:
All controls are derived from System.Windows.Forms.UserControl, and have a category where you can edit the properties, as well as those by default. Normally all the classes have a default renderer class that is used for draw all parties, but is possible to set a custom renderer to draw a single part, or the entire control.

In this namesapace there are the controls that simulate a led for the visualization of a state. At the moment, there is only the class LBLed. For this class you can set the following properties at a design time:
LedColor- Color of the led. The code modify the color to simulate the dark side. LedSize- Size of the led. You can set different width and height to change the appearance of control. State - State of the led. The type of this property is LedState and the available values are:
Off On Blink LabelPosition - Position of the label of the control. The type of this property is LedLabelPosition and the available values are:
Left Top Right Bottom Label - Text of the label of the control BlinkInterval - Interval in milliseconds for the blink state change There are two properties that are not visible at the design time, and are:
Renderer - Custom renderer of the control. BlinkIsOn - Flag for the current state of the blink state 
In this namesapace there are the controls that simulate a meters (analog or digital) to view a value. At the moment, there is only the class LBAnalogMeter.For this class you can set the following properties at a design time:
MeterStyle - Style of the control. The type of this property is AnalogMeterStyle and the available values are:
Circular BodyColor - Color of the body of the control. NeedleColor - Color of the needle of the control ScaleColor - Color of the thicks of the control scale ScaleDivisions - Number of main division of the scale ScaleSubDivisions - Number of the sub-division between a main division to an other of the scale ViewGlass - Flag for the visualization of the glass effect Value - Current value of the control MinValue - Minimum value of the control MaxValue - Maximum value of the control There are two properties that are not visible at the design time, and are:
Renderer - Custom renderer of the control. Thresholds - Collection of LBMeterThreshold objects. The class LBMeterThreshold is used to draw the threshold in the meters control, for viewing when the measure has a critical value. This class has the following properties:
Color - Color of the thresholdStartValue - Value from the threshold startEndValue - Value to the threshold endThis is an example that how to set the thresold in the meters controls:
...
public void SetThresholds()
{
LBMeterThreshold threshold = new LBMeterThreshold();
threshold.Color = Color.Yellow;
threshold.StartValue = 50;
threshold.EndValue = 70;
this.lbAnalogMeter1.Thresholds.Add ( threshold );
threshold = new LBMeterThreshold();
threshold.Color = Color.Red;
threshold.StartValue = 70;
threshold.EndValue = 100;
this.lbAnalogMeter1.Thresholds.Add ( threshold );
}
...

In this namesapace there are the controls that simulate the button to send a command. At the moment, there is only the class LBButton. For this class you can set the following properties at a design time:
Style - Style of the control. The type of this property is ButtonStyle and the available values are:
CircularButtonColor - Color of the buttonLabel - Label of the buttonState - State of the button. The type of this property is ButtonState and the available values are:
NormalPressedLike the previous controls there are properties that are not visible at the design time:
Renderer - Custom renderer of the control. This control, when the state change, fire up an event to inform the connected class. This event is:
ButtonChangeState ( object sender, LBButtonEventArgs e );
The property State of the event arguments is the current state of the button

In this namesapace there are the controls that simulate knobs to change a value (like a slider). At the moment, there is only the class LBKnob. For this class you can set the following properties at a design time:
Style - Style of the control. The type of this property is KnobStyle and the available values are:
CircularKnobColor - Color of the knobScaleColor - Color of the scale of the knobIndicatorColor - Color of the indicator of the current valueIndicatorOffset - Offset of the indicator behind the edge of the knobMinValue - Minimum value of the knobMaxValue - Maximum value of the knobStepValue - Step value when is used the keybordValue - Current value of the knobLike the previous controls there are properties that are not visible at the design time:
Renderer - Custom renderer of the control. KnobCenter - Center point of the control. This control, when the state changes, fires up an event to inform the connected class. This event is:
KnobChangeValue ( object sender, LBKnobEventArgs e );
The property Value of the event arguments is the current value of the knob.
In this namespace there are two class with only static members for common use:
LBColorManager - Class for handling colors LBMath - Class for mathematical functions used in the libraryNow is the time to explain how to create the custom renderers. Any control, has a base renderer class, and any renderer class has a property to set the control. All the methods in the renderer class are virtual and if you want to change the aspect of the control, is possible to override one or all methods. The renderers available for the controls are:
LBLedRenderer - This class allows you to be able to redesign the appearance of control LBLed and has the following methods
DrawBackground - Method to draw a control background DrawLed - Method to draw the led DrawLabel - Method to draw the label of the controlLBAnalogMeterRenderer - This class allows you to be able to redesign the appearance of control LBAnalogMeter and has the following methods
DrawBackground - Method to draw a control background DrawBody - Method to draw the body of the analog meter DrawThresholds - Method to draw the thresholds sections DrawDivisions - Method to draw the scale DrawUM - Method to draw the label of the unit(Not yet implemented) DrawValue - Method to draw the label of the current value(Not yet implemented) DrawNeedle - Method to draw the needle DrawNeedleCover - Method to draw the needle cover DrawGlass - Method to draw the glass effectLBButtonRenderer - This class allows you to be able to redesign the appearance of control LBButton and has the following methods
DrawBackground - Method to draw a control background DrawBody - Method to draw the body of the control DrawText - Method to draw the label of the controlLBKnobRenderer - This class allows you to be able to redesign the appearance of control LBKnob and has the following methods
DrawBackground - Method to draw a control background DrawScale - Method to draw the scale of the knob DrawKnob - Method to draw the body of the knob DrawKnobIndicator - Method to draw the indicator of the current valueTo create a custom renderer, you following these steps:
LBLedRenderer) DrawLed) Renderer namespace TestApp
{
///
/// Class for custom renderer
///
public class LBCustomLedRenderer : LBLedRenderer
{
///
/// Draw a rectangular led
///
public virtual bool DrawLed( Graphics Gr, RectangleF rc )
{
if ( this.Led == null )
return false;
Color c = this.Led.LedColor;
SolidBrush br = new SolidBrush ( c );
Pen pen = new Pen ( c );
Gr.DrawRectangle ( pen, rc );
Gr.FillRectangle ( br, rc );
br.Dispose();
pen.Dispose();
return true;
}
}
public partial class MainForm : Form
{
private LBCustomLedRenderer myRenderer = null;
public MainForm()
{
InitializeComponent();
this.myRenderer = new LBCustomLedRenderer();
this.lbLed1.Renderer = this.myRenderer;
}
...
}
}
This is the initial version of the library, many features have yet to be implemented, and I hope to do so soon. Any suggestions/comments/feedback are highly appreciated, because I only started using C# 2 weeks ago, and I don't know if the code that I wrote is the best way to do things.
For this article, I used the code and the ideas of these articles :| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 11 Apr 2008 Editor: Sean Ewington |
Copyright 2008 by Luca Bonotto Everything else Copyright © CodeProject, 1999-2009 Web21 | Advertise on the Code Project |