Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PictureBox控件是否存在图像更改事件?_C#_Winforms_Events_Picturebox - Fatal编程技术网

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

C# PictureBox控件是否存在图像更改事件?,c#,winforms,events,picturebox,C#,Winforms,Events,Picturebox,如何知道picturebox的图像何时更改? 是否存在图像更改事件?首先确保以异步方式加载图像。为此,请将PictureBox设置为false(默认值) 然后异步加载映像: pictureBox1.LoadAsync("neutrinos.gif"); 为PictureBox的LoadCompleted事件创建事件处理程序。异步映像加载操作完成、取消或导致异常时,会触发此事件 pictureBox1.LoadCompleted += PictureBox1_LoadCompleted; pr

如何知道picturebox的图像何时更改?

是否存在图像更改事件?

首先确保以异步方式加载图像。为此,请将PictureBox设置为false(默认值)

然后异步加载映像:

pictureBox1.LoadAsync("neutrinos.gif");
为PictureBox的LoadCompleted事件创建事件处理程序。异步映像加载操作完成、取消或导致异常时,会触发此事件

pictureBox1.LoadCompleted += PictureBox1_LoadCompleted;

private void PictureBox1_LoadCompleted(Object sender, AsyncCompletedEventArgs e) 
{       
    //...       
}
您可以在MSDN上找到有关此事件的更多信息:


如果使用
load()
LoadAsync()
,则会出现加载事件,但不适用于
图像
属性。这是由您(开发人员)明确设置的,通常是在100%的控件中设置的(请参见下面的符号)。如果您真的想这样做(虽然这没有什么意义),您可以从
PictureBox
派生您自己的
UserControl
,覆盖
Image
属性,并实现您自己的事件处理程序

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

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事件捕获图像是否已更改绘制事件是否正常工作:

private void pictureBox_Paint(object sender, PaintEventArgs e)
{
    // image has changed
}

我不认为会发生这样的事件,因为这是您将更改/设置图像。@Waqas如果您正在构建一个用户控件库,并且图像更改可能比您需要图像更改事件更重要。但是,您可以再次继承PictureBox制作并修改PictureBox。image Get/Set方法是您可以触发自定义事件或调用方法!
Paint
事件将在
Image
更改时触发,也会在resize、Invalidate()等时触发。。。
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
    // image has changed
}