将文本框文本从表单传递给模块

时间:2014-01-14 14:44:41

标签: vb.net winforms

我有一个应用程序从vb6迁移到vb.net。

我想访问模块的SearchFields中的textbox1文本。

我不想将它作为参数传递,因为我有很多控件要传递。

请提供一些例子。

我的代码是frmNew页面有Textbox1

Private Sub Ok_Click(.....)
   call SearchFields()
   Me.Close()
End Sub

内部模块我有以下方法

Sub SearchFields()
    Dim str As string
    Dim frm As New frmNew
    str = frm.Textbox1.Text
End Sub

frmNew.Textbox1.Text什么都没得到

2 个答案:

答案 0 :(得分:1)

要进行尽可能少的重新编码,您可以将两种方法更改为以下方法。为此,Textbox1必须标记为public。我个人不得不将VB6应用程序“迁移”到.Net,正如@LarsTech指出的那样,这需要重新思考你的应用程序,而不仅仅是语法更改。

Private Sub Ok_Click(.....)
   call SearchFields(Me)
   Me.Close()
End Sub

Sub SearchFields(Form frm)
    Dim str As string

    str = frm.Textbox1.Text
End Sub

答案 1 :(得分:0)

您可以传递对控件的引用以用于搜索文本。这使您的SearchFields方法更加通用。例如,我创建了一个名为frmNew的表单和一个名为Searching的模块。在表单上,​​我放置了一个名为Ok的按钮,一个TextBox和一个ComboBox。

Public Class frmNew

    Private Sub Ok_Click(sender As Object, e As EventArgs) Handles Ok.Click
        Searching.SearchFields(TextBox1)
        Searching.SearchFields(ComboBox1)
        Me.Close()

    End Sub

End Class

有两种方法可以处理传递给模块的控件(我将其命名为Searching)。首先,您可以检查控件的类型并根据它执行操作:

Module Searching

    Sub SearchFields(textSource As Control)
        Dim str As String = ""

        ' just for invesigating, show the type of the control.
        Console.WriteLine(TypeName(textSource))

        If TypeOf textSource Is System.Windows.Forms.TextBox Then
            str = textSource.Text

        ElseIf TypeOf textSource Is System.Windows.Forms.ComboBox Then
            Dim src = DirectCast(textSource, ComboBox)
            If src.SelectedIndex >= 0 Then
                str = src.SelectedItem.ToString()
            Else
                ' nothing was selected. Do whatever is appropriate.
                str = "NOTHING SELECTED!"
            End If

        End If

        'TODO: the searching code.
        Console.WriteLine(str)

    End Sub

End Module

或者,您可以利用方法重载,它运行与您传递给它的参数对应的方法版本:

Module Searching

    Sub SearchFields(src As TextBox)
        DoSearch(src.Text)
    End Sub

    Sub SearchFields(src As ComboBox)
        'TODO: check an item is selected.
        Dim txt = src.SelectedItem.ToString()
        DoSearch(txt)
    End Sub

    Private Sub DoSearch(s As String)
        ' do the search
        Console.WriteLine(s)
    End Sub

End Module