【发布时间】:2019-03-29 23:18:45
【问题描述】:
我有一个 图片框控件,我已将其制成圆形,现在我正在尝试使用它在其周围画一个红色圆圈:
Graphics gf = pictureBoxLastLogin1.CreateGraphics();
gf.DrawEllipse(new Pen(Color.Red, 2), new Rectangle(0, 0, pictureBoxLastLogin1.Width+12, pictureBoxLastLogin1.Height+12));
但它没有在图像周围绘制任何东西?我做错了什么?请记住,我已使用此代码 sn-p 将方形图像转换为圆形图像。
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
gp.AddEllipse(0, 0, pictureBoxLastLogin.Width , pictureBoxLastLogin.Height);
Region rg = new Region(gp);
pictureBoxLastLogin.Region = rg;
【问题讨论】:
-
对于持久绘图,请使用 Paint 事件,它是 e.Graphics obejtct。对于非持久性绘图不要使控件无效!
-
paint 事件只触发一次,如果我想改变边框颜色怎么办?
-
如果您使用 Paint 事件,您应该更改它使用的颜色,然后对控件执行 Invalidate。
-
永远不要使用 CreateGraphics() 来绘制,你飞溅的像素有一个有限的生命周期。当您在图片框的外部 进行绘制时,必须是父级的 Paint 事件来完成这项工作。确保 pb 的 LocationChanged 和 SizeChanged 事件强制对父级调用 Invalidate()。父级还需要将其 ResizeRedraw 属性设置为 true。显然,当您让 PB 在 PB 内部 绘制边界时,这将更容易进行。
-
此外,区域不允许抗锯齿,这在低分辨率显示器上往往非常明显。当您使用圆形剪辑自己绘制所有内容时,它看起来会好很多。
标签: c# winforms system.drawing