c#用Graphics制图,图形被其他窗体挡住后消失
我每次通过输入不同参数,进行某种运算,得到了4个百分率,我打算用这些数据绘制饼图,并在当前窗体(Form1)中画出来。但是当图画出来之后,如果我打开了另一窗体(Form2...
我每次通过输入不同参数,进行某种运算,得到了4个百分率,我打算用这些数据绘制饼图,并在当前窗体(Form1)中画出来。
但是当图画出来之后,如果我打开了另一窗体(Form2),并且该窗体挡住了饼图,那么该窗体移开后,饼图被挡住的部分就没有了。然后缩小原窗体(Form1),如果一部分图象被挡住了,再把窗体放大,对应位置图象就也没了。
画图的位置超出窗体现有范围就画不出来,但如果先拉大窗体,再画图就画得出来。
所以我希望能够有种方法,能让画出来就切实地保留在窗体上。
这里是绘图方面的部分代码:
Graphics g = pictureBox1.CreateGraphics();
g.Clear(BackColor);//因为每输入一次数据计算就要重新画,所以每次先清了图
g.DrawString("当前情形", font1, black, 35, 20);
g.FillPie(red, 0, 40, 120, 120, 0, ppp1[j]);
g.FillPie(blue, 0, 40, 120, 120, ppp1[j], ppp2[j]);
g.FillPie(gold, 0, 40, 120, 120, ppp1[j] + ppp2[j], ppp3[j]);
g.FillPie(green, 0, 40, 120, 120, ppp1[j] + ppp2[j] + ppp3[j], ppp4[j]);
g.DrawString(bfl1[j], font1, black, x1[j], y1[j]);
g.DrawString(bfl2[j], font1, black, x2[j], y2[j]);
g.DrawString(bfl3[j], font1, black, x3[j], y3[j]);
g.DrawString(bfl4[j], font1, black, x4[j], y4[j]); 展开
但是当图画出来之后,如果我打开了另一窗体(Form2),并且该窗体挡住了饼图,那么该窗体移开后,饼图被挡住的部分就没有了。然后缩小原窗体(Form1),如果一部分图象被挡住了,再把窗体放大,对应位置图象就也没了。
画图的位置超出窗体现有范围就画不出来,但如果先拉大窗体,再画图就画得出来。
所以我希望能够有种方法,能让画出来就切实地保留在窗体上。
这里是绘图方面的部分代码:
Graphics g = pictureBox1.CreateGraphics();
g.Clear(BackColor);//因为每输入一次数据计算就要重新画,所以每次先清了图
g.DrawString("当前情形", font1, black, 35, 20);
g.FillPie(red, 0, 40, 120, 120, 0, ppp1[j]);
g.FillPie(blue, 0, 40, 120, 120, ppp1[j], ppp2[j]);
g.FillPie(gold, 0, 40, 120, 120, ppp1[j] + ppp2[j], ppp3[j]);
g.FillPie(green, 0, 40, 120, 120, ppp1[j] + ppp2[j] + ppp3[j], ppp4[j]);
g.DrawString(bfl1[j], font1, black, x1[j], y1[j]);
g.DrawString(bfl2[j], font1, black, x2[j], y2[j]);
g.DrawString(bfl3[j], font1, black, x3[j], y3[j]);
g.DrawString(bfl4[j], font1, black, x4[j], y4[j]); 展开
1个回答
展开全部
Graphics g = pictureBox1.CreateGraphics();
这样生成Graphics对象就会导致你说的问题。
你应该重写pictureBox1的onDraw方法或者产生一个bitmap将之赋值给pictureBox1
这样生成Graphics对象就会导致你说的问题。
你应该重写pictureBox1的onDraw方法或者产生一个bitmap将之赋值给pictureBox1
追问
这个,能不能具体一点?
我解决不了这个问题,肯定也是不知道你提到的方法该如何用的。
追答
using System.Drawing;
使用:
pictureBox1.img=getBitMapFile(pictureBox1.Width,pictureBox1.Height);
函数:
prviate BitMap getBitMapFile(int w,int h)
{
BitMap img=new BitMap(w,h);
Graphics g=Graphics.CreatFromImg(img);
g.DrawString("当前情形", font1, black, 35, 20);
g.FillPie(red, 0, 40, 120, 120, 0, ppp1[j]);
g.FillPie(blue, 0, 40, 120, 120, ppp1[j], ppp2[j]);
g.FillPie(gold, 0, 40, 120, 120, ppp1[j] + ppp2[j], ppp3[j]);
g.FillPie(green, 0, 40, 120, 120, ppp1[j] + ppp2[j] + ppp3[j], ppp4[j]);
g.DrawString(bfl1[j], font1, black, x1[j], y1[j]);
g.DrawString(bfl2[j], font1, black, x2[j], y2[j]);
g.DrawString(bfl3[j], font1, black, x3[j], y3[j]);
g.DrawString(bfl4[j], font1, black, x4[j], y4[j]);
return img;
}
大概是这样 因为可能有些拼写有问题你自己参考就可以了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询