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

sar*_*i k 11 c# events picturebox winforms

我如何知道图片框的图像何时发生变化?
是否有图像更改事件?

Chr*_*ers 9

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

pictureBox1.WaitOnLoad = false;
Run Code Online (Sandbox Code Playgroud)

然后异步加载图像:

pictureBox1.LoadAsync("neutrinos.gif");
Run Code Online (Sandbox Code Playgroud)

为PictureBox的LoadCompleted事件创建一个事件处理程序.异步映像加载操作完成,取消或导致异常时会触发此事件.

pictureBox1.LoadCompleted += PictureBox1_LoadCompleted;

private void PictureBox1_LoadCompleted(Object sender, AsyncCompletedEventArgs e) 
{       
    //...       
}
Run Code Online (Sandbox Code Playgroud)

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

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


Bur*_*imi 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());
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以将此类添加到ToolBox和/或代码中,并使用ImageChanged事件来捕获Image是否已更改


Dav*_*son 5

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

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