【问题标题】:How to raise an event when an Bitmap property is changed? [duplicate]位图属性更改时如何引发事件? [复制]
【发布时间】:2021-04-10 00:20:53
【问题描述】:

我有一个位图和一个像这样的属性:

   private Bitmap host_Bitmap;
   private Bitmap Host_Bitmap {get;set;}

host_Bitmap 更改时如何创建事件?

【问题讨论】:

标签: c# properties inotifypropertychanged propertychanged propertychangelistener


【解决方案1】:

如果你想对一个属性采取简单的路线,你可以添加一个事件,然后在集合中调用它:

public event EventHandler BitmapChanged;

private Bitmap _hostBitmap;
public Bitmap HostBitmap { get => _hostBitmap;
  set{
    _hostBitmap = value;
    BitmapChanged?.Invoke(this, EventArgs.Empty);
  }
}

如果您想传递有关事件的更多信息,您可以提供修改后的 EventArgs 子类并将 BitmapChanged 属性类型声明为 EventHandler<YourEventArgsSubclass>

如果您有很多与事件相关联的属性,请查看实现 INotifyPropertyChanged

【讨论】:

  • 也可以创建delegate 来代替EventHandler<> 用于事件的类型,因此它将是强类型的。
  • @OlivierRogier:虽然我觉得这个答案没有多大用处(网站上已经有很多重复项),但我不明白你在这里的批评。 EventHandlerEventHandler<T> 类型 both 已经是委托类型。使用任何一种都可以像使用任何其他委托类型一样创建“强类型”事件。
  • @Olivier 是的,但这可能仅在特殊情况下才有必要,例如在不理解通用 EventHandler<T> 的上下文中 - documentation 概述了它不应该是真的有必要这样做,所以我不确定说“代替”是“正确的”,因为(对我而言)它暗示了一种通常必要的情况,而实际上却没有必要?
  • 我所说的在泛型之上的强类型并不是批评,而是另一种意思,有时使用专用类型(例如MyPropertyChanged 委托)可以更容易和更清晰一个间接的Eventhandler<MyArgs>。否则,我会找到适合的和个性化的答案。
  • 谢谢你的帮助,我去试试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多