Ist es möglich, eine Schaltfläche oder ein beliebiges Steuerelement in einem bestimmten Winkel in WinForms zu drehen? Wenn ja, wie?
Ich habe keine Ahnung, warum ich das benutze :)
Ist es möglich, eine Schaltfläche oder ein beliebiges Steuerelement in einem bestimmten Winkel in WinForms zu drehen? Wenn ja, wie?
Wenn Sie 熟々 wollen (ich habe keine Ahnung, warum man das tun sollte..*), könnten Sie versuchen, eine Button
Unterklasse, vielleicht so:
public partial class TurnButton : Button
{
public TurnButton()
{
InitializeComponent();
}
int angle = 0; // current rotation
Point oMid; // original center
protected override void OnLayout(LayoutEventArgs levent)
{
base.OnLayout(levent);
if (oMid == Point.Empty) oMid = new Point(Left + Width / 2, Top + Height / 2);
}
protected override void OnPaint(PaintEventArgs pe)
{
int mx = this.Size.Width / 2;
int my = this.Size.Height / 2;
SizeF size = pe.Graphics.MeasureString(Text, Font);
string t_ = Text;
Text = "";
base.OnPaint(pe);
if (!this.DesignMode)
{
Text = t_; pe.Graphics.TranslateTransform(mx, my);
pe.Graphics.RotateTransform(angle);
pe.Graphics.TranslateTransform(-mx, -my);
pe.Graphics.DrawString(Text, Font, SystemBrushes.ControlText,
mx - (int)size.Width / 2, my - (int)size.Height / 2);
}
}
protected override void OnClick(EventArgs e)
{
this.Size = new Size(Height, Width);
this.Location = new Point(oMid.X - Width / 2, oMid.Y - Height / 2);
angle = (angle + 90) % 360;
Text = angle + "°";
base.OnClick(e);
}
}
(* Ich habe auch keine Ahnung, warum ich das geschrieben habe ;-)
Sie können die Steuerelemente nicht drehen. Das wird von den nativen API-Steuerelementen, die WinForms verwendet, einfach nicht unterstützt.
Und man könnte sich fragen, warum es überhaupt sollte unterstützt werden. Was könnten Sie möglicherweise versuchen zu tun, dass Sie brauchen, um eine Schaltfläche Steuerung drehen? Es wäre viel einfacher, sie an einer anderen Stelle mit einer anderen Form zu zeichnen, als zu versuchen, ein vorhandenes Steuerelement zu drehen. (Beachten Sie, dass Sie die Größe und Position eines Steuerelements auch während der Laufzeit ändern können, falls dies für Ihre Zwecke erforderlich ist. Untersuchen Sie die Size
y Location
Eigenschaften).
Die einzige Abhilfe besteht darin, das Bild des Steuerelements in eine Bitmap zu zeichnen, das Steuerelement auszublenden und die Bitmap an der gewünschten Stelle in das Formular zu zeichnen. Das führt natürlich nicht zu einem Steuerelement, das der Benutzer interagieren mit. Sie werden nicht in der Lage sein, auf einen Bild eines Knopfes, weil es kein echter Knopf ist. Wenn das für Sie akzeptabel ist, sollten Sie wahrscheinlich in erster Linie ein Bild und nicht eine Schaltfläche verwenden.
Das ist ähnlich wie die hier gestellte Frage: Drehen eines .NET-Panels in Windows Forms
Die kurze Zusammenfassung der Antworten auf diese Frage ist, dass es zwar möglich ist, aber sehr, sehr kompliziert wäre.
public class VerticalButton : Button
{
public string VirticalText { get; set; }
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
StringFormat stringFormat = new StringFormat();
stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
SolidBrush solidBrush = new SolidBrush(this.ForeColor);
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
pe.Graphics.DrawString(VirticalText, this.Font, solidBrush,
new Rectangle(0, 0, Width, Height), stringFormat);
}
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
10 Stimmen
Bitte werden Sie konkreter. Sie haben Ihr GUI-Toolkit/Framework nicht erwähnt, und Sie haben nicht angegeben, was Sie mit "drehen" meinen (nur um 90°? um einen beliebigen Winkel?)
0 Stimmen
Drehen mit beliebigem Winkel (90, 180,...)