C# PictureBox控件是否存在图像更改事件?
如何知道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设置为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
}