首先确保图像是异步加载的.为此,请将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
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是否已更改
如果您使用Load()或LoadAsync(),则有加载事件,但不适用于该Image属性。这是由您(开发人员)明确设置的,通常在您的控制范围内 100%(请参阅下面的符号)。如果你真的想要(虽然没有真正的意义),你可以UserControl从属性派生PictureBox并覆盖Image属性,并实现你自己的事件处理程序。
符号 我想您希望事件订阅的一个事件是,如果您正在使用某些第三方组件或控件来更改图像属性,并且您希望在发生这种情况时实现某种子例程。在这种情况下,这将是需要 ImageChanged 事件的一个原因,因为您无法控制何时设置图像。不幸的是,仍然没有办法规避这种情况。