旋转标签文本和按钮90度

时间:2010-06-30 22:16:52

标签: c# winforms visual-studio-2008

我正在尝试将标签旋转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();        
    }

2 个答案:

答案 0 :(得分:4)

标准窗体窗体控件(例如标签和按钮)由操作系统本身呈现,窗体窗体不执行实际绘图。

因此,遗憾的是,您无法使用这些控件来控制旋转和缩放等方面。这只是Windows Forms本身的限制,也是Microsoft创建WPF的主要原因之一。

WPF控件是完全呈现的WPF(在幕后使用DirectX)。 WPF支持所有标准的2D(和3D)变换,例如缩放,旋转和平移。

在Windows窗体中,您可以创建一个使用GDI +渲染的自定义控件,并可以根据需要进行旋转和缩放。当然,现在你自己做的所有工作似乎都不是你想要的。

答案 1 :(得分:0)

您可以使用WPF而不是WinForms ...然后它是一个简单的转换;)