VB dll中private 对象模块参数问题
初学VB 小弟我遇到这样一个问题现在把相关代码贴如下:
Public Sub hit(form1 As CommandButton, form2 As CommandButton)
Dim intf1, intf2, ints1, ints2 As Integer
If (form1.Left + form1.Width > form2.Left) And form1.Left < form2.Left And Abs((form1.Top - form2.Top) < form1.Top) Then
intf1 = -1
ints1 = 1
ElseIf (form2.Left + form2.Width > form1.Left) And form2.Left < form1.Left And Abs((form1.Top - form2.Top) < form1.Height) Then
intf1 = 1
ints1 = -1
End If
If (form1.Top + form1.Height > form2.Top) And form1.Top < form2.Top And Abs((form1.Left - form2.Left) < form1.Width) Then
intf2 = -1
ints2 = 1
ElseIf (form2.Left + form2.Width > form1.Left) And form2.Left < form1.Left And Abs((form1.Top - form2.Top) < form1.Top) Then
intf2 = 1
ints2 = -1
End If
form1.Left = form1.Left + intf1 * 100
form1.Top = form1.Top + intf2 * 100
form2.Left = form2.Left + ints1 * 100
form2.Top = form2.Top + ints2 * 100
End Sub
以上的代码在生成DLL文件的时候被提示 private对象模块不能做为参数类型(该段代码如果不写成DLL,而在程序内时可正常使用)
而如果声明成private 过程却无法被外部引用 这个时候就需要声明一个公共函数来调用它,可小弟试者写了好多都无法实现。
上面的代码主要是想判断两个commandbutton 控件的碰撞问题,当窗体中有2个以上的commandbutton控件,那么就必须两两判断那势必多次使用到该过程,所以小弟我就想着写一个DLL来共调用。DLL的注册和调用问题小弟熟悉,问题的关键在于我怎么把控件赋给一个private过程或者如何把他写成一个public过程。
[解决办法]
问题在这里
Public Sub hit(form1 As CommandButton, form2 As CommandButton)
改成声明为:
Public Sub hit(form1 As Object, form2 As Object)
为了防止传入错误的参数类型,可以在里面验证,如
if not (typeof form1 is vb.commandbutton) then err.raise 5
if not (typeof form2 is vb.commandbutton) then err.raise 5
[解决办法]
在类模块里声明为
Private MyForm As Object