如何将值从一个TextBox传递到另一个TextBox以另一种形式?

时间:2015-07-27 12:44:44

标签: vb.net winforms

目前我在第一个名为txtuserid的表单上有一个TextBox,我希望将其值传递给另一个名为USERIDTextBox的另一个TextBox

但是当我尝试在下面运行我的代码时,没有任何内容传递给第二个表单上的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

1 个答案:

答案 0 :(得分:1)

作为一般规则,尝试直接访问其他对象/表单控件并不是一个好主意。相反,更好的方法是将第一种形式的TextBox中的文本传递给第二种形式的自定义构造函数(Sale)。然后第二个表单上的构造函数将负责设置TextBox的值。

以下是您可以执行此操作的一种方法示例:

<强> 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

<强> Login.vb

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更改为其他控件,使用新控件所需的任何更改都会更新Sales表单,其他表单上的代码都不需要要改变。

修改

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