如何向Control Designer添加属性?

时间:2018-02-04 16:07:02

标签: c# winforms windows-forms-designer

我正在使用设计器(继承自ControlDesigner)进行自定义控件。

我知道如何使用DesignerVerbCollection添加动词。但我不知道如何添加与Control属性相关的动词和下拉列表。

这是一张解释我的意思的图片。

Designer

我的Visual Studio版本是西班牙语,所以我可以翻译一些例子:

  • Editar elementos ...>编辑项目......
  • Editar columnas ...>编辑专栏......
  • Editar grupos ...>编辑群组
  • Vista>图
  • ImageListpequeña>小ImageList
  • ImageList grande>大图像列表

我知道Edit items...是一个动词,但我不知道如何打开该集合。

View和ImageList属性是组合框。我不知道如何添加组合框。

编辑:我在问这个问题之前用Google搜索,但是我找不到与我的问题有关的任何内容。

编辑2:我不想将ListView属性添加到我的控件中。我只需要将自定义属性添加到自定义控件的设计器中。

编辑3:我检查了https://referencesource.microsoft.com/#System.Design/System/Windows/Forms/Design/ListViewDesigner.cs,c996e9fb36c3ed37但.NET源代码显示了无体代码。

1 个答案:

答案 0 :(得分:0)

DesignerActionList是你要找的东西。

public class MyControlDesigner : ControlDesigner {

    private DesignerActionListCollection _ActionLists;
    private MyControl myControl;

    public MyControlDesigner() : base() {
        _ActionLists = new DesignerActionListCollection();
        _ActionLists.AddRange(base.ActionLists);
        _ActionLists.Add(new MyActionList(this));
    }

    public override DesignerActionListCollection ActionLists {
        get {
            return _ActionLists;
        }
    }

    public override void Initialize(IComponent component) {
        base.Initialize(component);
        if (Control is MyControl) {
            myControl = (MyControl) Control;
        }
    }

    public class MyActionList : DesignerActionList {

        private MyControlDesigner Designer;

        public MyActionList(MyControlDesigner Designer) : base(Designer.Component) {
            this.Designer = Designer;
        }

        public string MyProperty {
            get {
                return Designer.myControl.MyProperty;
            }
            set {
                Designer.myControl.MyProperty = value;
            }
        }

        public override DesignerActionItemCollection GetSortedActionItems() {
            DesignerActionItemCollection items = new DesignerActionItemCollection();
            //Replace Behavior with your property's category (if applicable)
            items.Add(new DesignerActionPropertyItem("MyProperty", "My property", "Behavior", "This is my property in the designer"));
            return items;
        }

    }

}
属性

DesignerActionPropertyItem

DesignerActionMethodItem行动

有关详细信息:https://msdn.microsoft.com/en-us/library/sey0f414.aspx