|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace CommonTools
{
public class LabelRotate : Control
{
float m_textAngle = 0;
ContentAlignment m_rotatePointAlignment = ContentAlignment.MiddleCenter;
ContentAlignment m_textAlignment = ContentAlignment.MiddleLeft;
public new string Text
{
get { return base.Text; }
set
{
base.Text = value;
Refresh();
}
}
public float TextAngle
{
get { return m_textAngle; }
set
{
m_textAngle = value;
Invalidate();
}
}
public ContentAlignment TextAlign
{
get { return m_textAlignment; }
set
{
m_textAlignment = value;
Invalidate();
}
}
public ContentAlignment RotatePointAlignment
{
get { return m_rotatePointAlignment; }
set
{
m_rotatePointAlignment = value;
Invalidate();
}
}
Color m_frameColor = Color.CadetBlue;
public LabelRotate()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.Text = string.Empty;
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
using (SolidBrush b = new SolidBrush(BackColor))
{
e.Graphics.FillRectangle(b, ClientRectangle);
}
RectangleF lr = ClientRectangleF;
Pen framepen = new Pen(m_frameColor, 1);
Util.DrawFrame(e.Graphics, lr, 6, m_frameColor);
if (Text.Length > 0)
{
StringFormat format = new StringFormat();
string alignment = TextAlign.ToString();
if (((int)TextAlign & (int)(ContentAlignment.BottomLeft | ContentAlignment.MiddleLeft | ContentAlignment.TopLeft)) != 0)
format.Alignment = StringAlignment.Near;
if (((int)TextAlign & (int)(ContentAlignment.BottomCenter | ContentAlignment.MiddleCenter | ContentAlignment.TopCenter)) != 0)
format.Alignment = StringAlignment.Center;
if (((int)TextAlign & (int)(ContentAlignment.BottomRight | ContentAlignment.MiddleRight | ContentAlignment.TopRight)) != 0)
format.Alignment = StringAlignment.Far;
if (((int)TextAlign & (int)(ContentAlignment.BottomLeft | ContentAlignment.BottomCenter | ContentAlignment.BottomRight)) != 0)
format.LineAlignment = StringAlignment.Far;
if (((int)TextAlign & (int)(ContentAlignment.MiddleLeft | ContentAlignment.MiddleCenter | ContentAlignment.MiddleRight)) != 0)
format.LineAlignment = StringAlignment.Center;
if (((int)TextAlign & (int)(ContentAlignment.TopLeft | ContentAlignment.TopCenter | ContentAlignment.TopRight)) != 0)
format.LineAlignment = StringAlignment.Near;
Rectangle r = ClientRectangle;
r.X += Padding.Left;
r.Y += Padding.Top;
r.Width -= Padding.Right;
r.Height -= Padding.Bottom;
using (SolidBrush b = new SolidBrush(ForeColor))
{
if (TextAngle == 0)
{
e.Graphics.DrawString(Text, Font, b, r, format);
}
else
{
PointF center = Util.Center(ClientRectangle);
switch (RotatePointAlignment)
{
case ContentAlignment.TopLeft:
center.X = r.Left;
center.Y = r.Top;
break;
case ContentAlignment.TopCenter:
center.Y = r.Top;
break;
case ContentAlignment.TopRight:
center.X = r.Right;
center.Y = r.Top;
break;
case ContentAlignment.MiddleLeft:
center.X = r.Left;
break;
case ContentAlignment.MiddleCenter:
break;
case ContentAlignment.MiddleRight:
center.X = r.Right;
break;
case ContentAlignment.BottomLeft:
center.X = r.Left;
center.Y = r.Bottom;
break;
case ContentAlignment.BottomCenter:
center.Y = r.Bottom;
break;
case ContentAlignment.BottomRight:
center.X = r.Right;
center.Y = r.Bottom;
break;
}
center.X += Padding.Left;
center.Y += Padding.Top;
center.X -= Padding.Right;
center.Y -= Padding.Bottom;
e.Graphics.TranslateTransform(center.X, center.Y);
e.Graphics.RotateTransform(TextAngle);
e.Graphics.DrawString(Text, Font, b, new PointF(0,0), format);
e.Graphics.ResetTransform();
}
}
}
RaisePaintEvent(this, e);
}
protected RectangleF ClientRectangleF
{
get
{
RectangleF r = ClientRectangle;
r.Width -= 1;
r.Height -= 1;
return r;
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.