旋转在Windows窗体.NET程序面板
-
16-09-2019 - |
其他提示
可以通过调用使用GDI +旋转RotateTransform 方法的Graphics
对象上。
然而,旋转的整个控制不是那么简单,并且将在很大程度上取决于控制是如何实施的。结果
如果它是有它内部的其他控件的复合用户控件,你的运气了。结果
如果它是一个的单层控件油漆本身,尝试继承了控制,覆盖OnPaint
方法和图形对象上调用RotateTransform
。不过,你可能有麻烦了。特别是,你可能需要重写所有的鼠标事件,并调用基控件的事件用旋转坐标。
您可以通过调用DrawToBitmap方法的面板上,然后转动位图,例如显示它得到一半了在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);
旋转角度不同于90度的增量也是可能的,如果绘制位图成使用GDI另一个位图:
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();
当然,问题是,你只能显示你的面板的图像,而不是面板本身,因此它不再可能与内部控件交互。这也许可以做到为好,但你必须惹窗口消息,这变得更复杂了不少。根据您的需求,您可能还可以与处理点击按键事件的图片框,在面板操纵控制,然后更新图像脱身。
不隶属于 StackOverflow