
Introduction
After a long article absence, I've climbed back into the 'Code' saddle again
to bring you some new articles specifically converting .net. I've started with a
relatively easy article covering a text alignment control, eye candy being a
specialty of mine.
Requirements
The article expects the reader to be familiar with C#, GDI+ and
the .net framework. The project was developed using Visual Studio
2003.
Motivation
This control was written to mimic the Text Alignment control
found in Microsoft Excel. It was created to add user interface cue
for aligning text, this type of control does not exist for in the
.net framework.
Benefits over the Microsoft Excel Text Alignment control are:
- Visual cues for selected and disabled.
- Input to allow Up/Down (increment by +1/-1 degree) and
control Up/Down (increment by +15/-15 degrees).
- Home to reset to 0 degrees.
Design
The design on the control is relatively straight forward, the
control is inherited from a User control and the only real points
worth mentioning is the logical for mapping from a point to angle
and visa versa and the logic involved in rotating the text. These
are internal (private) functions and are detailed are below:
private Point _AngleToPoint(Point ptOffset, double angle, double radius)
{
double radians = angle / (180.0 / Math.PI);
int x = ptOffset.X + (int)((double)radius* Math.Cos(radians));
int y = ptOffset.Y - (int)((double)radius * Math.Sin(radians));
return new Point(x,y);
}
private double _ArcTangent(double ratio)
{
double angle = Math.Atan(ratio);
eturn angle * (180.0 / Math.PI);;
}
and the GDI+ code used to rotate the text
...
g.TranslateTransform (ptCenter.X, ptCenter.Y);
g.RotateTransform(-_Angle);
g.DrawString("Text", Control.DefaultFont, SystemBrushes.WindowText,
new Point(0,(int)-(sz.Height/2)), format);
g.ResetTransform();
...
Using the code
The control is presented as a Windows Control Library, so once compiled it's
easy to start using the code, create new C# Windows Project and open in
main form, select the "My User Controls" tab and "Add/Remove Items..." and
select the TextAlignCtrl.dll.
You toolbox should contain the text alignment control see below:

There is one property to Get/Set the angle on the control, this is
appropriately name "Angle", there is also one event which can be sink
when the angle has changed, the is called "OnAngleChangedEvent".
In the demo code you can see the control being used in conjunction with
numeric control and canvas control (Label based) to UI feedback.
That wraps it up, simplistic, yet effective, I haven't seen a text alignment
control for windows, so this should fill that niche - enjoy!
History