是否有事件更改PictureBox控件的图像?

问题描述 投票:11回答:4

我怎么知道图片框的图像何时更改?是否有图像更改事件?

c# winforms events picturebox
4个回答
9
投票

首先请确保图像是异步加载的。为此,将PictureBox的WaitOnLoad property设置为false(这是默认值)。

pictureBox1.WaitOnLoad = false;

然后异步加载图像:

pictureBox1.LoadAsync("neutrinos.gif");

为PictureBox的LoadCompleted事件创建事件处理程序。当异步图像加载操作完成,取消或引起异常时,将触发此事件。

pictureBox1.LoadCompleted += PictureBox1_LoadCompleted;

private void PictureBox1_LoadCompleted(Object sender, AsyncCompletedEventArgs e) 
{       
    //...       
}

您可以在MSDN上找到有关此事件的更多信息:

http://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.loadcompleted.aspx


6
投票
using System;
using System.Windows.Forms;
using System.Drawing;

namespace CustomPX
{
    public class CustomPictureBox : PictureBox
    {
        public event EventHandler ImageChanged;
        public Image Image
        {
            get
            {
                return base.Image;
            }
            set
            {
                base.Image = value;
                if (this.ImageChanged != null)
                    this.ImageChanged(this, new EventArgs());
            }
        }
    }
}

您可以将此类添加到工具箱和/或从代码中添加,并使用ImageChanged事件捕获图像是否已更改


4
投票

如果使用Load()LoadAsync(),则有加载事件,但对于Image属性则不。这是由您(开发人员)明确设置的,通常是您控制的100%(请参见下面的符号)。如果您确实想这样做(虽然没有什么意义),则可以从UserControl派生您自己的PictureBox并覆盖Image属性,并实现自己的事件处理程序。

符号我想一个事件,如果您正在使用某些更改图像属性的第三方组件或控件,并且想要在发生这种情况时实现某种子例程,则您希望事件可以订阅。在这种情况下,这是需要ImageChanged事件的原因,因为您无法控制设置图像的时间。不幸的是,仍然没有办法避免这种情况。


0
投票

Paint事件正在运行:

private void pictureBox_Paint(object sender, PaintEventArgs e)
{
    // image has changed
}
© www.soinside.com 2019 - 2024. All rights reserved.