为什么我在某些函数里不能画图?比如form的构造函数,Form1_Load函数,甚至于Form_Paint还得用e.Graphics才能使用,CreateGraphics()都没反应。谁懂得GDI这方面的原理?
解决方案 »
- C#下使用DOS命令怎么判断是否执行成功,怎么退出
- C#中serialport控件的pinchanged使用
- vs2008 web开发debug后无法打开localhost
- C#生成的文件出错会显示详细的错误信息,能不能去掉
- 我在access中可以存入照片(照片转化成二进制流的形式),可是怎么从access中再把照片读出来呢?
- 关于文件下载的问题
- [我求助c#]获取SQL中id字段的最大值(我是菜地)
- 不太明白:" .NET 框架类库" 帮助之 "线程安全" 的具体含义
- 怎样远程调用com+!!!
- 外行问一个关于c#拟合插值问题
- 100分求基于C/S的三层架构的思路和C#代码
- 批量更新数据库的问题
如果没有就需要自己创建了,在控件上画图:graphics g=control.creategraphics();
图片的话:graphics g=graphics.fromimage(image1);
还有不要在构造函数里面画控件,会出错(句柄未创建)
需要注意画图程序执行的时间,比方说你的画图在构造函数“public Form1()”或窗体加载函数“Form1_Load”中,因为这两个函数都是在“private void Form1_Paint”之前执行的,就是说即使你画图成功也会被“private void Form1_Paint”清掉。鉴于这种情况,你可以把画图程序写在“Form1_Paint”中,不过这样有个问题就是当Form1中任意一个控件发生改变(颜色,大小,位置等)时,都会触发“Form1_Paint”事件而导致图片重绘。
对于e.Graphics和CreateGraphics,我的理解是先定义一块画图板,然后在上面进行绘图操作。
{
Image img = Image.FromFile(@"C:\Documents and Settings\Administrator\桌面\头像\fate1.jpg");
Brush b1 = new TextureBrush(img);
g = e.Graphics; //和下面一行有差别,下面那行会一闪而过,这行代码不会。求教
//g = this.pictureBox1.CreateGraphics();
g.DrawImage(img, 10, 10);
}
你可以自己写一段代码来比较一下,比如在窗体上画一个圆,然后以两个方式触发,一是按钮点击以后用CreateGraphics创建Graphics,二是Paint事件。第一种方式的确能够画上,但你试着最小化再还原,或者把窗体移出屏幕后再移回来就会发现圆不见了,需要再点一下按钮才能出现。而对于第二种方式,无论怎么折腾,圆依然存在。