[英]Is there an event for an image change for a PictureBox Control?
我如何知道图片框的图像何时发生变化?
是否有更改图像的事件?
首先确保图像是异步加载的。 为此,请将 PictureBox 的WaitOnLoad 属性设置为 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());
}
}
}
}
您可以将此类添加到 ToolBox 和/或从代码中,并使用 ImageChanged 事件来捕捉图像是否已更改
如果您使用Load()
或LoadAsync()
,则有加载事件,但不适用于Image
属性。 这是由您(开发人员)明确设置的,通常在您的控制范围内 100%(请参阅下面的符号)。 如果您真的想这样做(不过这并没有什么意义),您可以从PictureBox
派生您自己的UserControl
并覆盖Image
属性,并实现您自己的事件处理程序。
符号我想您希望事件订阅的一个事件是,如果您正在使用某些第三方组件或控件来更改图像属性,并且您希望在发生这种情况时实现某种子例程。 在这种情况下,这将是需要 ImageChanged 事件的一个原因,因为您无法控制何时设置图像。 不幸的是,仍然没有办法规避这种情况。
Paint
事件正在运行:
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
// image has changed
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.