Vb.net 将文本框文本从表单传递到模块
我有一个应用程序从vb6迁移到vb.net 我想访问模块搜索字段中textbox1的文本 我不想将其作为参数传递,因为我要传递的控件太多了 请提供一些例子 我的代码是frmNew page have Textbox1Vb.net 将文本框文本从表单传递到模块,vb.net,winforms,Vb.net,Winforms,我有一个应用程序从vb6迁移到vb.net 我想访问模块搜索字段中textbox1的文本 我不想将其作为参数传递,因为我要传递的控件太多了 请提供一些例子 我的代码是frmNew page have Textbox1 Private Sub Ok_Click(.....) call SearchFields() Me.Close() End Sub 在模块内部,我有下面的方法 Sub SearchFields() Dim str As string Dim frm
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无需执行任何操作,请尽可能少地重新编码,您可以将两种方法更改为以下方法。要使其正常工作,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
您可以传递对用于搜索文本的控件的引用。这使SearchFields方法更加通用。例如,我创建了一个名为
frmNew
的表单和一个名为search
的模块。在表单上,我放置了一个名为Ok
的按钮、一个文本框和一个组合框
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
有两种方法可以处理传递给模块的控件(我将其命名为search
)。首先,您可以检查控件的类型并根据该类型采取操作:
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
请先提供一些代码。已添加注释
Dim frm,因为新frmNew
未引用现有表单。您必须将引用作为参数传递。迁移到.Net将要求您重新考虑程序的结构。通常,模块应替换为类。请尽量避免使用全局变量。请问,您需要什么?要打开另一个表单以输入值或从当前表单的文本框中获取值?frm.Textbox1.text
不应为空。事实上,我不知道它怎么会一无所获,至少应该是String.Empty(“”
)。不管怎样,你想做什么?请用10个或更少的词解释。谢谢你的提示。。。现在我得到了正确的值。但我面临的一件事是SearchFields()方法是从几个表单调用的,所以我应该从那里传递什么参数。如果TextBox并不总是命名为Textbox1,我建议将参数从Form改为TextBox,并直接传递正确的TextBox控件。如果它总是被命名为Textbox1,那么您可以始终传递给我(我是对当前对象的引用),并且SearchFields方法将始终具有正确的实例。如果您想获得最大的可重用性和可持续性,请重构该方法以获取文本框。