Windows Form中的PictureBox有一個缺點,就是當圖形加載時,也就是屬性Image改變時,沒有事件觸發。下面是對這控件的擴展。增加了Image屬性改變前後的事件。
附件是運行效果。
- public class PictureBoxEx : PictureBox
- {
- #region 屬性
- //新的Image屬性
- public new Image Image
- {
- get { return base.Image; }
- set
- {
- ImageChangingEventArgs e = new ImageChangingEventArgs(value);
- OnImageChanging(e);
- if (!e.Cancel)
- {
- base.Image = value;
- OnImageChanged(new ImageChangedEventArgs(base.Image));
- }
- }
- }
- #endregion
- #region 自定義事件
- //自定義 ImageChanging與ImageChanged事件
- [Category("屬性已更改"), Description("當控件上的 Image 屬性值更改後引發的事件。")]
- public event EventHandler<ImageChangedEventArgs> ImageChanged;
- protected virtual void OnImageChanged(ImageChangedEventArgs e)
- {
- if (ImageChanged != null)
- ImageChanged(this, e);
- }
- public delegate void CancelEventHandler(object sender, ImageChangingEventArgs e);
- [Category("屬性已更改"), Description("當控件上的 Image 屬性值更改前引發的事件。")]
- public event CancelEventHandler ImageChanging;
- protected virtual void OnImageChanging(ImageChangingEventArgs e)
- {
- if (ImageChanging != null)
- ImageChanging(this, e);
- }
- #endregion
- }
- #region 事件類
- public class ImageChangedEventArgs : EventArgs
- {
- public Image Image
- {
- get { return _Image; }
- }
- private readonly Image _Image;
- public ImageChangedEventArgs(Image image)
- {
- this._Image = image;
- }
- }
- public class ImageChangingEventArgs : CancelEventArgs
- {
- public Image Image
- {
- get { return _Image; }
- }
- private readonly Image _Image;
- public ImageChangingEventArgs(Image image)
- {
- this._Image = image;
- }
- }