Vb.net 如何以不同的形式将值从一个文本框传递到另一个文本框?

Vb.net 如何以不同的形式将值从一个文本框传递到另一个文本框?,vb.net,winforms,Vb.net,Winforms,目前,我在第一个名为txtuserid的表单上有一个TextBox,我想在第二个表单上把这个值传递给另一个名为USERIDTextBox的TextBox 但是当我尝试运行下面的代码时,没有任何内容传递到第二个表单上的文本框。我只是想知道如何将这个值从一种形式传递到另一种形式 这是我的密码: Private Sub cmdlogin_Click(sender As Object, e As EventArgs) Handles cmdlogin.Click Try If c

目前,我在第一个名为txtuserid的表单上有一个
TextBox
,我想在第二个表单上把这个值传递给另一个名为USERIDTextBox的
TextBox

但是当我尝试运行下面的代码时,没有任何内容传递到第二个表单上的
文本框。我只是想知道如何将这个值从一种形式传递到另一种形式

这是我的密码:

Private Sub cmdlogin_Click(sender As Object, e As EventArgs) Handles cmdlogin.Click
    Try
        If cn.State = ConnectionState.Open Then
            cn.Close()

        End If
        cn.Open()
        cmd.CommandText = "select userid,state from registration where userid= " & _
            "'" & txtuserid.Text & "' and state='" & txtpw.Text & "'"

        Dim dr As OleDb.OleDbDataReader
        dr = cmd.ExecuteReader
        If (dr.HasRows) Then
            While dr.Read

                ' My Problem: 
                ' This code shows the 2nd form but the USERIDTextBox value doesn't change?
                Dim obj As New Sale
                obj.USERIDTextBox.Text = txtuserid.Text
                obj.Show()
            End While
        Else
            MsgBox("Invalid username or PW")
        End If
        cn.Close()
    Catch ex As Exception

    End Try
End Sub

一般来说,尝试直接访问另一个对象/窗体控件不是一个好主意。相反,更好的方法是将第一个表单的
TextBox
中的文本传递给第二个表单(即
Sale
one)上的自定义构造函数。然后,第二个表单上的构造函数将负责设置
文本框的值

下面是一个可以实现此目的的方法的示例:

Sale.vb

Public Class Sale

    Dim secondFormInputText As String

    Public Sub New(inputTextFromFirstForm As String)
    InitializeComponent()

    ' Set the class variable to whatever text string was passed to this form
    secondFormInputText = inputTextFromFirstForm
    End Sub

    Private Sub Sale_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' Set the textbox text using this class variable
    USERIDTextBox.Text = secondFormInputText
   End Sub

End Class
Private Sub cmdLoginExample_Click(sender As Object, e As EventArgs) Handles cmdLogin.Click
    Dim obj As New Sale(txtuserid.Text)
    obj.Show()
End Sub
Login.vb

Public Class Sale

    Dim secondFormInputText As String

    Public Sub New(inputTextFromFirstForm As String)
    InitializeComponent()

    ' Set the class variable to whatever text string was passed to this form
    secondFormInputText = inputTextFromFirstForm
    End Sub

    Private Sub Sale_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' Set the textbox text using this class variable
    USERIDTextBox.Text = secondFormInputText
   End Sub

End Class
Private Sub cmdLoginExample_Click(sender As Object, e As EventArgs) Handles cmdLogin.Click
    Dim obj As New Sale(txtuserid.Text)
    obj.Show()
End Sub
因此,现在您可以将第一个表单上的文本传递给第二个表单的构造函数,而不是直接设置
Sale
表单的
TextBox
。然后,构造函数可以将收到的文本保存到第二个表单的其余部分可以使用的类变量中

这样做的一个主要好处是,如果将来您将
TextBox
更改为
RichTextBox
或另一个可能甚至没有
Text
属性的控件,则不必更新试图直接设置TextBox值的每一段代码

相反,您可以将
文本框
更改为其他控件,使用使用新控件所需的任何更改更新
销售
表单一次,并且不需要更改其他表单上的任何代码

编辑:


即使这个问题是关于如何将文本框值从一个表单传递到另一个表单的,您也可能喜欢阅读问题下的注释。特别是,对于如何改进可能对您有用的数据库代码,Puropoix提供了一些非常有用的建议。

您能解释一下您的问题和代码块是如何联系在一起的吗?你的代码有什么问题吗?“Sale”是你其他表单的名称吗?您应该在错误处理程序中添加messagebox,以防丢失异常。是的,先生SALE是我的另一个表单,我希望登录表单的TXTUSERID值的用户ID与SALE表单的文本框USERIDTEXTBOX一致。a)不要使用全局连接。b) 处理数据库对象以避免泄漏c)使用参数,不要连接SQL d)不要使用空的Catch块。如果您有重要数据或逻辑要与多个表单共享,请不要将其嵌入一个表单中。使用一个可以轻松包含整个应用程序共享和使用的逻辑和数据的类。@puropoix-您忘记了e)请不要键入所有大写字母!:P