c# - 如何制作用于更改自定义属性的事件(自定义控件)
问题描述
我有从 TextBox 类继承的自定义控件,并且我添加了一些属性,例如我有属性 placeHolderText 并且我想要一些在我更改该文本时会发生的事件?
像这些事件
在设计器视图中有我的属性
如何实现?
解决方案
要在 C# 中创建事件,您可以遵循标准 .NET 事件模式。
要为自定义控件的属性创建Changed
事件,您可以按照以下步骤操作:Something
- 声明一个事件
SomethingChanged
。它可以是任何委托,作为一般委托,您可以依赖EventHandler
委托,或者EventHandler<T>
,如果您希望拥有特定的事件参数而不是使用EventArgs
. - 创建一个
OnSomethingChanged
接受事件参数并负责引发事件的受保护虚拟方法。因此,如果使用此方法,您应该在正文中引发事件。 - 在属性设置器中,检查值是否与当前值不同,分配它并调用
OnSomethingChanged
以引发事件。
例子
public EventHandler PlaceHolderChanged;
string placeholder;
public string PlaceHolder
{
get { return placeholder; }
set
{
if (placeholder != value)
{
placeholder = value;
OnPlaceHolderChanged(EventArgs.Empty);
}
}
}
protected virtual void OnPlaceHolderChanged(EventArgs e)
{
PlaceHolderChanged?.Invoke(this, e);
}
推荐阅读
- python - if else 语句在不同的行
- c++ - 调用 QMap 中注册的指针函数
- c++ - 当我使用向量的向量实现图数据结构时,如何解决无输出问题?
- javascript - 如何使用 Vivus js 沿 SVG 路径为形状或图像文件设置动画?
- css - 从 Zeplin 到网站的组件的高度和宽度
- swift - 从二维数组中提取数据
- node.js - 在 GCP 上将 Nginx、Nodejs 和 Redis 一起部署在一个虚拟机上好不好?
- python - Python:尝试将数据帧写入 influxdb 并收到消息“IndexError:列表索引超出范围”
- django - WagtailAdminPageForm 和 URL 未保存在管理员中或传递到页面
- algorithm - 这种容忍链路故障的两节点系统的领导者选举算法是否可以被认为是一项重大创新?