Simonetos The Greek Ответов: 1

Можно ли добавить designerverbs в пользовательский класс форм?


Можно ли добавить DesignerVerbs на пользовательский класс форм- Я должен попытаться сделать это. пользовательский конструктор класса для моего пользовательский класс форм и используйте его вот так [1] Я также стараюсь делать ВСЮ "работу" в своей жизни . класс пользовательской формы подобный этому [2] Но безрезультатно. Есть идеи, как я могу это сделать? Если это вообще возможно...

Что я уже пробовал:

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

[2]
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 Ответов

Рейтинг:
10

Simonetos The Greek

У меня есть простое решение на мой вопрос здесь около stackoverflow.com.
---
Реза Агаи: Если вы собираетесь добавить некоторые пользовательские глаголы в конструктор формы, вам нужно создать новый пользовательский конструктор, получив его из DocumentDesigner и переопределив множество свойств и методов для воссоздания FormDesigner. В качестве более простого решения вы можете настроить конструктор базовой формы вашей формы. Допустим, у вас есть форма 1, и вы хотите, чтобы сделать что-то глагол для него. Для этого, если BaseForm является базовой формой для вашего Form1, достаточно добавить в BaseForm следующий код:

Protected Overrides Sub OnHandleCreated(ByVal e As EventArgs)
	MyBase.OnHandleCreated(e)
	Dim host = DirectCast(Me.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
	Dim designer = host.GetDesigner(Me)
	designer.Verbs.Add(New DesignerVerb("Do Something", Sub(obj, args)
		MessageBox.Show("Something done!")
	End Sub))
End Sub
В результате, Do Something будет добавлен в контекстное меню для вашей Формы1:
https://i.stack.imgur.com/j2L12.png


Ralf Meier

Спасибо, что разместили результаты своих исследований также и на этом форуме. +5 от меня за это.
Кроме того, содержание этого ответа полезно и для меня ...

Simonetos The Greek

Добро пожаловать, мой друг!!! :)