Создание смарт-тега для формы (не другого элемента управления) с помощью C#

Как форма System.Windows.Forms Унаследовано от Control, мне было интересно, есть ли способ создать пользовательскую форму и ее конструктор с некоторыми опциями (ярлыками) для создания заголовка или чего-то подобного.

Я попробовал это, но ничего не случилось, форма я звоню ManagedForm

[Designer(typeof(ManagedFormDesigner))]
public class ManagedForm : Form{
   //code here
}


[PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] 
public class ManagedFormDesigner : ControlDesigner {
    private DesignerActionListCollection actionLists;
    public override DesignerActionListCollection ActionLists {
        get {
            if (actionLists == null) {
                actionLists = new DesignerActionListCollection();
                actionLists.Add(new ManagedFormDesignerActionList(this.Component));
            }
            return actionLists;
        }
     }
}



public class ManagedFormDesignerActionList : DesignerActionList {
    private ManagedForm managedForm = null;
    private DesignerActionUIService designerActionUISvc = null;

    public ManagedFormDesignerActionList(IComponent component) : base(component) {
        this.managedForm = component as ManagedForm;
        this.designerActionUISvc =
        GetService(typeof(DesignerActionUIService))
        as DesignerActionUIService;
    }

    public override DesignerActionItemCollection GetSortedActionItems() {
        DesignerActionItemCollection items = new DesignerActionItemCollection();
        items.Add(new DesignerActionMethodItem(this, "CreateTitle", "Create Title", "Appearence", true));
        return items;
    }

    public void CreateTitle() {
        Panel pTitulo = new Panel();
        pTitulo.Size= new Size(100,25);
        pTitulo.Dock = DockStyle.Top;
        (this.Component as ManagedForm).Controls.Add(pTitulo);
    }

}

1 ответ

Список действий отображается при нажатии на маленькую стрелку на элементе управления внутри формы (или на компоненте в нижней части конструктора, если объект является компонентом).

Другие вещи, которые вы можете сделать, это управлять глаголами. Обработка глаголов реализована в классе ControlDesigner (ManagedFormDesigner в вашем случае). Вы можете увидеть глаголы, щелкнув правой кнопкой мыши или в нижней части свойств (т.е. TabControl имеет 2 глагола, добавить вкладку и удалить вкладку).

Вы можете реализовать добавление глаголов к классу ControlDesigner (или ComponentDesigner) примерно так:

    private DesignerVerbCollection _verbs;

    public override DesignerVerbCollection Verbs
    {
        get
        {
            if (_verbs == null)
            {
                _verbs = new DesignerVerbCollection();
                _verbs.Add(new DesignerVerb("Create Title", new EventHandler(MyCreateTitleHandler)));
            }
            return _verbs;
        }
    }

    private void MyCreateTitleHandler(object sender, EventArgs e)
    {
        // Do here something but take care to show things via IUIService service
        IUIService uiService = GetService(typeof(IUIService)) as IUIService;
    }
Другие вопросы по тегам