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

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

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

pictureBox1.WaitOnLoad = false; 

然后异步加载图像:

 pictureBox1.LoadAsync("neutrinos.gif"); 

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

 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

 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()); } } } } 

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

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

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