【问题标题】: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 按钮,因此您可以用它做任何事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多