目前我在第一个名为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
答案 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对如何改进您可能对您有用的数据库代码提供了一些非常有用的建议。