Frage

Wir verwenden Windows Forms und benutzerdefinierte Steuerelemente, und ich möchte in der Lage sein dreht die Platte das Usercontrol in einer bestimmten Form Hosting. Ich habe ähnliche functionnalities gesehen mit WPF , aber ich kann es nicht für den Augenblick nutzen. Ist es möglich, die Drehung eines Panels und seine Kinder mit möglicherweise integrierten .NET Methoden oder zu erreichen GDI + ?

Ich habe ein paar ziemlich coole visuelle Wirkung mit Menüs zu sehen, die in der Entwicklung von Spielen angezeigt werden, so dass ich mich gefragt, ob es möglich wäre, Ähnliche Effekte mithilfe von Windows Forms zu erstellen.

War es hilfreich?

Lösung

ein Panel und seine Kinder in Windows Forms Rotierende ist nicht etwas, direkt unterstützt, und ich denke, es wird sein ein Buggy Kopfschmerzen am Ende, die leicht viel Zeit saugen konnte. Es ist besonders schmerzhaft zu denken, wenn Sie dies tun könnten in WPF mit Null Zeilen C # -Code und nur ein winzig bisschen XAML .

Andere Tipps

Sie können die Rotationen in GDI + verwenden, indem Sie den RotateTransform Methode auf einem Graphics Objekt.

Allerdings ist eine komplette Steuerung dreht sich nicht so einfach, und hängt stark ab, wie die Steuerung implementiert wird.
Wenn es sich um ein Verbundusercontrol ist das andere Steuerelemente in der es hat, bist du kein Glück.
Wenn es eine sinlge Kontrolle ist, die selbst malt, versuchen, die Kontrolle zu erben, das Überschreiben der OnPaint Methode und ruft RotateTransform auf das Objekt Graphics. Allerdings werden Sie wahrscheinlich Probleme mit ihm haben. Insbesondere werden Sie wahrscheinlich alle der Mausereignisse außer Kraft setzen müssen, und rufen Sie die Ereignisse der Basissteuerung mit gedrehten Koordinaten.

Sie können auf halbem Weg dorthin gelangen, indem Sie die DrawToBitmap Methode auf dem Panel aufrufen, dann die Bitmap-Drehen und Anzeigen es z.B. in einem PictureBox:

Bitmap bmp = new Bitmap(panel.Width, panel.Height);
panel.DrawToBitmap(bmp, new Rectangle(Point.Empty, panel.Size));
bmp.RotateFlip(RotateFlipType.Rotate270FlipNone);

PictureBox pbox = new PictureBox();
pbox.Location = panel.Location;
pbox.SizeMode = PictureBoxSizeMode.AutoSize;
pbox.Image = bmp;
Controls.Remove(panel);
Controls.Add(pbox);

Drehwinkel, die nicht 90-Grad-Schritte möglich sind, wenn Sie die Bitmap in einer anderen Bitmap mit GDI ziehen:

Bitmap bmp2 = new Bitmap(bmp.Width + 75, bmp.Height + 100);
Graphics g = Graphics.FromImage(bmp2);
g.TranslateTransform(bmp2.Width / 2, bmp2.Height / 2);
g.RotateTransform(-15f);
g.TranslateTransform(-bmp.Width / 2, -bmp.Height / 2);
g.DrawImageUnscaled(bmp, Point.Empty);
g.Dispose();

Das Problem ist natürlich, dass Sie nur ein Bild von Ihrer Platte, und nicht dem Panel selbst angezeigt wird, so ist es nicht mehr möglich, mit den Kontrollen nach innen zu interagieren. Das könnte wahrscheinlich auch getan werden, aber Sie würden zu Chaos mit Fenstern Meldungen haben, was ziemlich viel komplizierter werden. Je nach Bedarf können Sie auch in der Lage sein, um wegzukommen mit Klick Handhabung und wichtigste Ereignisse auf der Picture-Box, die Manipulation die Kontrollen in der Platte, und dann das Bild zu aktualisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top