【问题标题】:Is there a PropertyGrid Collection Editor "Add" button event or override?是否有 PropertyGrid 集合编辑器“添加”按钮事件或覆盖?
【发布时间】:2018-07-18 04:19:34
【问题描述】:
单击 Windows 窗体 PropertyGrid 集合编辑器“添加”按钮时是否触发了事件或函数? (见图)
我想添加一些自定义代码,以便在按下此按钮时运行。
我使用自定义集合作为对象列表 (CollectionBase)。按下“添加”按钮时会调用我的构造函数,但我在调用列表中看不到可以插入一些自定义代码的其他函数。
【问题讨论】:
-
也许吧。首先,重新审视您的CollectionBase 决定:Guidelines for Collections。我已经使用自定义 UITypeEditor 处理了复杂的集合。它会在正在创建的类型上寻找一个接口,并调用该类来做任何事情。我不完全确定 Prop Grid 是否会使用 UITypeEditor,但很容易找到。
标签:
c#
winforms
propertygrid
collectioneditor
custom-collection
【解决方案1】:
没有记录的方法,您必须使用自己的编辑器。但是您可以从标准编辑器类派生。以下是此类 hack 的一个示例:
像这样在集合属性上定义自定义编辑器属性:
[Editor(typeof(MyCollectionEditor), typeof(UITypeEditor))]
public List<Child> Children { get; }
使用此编辑器代码:
// CollectionEditor needs a reference to System.Design.dll
public class MyCollectionEditor : CollectionEditor
{
public MyCollectionEditor(Type type)
: base(type)
{
}
protected override CollectionForm CreateCollectionForm()
{
CollectionForm form = base.CreateCollectionForm();
var addButton = (ButtonBase)form.Controls.Find("addButton", true).First();
addButton.Click += (sender, e) =>
{
MessageBox.Show("hello world");
};
return form;
}
}
添加按钮是一个简单的 Winforms 按钮,因此您可以用它做任何事情。