Windows Form中的PictureBox有一个缺点,就是当图形加载时,也就是属性Image改变时,没有事件触发。下面是对这控件的扩展。增加了Image属性改变前后的事件。

附件是运行效果。

 

  1. public class PictureBoxEx : PictureBox  
  2. {  
  3.     #region 属性  
  4.  
  5.     //新的Image属性  
  6.     public new Image Image  
  7.     {  
  8.         get { return base.Image; }  
  9.         set 
  10.         {  
  11.             ImageChangingEventArgs e = new ImageChangingEventArgs(value);  
  12.             OnImageChanging(e);  
  13.             if (!e.Cancel)  
  14.             {  
  15.                 base.Image = value;  
  16.                 OnImageChanged(new ImageChangedEventArgs(base.Image));  
  17.             }  
  18.         }  
  19.     }  
  20.     #endregion  
  21.  
  22.     #region 自定义事件  
  23.     //自定义 ImageChanging与ImageChanged事件  
  24.  
  25.     [Category("属性已更改"), Description("当控件上的 Image 属性值更改后引发的事件。")]  
  26.     public event EventHandler<ImageChangedEventArgs> ImageChanged;  
  27.  
  28.     protected virtual void OnImageChanged(ImageChangedEventArgs e)  
  29.     {  
  30.         if (ImageChanged != null)  
  31.             ImageChanged(this, e);  
  32.     }  
  33.  
  34.     public delegate void CancelEventHandler(object sender, ImageChangingEventArgs e);  
  35.     [Category("属性已更改"), Description("当控件上的 Image 属性值更改前引发的事件。")]  
  36.     public event CancelEventHandler ImageChanging;  
  37.  
  38.     protected virtual void OnImageChanging(ImageChangingEventArgs e)  
  39.     {  
  40.         if (ImageChanging != null)  
  41.             ImageChanging(this, e);  
  42.     }  
  43.     #endregion  
  44. }  
  45.  
  46. #region 事件类  
  47. public class ImageChangedEventArgs : EventArgs  
  48. {  
  49.     public Image Image  
  50.     {  
  51.         get { return _Image; }  
  52.     }  
  53.     private readonly Image _Image;  
  54.  
  55.     public ImageChangedEventArgs(Image p_w_picpath)  
  56.     {  
  57.         this._Image = p_w_picpath;  
  58.     }  
  59. }  
  60.  
  61. public class ImageChangingEventArgs : CancelEventArgs  
  62. {  
  63.     public Image Image  
  64.     {  
  65.         get { return _Image; }  
  66.     }  
  67.     private readonly Image _Image;  
  68.  
  69.     public ImageChangingEventArgs(Image p_w_picpath)  
  70.     {  
  71.         this._Image = p_w_picpath;  
  72.     }  
  73. }