Создание смарт-тега для формы (не другого элемента управления) с помощью 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;
}