关于C#窗体Paint事件的小问题

我发现拉伸窗体会Form窗体会触发Paint事件,但是效果似乎很差,如这是正常的重绘效果:这是拉伸窗体触发Paint事件产生的重绘效果:看起来根本就没有覆盖重绘前的工作区... 我发现拉伸窗体会Form窗体会触发Paint事件,但是效果似乎很差,如这是正常的重绘效果:

这是拉伸窗体触发Paint事件产生的重绘效果:

看起来根本就没有覆盖重绘前的工作区那部分,这是怎么回事?求高手解惑
我不是想让图片随窗体的变大而放大来充满整个窗体,我是想知道在作用在同一张图片时这两种重绘情况为什么不同,
展开
 我来答
178******56
推荐于2016-10-28 · TA获得超过124个赞
知道小有建树答主
回答量:592
采纳率:0%
帮助的人:679万
展开全部

参考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();
}
anji728
2014-09-22 · 超过26用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:66.3万
展开全部

你应该是要解释原因,不是要解决方案吧?

  1. winForm没有图层的概念,画图很渣,就是整个面板不断刷新,你应该能看到图像不停的闪啊闪啊;

  2. 我看了一下你的图,以下几个结论不知道正确否:

    1. 图2的边框大于(328, 280);

    2. 图2的图像边界是(328, 280);

    3. 图2中间灰色部分大小是图一的内框大小。

所以说刷新出图2的结果应该是:先画了面板,然后画了图,再把原先的的面板刷新了一下。至于具体的机理,实在说不清楚,因为大家都知道,WInform的画图实在不咋滴。

追问
  1. 我同意winForm其实就是整个面板不断刷新,但我这里图像并没有不停的闪

  2. (328, 280)只是我随便设的,只要图2的Size大于图1就行了,我只是想看到试效果,这个影响不大,所以2.2是对的。因为我就是把他设为(328, 280)的Size,2.3也是对的。

我认为拉伸窗体之后触发的Paint事件,只是作用于前次重绘区域的范围外,并没有覆盖到前次重绘区域,不知道是不是为了效率,我想知道原理。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫夜梦廻
2014-09-22
知道答主
回答量:13
采纳率:0%
帮助的人:8万
展开全部
不要用 paint 来实现, 你可以用 BackgroundImage 属性 和 this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; 来实现

用 paint
e.Graphics.DrawImage(bmp , new Rectangle(0, 0, this.Width, this.Height));
换成这个,让图片的大小随窗体自动变
追问
谢谢,但我只是想知道为什么两者同时重绘但效果却不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
为啥啊不能重名
2014-09-22 · TA获得超过459个赞
知道小有建树答主
回答量:889
采纳率:0%
帮助的人:320万
展开全部
背景图片的属性要设置成Stretch(拉伸)
更多追问追答
追问
请问怎么设置?感觉似乎与这无关吧
追答
你不设置拉伸的话 他默认平铺,图片有多大就默认多大啊~话说你不是用的图片是用系统绘制的图吗?
你如果是用的BackGroundImage的话就要把这条属性下面的那条
BackGroundImageLayout设置成Stretch。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式