2017-09-14 43 views
0

我有一個在調用函數(CarBenefitFrm)時動態生成的表單(CarForm),它包含一個複選框,單擊它時將啓用一個文本框(HireBox)。我已經將一個處理程序與此文本框相關聯,以便每次文本更改時,都應將文本保存在變量(結果)中,然後返回該結果,此代碼包含在名爲HireInput的Sub中。但是,我不能把函數的return語句放在sub中。處理程序子句中的return語句

在下面,我連接形式的圖像

enter image description here

我怎樣才能返回變量「結果」給調用者?

我知道如何將代碼與處理程序關聯的唯一方法是將其包含在一個子文件中。我已閱讀過有關代表,但不知道如何在此處應用它。

我會很感激我能得到的任何幫助,以及代表如何工作的簡單解釋。

Module CarBnft 

Public Function CarBenefitFrm() As Decimal 
    Dim result As Decimal 

    Dim CarForm As New Form 

    'CODE FOR GENERATING BUTTONS, CHECKBOXES, TEXTBOXES GOES HERE 

    Dim HireInput = Sub() 

         If (IsNumeric(HireBox.Text) = False) And (String.IsNullOrWhiteSpace(HireBox.Text) = False) Then 

          HireBox.Clear() 
          MsgBox("Please enter a number in this field", MsgBoxStyle.Information, "Error") 

         ElseIf (IsNumeric(HireBox.Text) = True) And (String.IsNullOrWhiteSpace(HireBox.Text) = False) Then 

          Decimal.Parse(HireBox.Text, Globalization.NumberStyles.AllowDecimalPoint) 
          result = HireBox.Text 
          return result 'not working because return 
              ' statement is within the 
              ' HireInput Sub           

         End If 

        End Sub 
    AddHandler HireBox.TextChanged, HireInput 'only know how to add code for a handler using a sub 

End Function 

End Module 
+1

爲什麼需要動態生成*?看起來像一個花園品種對話框 – Plutonix

+0

...和一個'Sub' - 包括事件處理程序 - 不返回任何東西。什麼將它返回到***的價值? Windows調用它,但它不會關心你的結果或知道如何處理它。如果你已經把它捕獲到'result'中,那麼你的工作就完成了,除了將它公開爲一個Property或者方法 – Plutonix

+0

而不是CarForm是一個'Form',爲它創建一個新的類。在調用者可以訪問的表單類中定義一個公共屬性。用'CarForm.ShowDialog()'顯示錶單,並在關閉屬性後讀取它。 – djv

回答

0

不好意思回覆遲到。我終於設法得到了我想要的結果。我所做的是我在設計時製作了一個表單(Car Form),然後添加了一個處理程序,以便無論何時按下Accept按鈕,結果都將保存在我在模塊中創建的公共變量中,以便它可以在窗體中訪問。

然後,我爲調用窗體中的Accept按鈕添加了另一個處理程序,以便它將拾取現在存儲在Public變量中的結果。

謝謝@djv讓我理解使用Property以及@Plutonix來暗示我設計表單。