
Introduction
This is a short and simple demonstration of .NET Framework's capability of creating custom controls.
Here, I'm going to make a custom control and then, test my control in a Windows application. I have implemented some custom properties for my control, so you can learn how it is done in C#.
Building the Control
-
Open Visual Studio and start a new project. Your project must be based on the Windows Control Library template. Call your project ctlCuteButton
and click OK.
-
Once you have your project open, delete the UserControl
from the project. Just remove it because the 'User Control' is not exactly what we need here.
-
Now go to the 'Project' menu: Project->Add User Control... and select the Custom Control template there. 'Custom Control' is what we need in this case. You may call it cuteButton
. Now click OK. A new Custom control has been added to your project.
-
The first thing we must do here is change the base class of the cuteButton
:
Override the following line:
public class cuteButton : System.Windows.Forms.Control
by this one:
public class cuteButton : System.Windows.Forms.Button
Now your control is based on the System.Windows.Forms.Button
class.
-
Now let's create some custom properties for our control. This is done by inserting the following code inside the cuteButton
class:
private Color m_color1 = Color.LightGreen;
private Color m_color2 = Color.DarkBlue;
private int m_color1Transparent = 64;
private int m_color2Transparent = 64;
public Color cuteColor1
{
get { return m_color1; }
set { m_color1 = value; Invalidate(); }
}
public Color cuteColor2
{
get { return m_color2; }
set { m_color2 = value; Invalidate(); }
}
public int cuteTransparent1
{
get { return m_color1Transparent; }
set { m_color1Transparent = value; Invalidate(); }
}
public int cuteTransparent2
{
get { return m_color2Transparent; }
set { m_color2Transparent = value; Invalidate(); }
}
The Invalidate()
method is used to refresh the design view and all controls inside (the tip from Tom Welch).
-
And the last thing to do before compiling our control is to override the Paint
event. So let's do it:
base.OnPaint(pe);
Color c1 = Color.FromArgb(m_color1Transparent , m_color1);
Color c2 = Color.FromArgb(m_color2Transparent , m_color2);
Brush b = new System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle,
c1, c2, 10);
pe.Graphics.FillRectangle (b, ClientRectangle);
b.Dispose();
-
Now you may compile the control by pressing <Ctrl>+<Shift>+<B>.
Here is the complete contents of cuteButton.cs file (just in case…):
Complete Code
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace ctlCuteButton
{
public class cuteButton : System.Windows.Forms.Button
{
private Color m_color1 = Color.LightGreen;
private Color m_color2 = Color.DarkBlue;
private int m_color1Transparent = 64;
private int m_color2Transparent = 64;
public Color cuteColor1
{
get { return m_color1; }
set { m_color1 = value; Invalidate(); }
}
public Color cuteColor2
{
get { return m_color2; }
set { m_color2 = value; Invalidate(); }
}
public int cuteTransparent1
{
get { return m_color1Transparent; }
set { m_color1Transparent = value; Invalidate(); }
}
public int cuteTransparent2
{
get { return m_color2Transparent; }
set { m_color2Transparent = value; Invalidate(); }
}
public cuteButton()
{
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
Color c1 = Color.FromArgb
(m_color1Transparent , m_color1);
Color c2 = Color.FromArgb
(m_color2Transparent , m_color2);
Brush b = new System.Drawing.Drawing2D.LinearGradientBrush
(ClientRectangle, c1, c2, 10);
pe.Graphics.FillRectangle (b, ClientRectangle);
b.Dispose();
}
}
}
Testing the Control
-
Open a new instance of the VS .NET. Create a new project choosing the Windows Application template.
-
From a new Windows Forms project, we can add the compiled custom control to the toolbox. I do this by right-clicking the toolbox, selecting Customize Toolbox, and from the .NET Framework Components tab, clicking Browse and locating the Control Library DLL # (in our case, ctlCuteButton\bin\debug\cuteButton.dll). The component cuteButton will then appear in the Toolbox.
You can play a bit changing its properties (cuteColor1
, cuteColor2
, cuteTransparent1
, cuteTransparent2
).
That’s all so far about building and using custom controls.
Good luck.
History
- 25th March, 2002: Initial version
License
This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below.
A list of licenses authors might use can be found here.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.