另一个图像周围的圆形边框未在Winforms中绘制

时间:2018-10-25 11:00:13

标签: c# winforms system.drawing

我有一个图片框控件,该控件已制成圆形,现在我正尝试使用此控件在其周围绘制一个红色圆圈:

 Graphics gf = pictureBoxLastLogin1.CreateGraphics();
 gf.DrawEllipse(new Pen(Color.Red, 2), new Rectangle(0, 0, pictureBoxLastLogin1.Width+12, pictureBoxLastLogin1.Height+12));

但是它没有在图像周围绘制任何东西吗?我做错了什么?请记住,我已使用此代码段将正方形图像转换为圆形图像。

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;

2 个答案:

答案 0 :(得分:1)

一旦您使它失效,Windows将重新绘制它,而这又将删除您对其所做的任何绘制。

使用Paint事件,无论您要在绘画事件中绘制什么,都将保留在那里。

答案 1 :(得分:0)

当我们在控件上绘制并且希望图形继续存在时,我们需要订阅该控件的Paint()事件。或者,如果它是一个自定义控件(从现有对象派生的自定义类),则覆盖它的OnPaint()方法。

控制DC经常重绘。当另一个窗口在其上方移动时,如果其Form容器被最小化/最大化或调整大小,则如果该容器触摸了控件可见区域,依此类推。

需要重绘时,会引发Paint()事件。
仅当在Paint()事件处理程序(或OnPaint()方法)中对图形进行编码时,才会保留图形。
还必须注意,大多数使用的对象都实现了IDisposable()
它们都必须是Disposed()。这里是GraphicsPath对象和图形Pen
应用于Region的{​​{1}}也应该被丢弃。它可以在类范围内声明,并在PicturBox关闭时处置。

使用(或多或少)问题中使用的相同设置的示例。


包含Form和2 Form的{​​{1}}:
单击PictureBox时,它将为Buttons创建一个椭圆形Button1
RegionInvalidate() PictureBox,从而导致重新绘制要进行预定Button2事件将引发。

PictureBox

视觉结果:

enter image description here