2017-09-14 44 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来暗示我设计表单。