Добавить DesignerVerbs в пользовательскую форму - PullRequest
0 голосов
/ 27 мая 2018

Можно ли добавить DesignerVerbs в пользовательскую форму ?Я пытаюсь создать пользовательский дизайнерский класс для моего пользовательского класса форм и использовать его следующим образом ...

<Designer(GetType(CustomDesigner))>
Public Class CustomForm
    Inherits Form
    '...
End Class

Я также пытаюсь сделать все"работа" в мой класс пользовательской формы вот так ...

Imports System.ComponentModel.Design

Public Class CustomForm
    Inherits Form
    '...
    Private _Verbs As DesignerVerbCollection
    Public ReadOnly Property Verbs() As DesignerVerbCollection
        Get
            If _Verbs Is Nothing Then
                _Verbs = New DesignerVerbCollection From {
                New DesignerVerb("Verb1", New EventHandler(AddressOf EventHandler1)),
                New DesignerVerb("Verb2", New EventHandler(AddressOf EventHandler2))
                }
                _Verbs(0).Visible = False
                _Verbs(1).Visible = True
            End If
            Return _Verbs
        End Get
    End Property
    Private Sub EventHandler1(ByVal sender As Object, ByVal e As EventArgs)
        '...
    End Sub
    Private Sub EventHandler2(ByVal sender As Object, ByVal e As EventArgs)
        '...
    End Sub
End Class

Но без удачи.

1 Ответ

0 голосов
/ 27 мая 2018

Если вы собираетесь добавить несколько пользовательских глаголов в конструктор Form, вам нужно создать новый пользовательский Designer, наследуя от DocumentDesigner и переопределяя множество свойств и методов для воссоздания FormDesigner.

Как более простое решение, вы можете настроить дизайнер базовой формы вашей формы.Допустим, у вас есть Form1 и вы хотите иметь Do Something глагол для него.Для этого, если BaseForm является базовой формой для Form1, достаточно добавить следующий код к BaseForm:

//You may want to add null checking to the code.

protected override void OnHandleCreated(EventArgs e)
{
    base.OnHandleCreated(e);
    if (!DesignMode)
        return;
    var host = (IDesignerHost)this.Site.GetService(typeof(IDesignerHost));
    var designer = host.GetDesigner(this);
    designer.Verbs.Add(new DesignerVerb("Do Something", (obj, args) =>
    {
        MessageBox.Show("Something done!");
    }));
}

В результате Do Something будет добавлено в контекстное меню для вашего Form1:

enter image description here

Если вы хотите пойти по более сложному пути, здесь вы можете найти исходный коддля FormDocumentDesigner, полученного из DocumentDesigner.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...