WinForm中两个PictureBox调用FillEllipse()仅第一个可绘制问题求助
问题分析与解决办法
嘿,我一眼就瞅出你代码里的问题啦!你在绘制椭圆的时候踩了个坐标系的坑:
- 每个
PictureBox的Graphics对象用的是控件自身的内部坐标系,控件左上角就是坐标原点(0,0)。 - 但你现在用的是
pictureBox1.Location和pictureBox2.Location,这个属性是控件相对于窗体的位置坐标。用这个值计算绘制位置,相当于在第二个PictureBox里从它在窗体上的偏移处开始画,这早就超出了控件的可视范围,自然看不到图形。
修正后的代码
方案1:修改原有两个Paint方法
只需要把绘制坐标改成相对于控件内部的,去掉p1.X、p1.Y这类窗体级坐标就行:
public Form1() { InitializeComponent(); pictureBox1.Paint += new PaintEventHandler(this.pictureBox1_Paint); pictureBox2.Paint += new PaintEventHandler(this.pictureBox2_Paint); } private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics gr = e.Graphics; // 直接使用控件内部坐标,左上角为(0,0) gr.FillEllipse(new SolidBrush(Color.Red), new Rectangle(40, 40, 20, 20)); gr.FillEllipse(new SolidBrush(Color.Red), new Rectangle(40, 80, 20, 20)); gr.FillEllipse(new SolidBrush(Color.Red), new Rectangle(80, 40, 20, 20)); gr.FillEllipse(new SolidBrush(Color.Red), new Rectangle(80, 80, 20, 20)); } private void pictureBox2_Paint(object sender, PaintEventArgs e) { Graphics br = e.Graphics; // 同样使用控件内部坐标 br.FillEllipse(new SolidBrush(Color.Red), new Rectangle(40, 40, 20, 20)); br.FillEllipse(new SolidBrush(Color.Red), new Rectangle(40, 80, 20, 20)); br.FillEllipse(new SolidBrush(Color.Red), new Rectangle(80, 40, 20, 20)); br.FillEllipse(new SolidBrush(Color.Red), new Rectangle(80, 80, 20, 20)); }
方案2:合并Paint事件(更优雅)
既然两个PictureBox的绘制逻辑完全一样,你可以只写一个Paint方法,通过sender参数获取当前触发事件的控件,避免重复代码:
public Form1() { InitializeComponent(); pictureBox1.Paint += PictureBox_Paint; pictureBox2.Paint += PictureBox_Paint; } private void PictureBox_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; // 不管是哪个PictureBox,都用内部坐标绘制 g.FillEllipse(new SolidBrush(Color.Red), new Rectangle(40, 40, 20, 20)); g.FillEllipse(new SolidBrush(Color.Red), new Rectangle(40, 80, 20, 20)); g.FillEllipse(new SolidBrush(Color.Red), new Rectangle(80, 40, 20, 20)); g.FillEllipse(new SolidBrush(Color.Red), new Rectangle(80, 80, 20, 20)); }
这样修改后,两个PictureBox里都会正常显示四个红色椭圆啦!
内容的提问来源于stack exchange,提问作者Andrian Babii
相关产品推荐
相关产品推荐

