![](/img/trans.png)
[英]Changing reference parameter value in fortran from calling function in c#
[英]How to get reference to the Calling Form from function without parameter
我有兩個項目。 一個是GUI,第二個是DLL。
我從Form1調用DLL中的函數
DLL函數必須連接表單(例如,更改背景色)
我想獲取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獲得了引用調用表單的解決方案,並且現在在下面回答我自己的問題。
從設計的角度來看,這確實是一件壞事。
以這種方式設計應用程序存在許多嚴重的問題:
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)
我最終使用調用了活動表單
Form.ActiveForm
以下功能現在可以使用(以及其他功能)
Public Sub ChangeBackColor()
Dim CallingForm as Form
'''GET PARENT HERE'''
CallingForm = Form.ActiveForm
CallingForm.BackColor = Color.Cyan
End Sub
謝謝所有嘗試幫助的人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.