我有两个项目。一个是GUI,第二个是DLL。
我在Form1的DLL中调用函数
DLL函数必须连接表单(Say,Change Back Color)
我想将Calling表单作为参考,而不作为参数传递。
以下是表格1的示例
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ChangeBackColor()
End Sub
DLL函数
Public Sub ChangeBackColor()
Dim CallingForm as Form
'''GET PARENT HERE'''
CallingForm.BackColor = Color.Cyan
End Sub
显然,如果我每次都通过Form,我可以这样做,但试图避免这种情况。 提前谢谢
有人注意到这个问题已在其他地方得到解答。就我所见,它尚未被回答(或被问及)。这特定于引用表单,而不是方法或其他对象。
我已经通过引用Form.ActiveForm获得了引用调用表单的解决方案。现在我正在回答我自己的问题。
答案 0 :(得分:1)
从设计的角度来看,这真的是一件坏事。
以这种方式设计应用程序存在许多严重问题:
ChangeBackColor
函数依赖于调用方法的表单的事实!!如果其他代码块调用此代码怎么办?代码将失败!! 最后一点特别是一个问题,因为这使得单元测试这段代码非常困难并且容易出错。方法签名都是关于传达函数的意图,因此还需要告诉它需要执行工作的事物(对象,值,服务等)。
因此,如果函数中需要表单或任何对象,请在签名中显示!!
如果你不想在每次通话中都需要添加它,你可以通过将其创建为扩展方法来美化代码:
Public Module FormExtensions
<Extension>
Public Sub ChangeBackColor(form as Form, newBackColor as Color)
form.Backcolor = newBackColor
End Sub
End Module
你在表单实例中这样称呼:
Me.ChangeBackColor(Color.Red)
答案 1 :(得分:0)
我最后通过使用来调用活动表单
Form.ActiveForm
以下功能现在(以及其他功能)
Public Sub ChangeBackColor()
Dim CallingForm as Form
'''GET PARENT HERE'''
CallingForm = Form.ActiveForm
CallingForm.BackColor = Color.Cyan
End Sub
感谢所有尝试过帮助的人