我怎么知道图片框的图像何时更改?是否有图像更改事件?
首先请确保图像是异步加载的。为此,将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
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事件捕获图像是否已更改
如果使用Load()
或LoadAsync()
,则有加载事件,但对于Image
属性则不。这是由您(开发人员)明确设置的,通常是您控制的100%(请参见下面的符号)。如果您确实想这样做(虽然没有什么意义),则可以从UserControl
派生您自己的PictureBox
并覆盖Image
属性,并实现自己的事件处理程序。
符号我想一个事件,如果您正在使用某些更改图像属性的第三方组件或控件,并且想要在发生这种情况时实现某种子例程,则您希望事件可以订阅。在这种情况下,这是需要ImageChanged事件的原因,因为您无法控制设置图像的时间。不幸的是,仍然没有办法避免这种情况。
Paint
事件正在运行:
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
// image has changed
}