我有一个图片框控件,该控件已制成圆形,现在我正尝试使用此控件在其周围绘制一个红色圆圈:
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;
答案 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
。Region
将Invalidate()
PictureBox
,从而导致重新绘制要进行预定。 Button2
事件将引发。
PictureBox
视觉结果: