将函数返回值从类返回到vb.net中的表单

时间:2018-02-08 17:58:10

标签: vb.net forms function class

我在一个名为connecting.vb

的类中有一个函数
Public Function bring_it(ByVal a As Integer) As String
some code in here .....
                Form3.Show()
                Form3.TextBox1.Text = dl.Item("workorder").ToString
                Form3.TextBox2.Text = dl.Item("ptw").ToString

end function 
在form3中加载

我想让文本框传递值

    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 dim al as new connecting 
al.bring_it(a) 
end sub

我必须在bring_it函数中使用form3.show(),因为当form3加载时它不显示传递的值,但问题是我得到两个窗口,一个有所需的值,另一个是空的

我需要在按下按钮时显示form3(form3是带文本框的编辑窗口)

我也想改变bring_it函数输出一个数组,但我不知道怎么做...我不知道如何使用那个输出数组让我们假设结果数组是这个

st(3)={"hell","yes","no") 

当我打电话给那个功能时 al.bring_it(a)如何单独获取st(1)st(2) ...等? 提前谢谢

3 个答案:

答案 0 :(得分:0)

尝试指定课程的职责。您的Connecting课程很可能负责维护与某事物的联系。此连接与UI无关,因此此类不应包含任何UI代码。但是,它可以提供一些自动确定的参数(这是我假设workorderptw)为properties,可能是只读参数。

Class Connecting
    '...
    Public ReadOnly Property WorkOrder As String

    Public Function BringIt(ByVal a As Integer) As String
        '...
        _WorkOrder = dl.Item("workorder").ToString()
        '...
    End Function
End Class

然后,您的表单类(顺便说一下,请给它一个合理的名称)可以访问这些属性并将它们分配给它的文本框:

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    dim al As New connecting 
    al.bring_it(a) 
    WorkOrderTextBox.Text = al.WorkOrder
    '...
End Sub

答案 1 :(得分:0)

您有几个选项可以从函数中返回多个值。这是一个返回数组的例子。

Public Function bring_it(ByVal a As Integer) As String()
some code in here .....
                Form3.Show()
                Form3.TextBox1.Text = dl.Item("workorder").ToString
                Form3.TextBox2.Text = dl.Item("ptw").ToString

    Return New String(){"a","b","c"}
end function

调用它看起来像:

Dim bringReturn() as String = bring_it(a)

你可以访问bringReturn(0),带回车(1)和带回程(2)。

这是一个返回元组的示例。

Public Function bring_it(ByVal a As Integer) As Tuple(Of String, String, String)
some code in here .....
                Form3.Show()
                Form3.TextBox1.Text = dl.Item("workorder").ToString
                Form3.TextBox2.Text = dl.Item("ptw").ToString

    Return New Tuple(Of String, String, String)("a", "b", "c")
end function

调用它看起来像:

Dim bringReturn as Tuple(Of String, String, String) = bring_it(a)

您可以通过bringReturn.Item1,bringReturn.Item2和bringReturn.Item3访问它。

Nico的建议也不错,但与我的回答是分开的。您希望将GUI与业务内容分开。

答案 2 :(得分:0)

我真的很喜欢Nico的回答和解释。我提供这个作为另一种选择,因为我认为Tuples作为裤子口袋很方便。

vector<Control*>& GetControls()
{
    return m_controlPtrs;
}

然后调用你的功能......

Public Function bring_it(ByVal a As Integer) As (WorkOrder As String, PTW As String)
        Dim strWorkOrder As String = dl.Item("workorder").ToString
        Dim strPTW As String = dl.Item("ptw").ToString
        Return (strWorkOrder, strPTW)
End Function