声明生成器






4.50/5 (2投票s)
一个帮助生成事件/属性代码的工具,以便您的类的用户可以使用嵌入类的事件/属性
引言
如果您正在开发一个[用户控件](或[类]),
如果您的[用户控件]包含其他[控件](按钮,文本框,标签,.......等等),
如果您想公开嵌入控件的事件/属性,
您有两个选择
- 重新编写您需要的每个事件的声明,并逐个引发它们。 如果你想公开所有事件/属性,那将花费很长时间。 如果您有多个嵌入控件,那么就开始吧,您的学生会完成它。
- 将嵌入控件的“可访问级别”(修饰符)设置为允许从您的[用户控件]外部查看它们,例如“
Public
”。
然后,您的[用户控件]的用户必须编写如下代码才能使用事件Dim WithEvents EmbeddedControl As New EmbeddedControlType Private Sub SomeSub() 'now " UserControl1" is an object of Your UserControlType EmbeddedControl = UserControl1.EmbeddedControl End Sub Private Sub HandlerSub(ByVal Sender As Object, ByVal e As EventArgs) _ Handles EmbeddedControl.EventName 'do your thing End Sub
请注意,用户必须意识到他所做的每一件事,因为 IDE 不会帮助他创建“
Sub
”“HandlerSub
”,……除此之外,他做了不必要的事情。
所以…………
这是一个帮助您为嵌入控件生成事件/属性声明的工具(选项 1),因此您的[用户控件]的用户必须编写如下代码才能使用事件
Private Sub UserControl1_EmbeddedControlEventName( _
ByVal Sender As Object, ByVal e As System.EventArgs) _
Handles UserControl1. EmbeddedControlEventName
'do your thing
End Sub
除此之外,用户将使用 IDE 创建“Sub
”“Tool_EmbeddedToolEventName
”。
这是该工具的屏幕截图

未来的想法
- 生成属性/事件属性和 XML 注释(该过程已开始,但在当前版本中结果并不令人满意)。
我可以等到工具准备好,但我选择不等待,因为我不会很快开发这个想法,并且我想让人们现在使用它,如果他们喜欢它(而不是等待我)。 - 通过允许用户添加程序集以搜索数据类型,在其他程序集中进行搜索,它不会花费太多时间来编程,但我尚未支持它。
背景
显然,该工具全部关于反射,并且需要导入命名空间System.Reflection
Imports System.Reflection
还有一件事,我使用了扩展方法来使代码架构更方便,更强大,它需要导入命名空间System.Runtime.CompilerServices
Imports System.Runtime.CompilerServices
Using the Code
例如,负责生成事件声明的代码是
#Region "Extending the 'EventInfo' Type"
<Extension()> _
Private Function GetEventDeclaretion(ByVal eve As EventInfo, _
ByVal ControlName As String _
) As String
Dim DelegateType As Type = eve.EventHandlerType
Dim Invoke As MethodInfo = DelegateType.GetMethod("Invoke")
Dim Pars As ParameterInfo() = Invoke.GetParameters()
Dim EventName As String = ControlName & eve.Name
Dim ParamsNamesArr = (From p In Pars Select p.Name).ToArray
Dim ParamsNamesStr As String = " ( " & String.Join(" , ", ParamsNamesArr) & " )"
Dim paramsDeclarationsArr = (From p In Pars _
Select (p.Name & " As " & p.ParameterType.ToString) _
).ToArray
Dim paramsDeclarationsStr As String = " ( " & String.Join(" , ", _
paramsDeclarationsArr) & " )"
Dim EventInvokeMethodeName As String = String.Format("{0}{1}{2}", _
ControlName, eve.Name, paramsDeclarationsStr)
Dim RaiseEventStatment As String = vbTab & "RaiseEvent " & _
EventName & ParamsNamesStr
Dim EventDeclaration As String = "Public Event " & _
EventInvokeMethodeName & vbCrLf
EventDeclaration &= String.Format("Private Sub m_{0} _
Handles {1}.{2}{4}{3}{4}End Sub{4}", _
EventInvokeMethodeName, ControlName, eve.Name, _
RaiseEventStatment, vbCrLf)
Return EventDeclaration
End Function
#End Region
所以稍后,您可以将其用作下一个
Dim Eve As EventInfo = GetType(SomeType).GetEvent("SomeEvent")
Dim Declaration As String = Eve.GetEventDeclaretion()
历史
这个想法是在一段时间之前产生的,当时我想创建一个包含著名组合(BrowseButton
+ PathTextBox
)的 UserControl
。 我希望用户能够访问嵌入控件的成员。 我在互联网上搜索了所有内容,每个人都说我必须对它们进行硬编码,所以我制作了这个工具并使用了它。 对我来说就像魔法一样。
几天前,我想与你们分享这个工具,所以想到了一些未来的想法,但因为我不打算很快开发它,所以我把它放在了原来的样子。
版本 0.0.0.3 生成事件和属性(推荐,稳定)。 我开始在版本(0.0.0.4)中支持属性生成,但结果并不令人满意(选择正确的构造函数不起作用)。
我希望它对某人有帮助。 感谢阅读。