我正在尝试将标签旋转90度。目前我可以从标签中取出文字并旋转它,但我想要做的实际上是旋转我选择的标签,或者如果我真的很华丽,可以说按钮控件。因此,使用下面的代码,我如何修改它,以便我可以为它提供一个控件并让它旋转它?
protected override void OnPaint(PaintEventArgs e)
{
Graphics graphics = e.Graphics;
string text = label4.Text;
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.Trimming = StringTrimming.None;
Brush textBrush = new SolidBrush(this.ForeColor);
//Getting the width and height of the text, which we are going to write
float width = graphics.MeasureString(text, this.Font).Width;
float height = graphics.MeasureString(text, this.Font).Height;
//The radius is set to 0.9 of the width or height, b'cos not to
//hide and part of the text at any stage
float radius = 0f;
if (ClientRectangle.Width < ClientRectangle.Height)
{
radius = ClientRectangle.Width * 0.9f / 2;
}
else
{
radius = ClientRectangle.Height * 0.9f / 2;
}
int rotationAngle = 90;
double angle = (rotationAngle / 180) * Math.PI;
graphics.TranslateTransform(
(ClientRectangle.Width + (float)(height * Math.Sin(angle)) - (float)(width * Math.Cos(angle))) / 2,
(ClientRectangle.Height - (float)(height * Math.Cos(angle)) - (float)(width * Math.Sin(angle))) / 2);
graphics.RotateTransform((float)rotationAngle);
graphics.DrawString(text, this.Font, textBrush, 0, 0);
graphics.ResetTransform();
}
答案 0 :(得分:4)
标准窗体窗体控件(例如标签和按钮)由操作系统本身呈现,窗体窗体不执行实际绘图。
因此,遗憾的是,您无法使用这些控件来控制旋转和缩放等方面。这只是Windows Forms本身的限制,也是Microsoft创建WPF的主要原因之一。
WPF控件是完全呈现的WPF(在幕后使用DirectX)。 WPF支持所有标准的2D(和3D)变换,例如缩放,旋转和平移。
在Windows窗体中,您可以创建一个使用GDI +渲染的自定义控件,并可以根据需要进行旋转和缩放。当然,现在你自己做的所有工作似乎都不是你想要的。
答案 1 :(得分:0)
您可以使用WPF而不是WinForms ...然后它是一个简单的转换;)