关于C#窗体Paint事件的小问题
这是拉伸窗体触发Paint事件产生的重绘效果:
看起来根本就没有覆盖重绘前的工作区那部分,这是怎么回事?求高手解惑
我不是想让图片随窗体的变大而放大来充满整个窗体,我是想知道在作用在同一张图片时这两种重绘情况为什么不同, 展开
参考http://bbs.csdn.net/topics/390883549
public Form1()
{
InitializeComponent();
this.ResizeRedraw = true;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(Image.FromFile("imgad.jpg"), new Rectangle(0,0,this.Height, this.Width));/*图像*/
}
谢谢,但我的不是说让图片随窗体变大而放大,我是想明白为什么同时重绘但效果却不一样。
你的代码是怎样的?
private void Form1_Paint(object sender, PaintEventArgs e)
{
//e.Graphics.DrawImage(Image.FromFile("imgad.jpg"), new Rectangle(0,0,this.Height, this.Width));/*图像*/
Image imageFile = Image.FromFile("imgad.jpg");
Graphics newGraphics = Graphics.FromImage(imageFile);
e.Graphics.DrawImage(imageFile, new PointF(0.0F, 0.0F));
newGraphics.Dispose();
}
你应该是要解释原因,不是要解决方案吧?
winForm没有图层的概念,画图很渣,就是整个面板不断刷新,你应该能看到图像不停的闪啊闪啊;
我看了一下你的图,以下几个结论不知道正确否:
图2的边框大于(328, 280);
图2的图像边界是(328, 280);
图2中间灰色部分大小是图一的内框大小。
所以说刷新出图2的结果应该是:先画了面板,然后画了图,再把原先的的面板刷新了一下。至于具体的机理,实在说不清楚,因为大家都知道,WInform的画图实在不咋滴。
我同意winForm其实就是整个面板不断刷新,但我这里图像并没有不停的闪
(328, 280)只是我随便设的,只要图2的Size大于图1就行了,我只是想看到试效果,这个影响不大,所以2.2是对的。因为我就是把他设为(328, 280)的Size,2.3也是对的。
我认为拉伸窗体之后触发的Paint事件,只是作用于前次重绘区域的范围外,并没有覆盖到前次重绘区域,不知道是不是为了效率,我想知道原理。
用 paint
e.Graphics.DrawImage(bmp , new Rectangle(0, 0, this.Width, this.Height));
换成这个,让图片的大小随窗体自动变
谢谢,但我只是想知道为什么两者同时重绘但效果却不同
请问怎么设置?感觉似乎与这无关吧
你不设置拉伸的话 他默认平铺,图片有多大就默认多大啊~话说你不是用的图片是用系统绘制的图吗?
你如果是用的BackGroundImage的话就要把这条属性下面的那条
BackGroundImageLayout设置成Stretch。