繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM