Vb.net 文本框值未在winforms中获取另一个窗体按钮单击事件
我正在使用windows窗体应用程序,我有两个窗体。1是visitorinfo 2是VisitorExitSign 在visitorinfo中,我有“保存”按钮,在点击“保存”按钮时,我想从vistirexitsign表单中获取textboxvalue 这两个表单同时运行,我在访客信息表单的保存按钮中给出了如下代码:Vb.net 文本框值未在winforms中获取另一个窗体按钮单击事件,vb.net,winforms,Vb.net,Winforms,我正在使用windows窗体应用程序,我有两个窗体。1是visitorinfo 2是VisitorExitSign 在visitorinfo中,我有“保存”按钮,在点击“保存”按钮时,我想从vistirexitsign表单中获取textboxvalue 这两个表单同时运行,我在访客信息表单的保存按钮中给出了如下代码: Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Hand
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
Dim obj As New VisitorExitsign
Dim vs As String = obj.txtvisitoridExit.Text
Dim Visitorid As String = My.Forms.VisitorExitsign.txtvisitoridExit.Text
但我总是在这里得到txtvisitoridexit.text值null。无法获取文本值
我的代码有什么问题?您在每次单击事件中都会创建新实例
Dim obj As New VisitorExitsign
因此,这些值是在新对象中设置的,而不是在现有对象中设置的
因此,实际上您必须引用VisitorExitsign的现有对象
编辑:
例如:
您正在使用某种方法创建表单visitorexit
因此,无论何时创建,都将其引用存储在某个全局变量中。
VisitorExitsign obj = new VisitorExitsign
在创建表单的位置
然后在单击事件中使用obj并指定文本。当您引用
My.Forms.VisitorExitSign.txtvisitoridExit.text时,您引用的是表单本身,而不是表单的实例(如果有意义的话)。因此,您试图访问默认表单,而不是用户输入文本的表单
你可能想做的是改变
Dim Visitorid As String = My.Forms.VisitorExitsign.txtvisitoridExit.Text`
进入
这样做的目的是确保Visitorid
从VisitorExitSign
的实例中获取其值
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
Dim forms As FormCollection = Application.OpenForms
For Each form As Form In forms
If form.Name = "VisitorExitsign" Then
Dim vs As String = CType(form, VisitorExitsign).txtvisitoridExit.Text
End If
Next
End Sub
建议:
frmVX = New VisitorExitsign
frmVX.Location = New Point(781, 0)
frmVX.MdiParent = Me
frmVX.Show()
frmVE = New VisitorInfo()
frmVE.Location = New Point(0, 0)
frmVE.MdiParent = Me
frmVE.Tag=frmVX
frmVE.Show()
按钮点击事件
Dim vs As String = CType(me.Tag, VisitorExitsign).txtvisitoridExit.Text
希望这能奏效
- 创建一个
模块
Module modTextValue
Public _textVal As String
End Module
- 然后转到表单上的
txtvisitoridexit
的LostFocus
事件vistirexitsign
Private Sub txtvisitoridexit_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
_textVal = txtvisitoridexit.Text
End Sub
- 在
btnSave'上单击
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
Dim str As String
str = _textVal
End Sub
试试这个:
在“保存”按钮中,将代码更新为:
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
Dim obj As New VisitorExitsign
obj.ShowDialog()
Dim vs As String = obj.txtvisitoridExit.Text
End sub
当您关闭VisiteExitSign时,变量vs将采用obj的值。TXTvisitorIndexit我如何引用现有对象?@user3252014在您创建表单的代码中引用它的引用。仅此而已。先生,您可以看到我正在按钮内创建表单引用单击eventDim obj作为VisiteExitSign,我这样声明,,我尝试校准txtbox值,但仍然无法获得\@user3252014您正在创建新的VisitorExit登录点击事件,而您必须引用现有的点击事件…是的。但是OP想要退出对象,OP告诉我时间2表单正在运行,所以我试着这样@NiravKamaniso我可以检查VisitorExitsign是否打开了?如果opend,则从该页面获取值。这是可行的。但是,在所有页面中循环我的应用程序会变慢。确定代码中首先显示的是哪个表单显示您的表单显示代码@user3252014sir我将这两个表单称为一个。您需要了解如何在我必须创建模块的两个表单之间传递值?我明白了textbox值,现在我的问题是,在获取该值后,我正在调用vistorexit签名表单中的一个函数,但此时textbox值为null,这可能是因为在保存时,您正在创建一个新的VisiteXit签名实例,而不是现有实例?(在执行Show()
或ShowDialog()之前,新对话框不会显示)
在它上面。当您第一次创建VisitorExitSign
表单时,您需要使用以前的引用。因此,如果您创建一个类型为VisitorExitSign
表单的全局变量,那么当您创建和显示它时,将其存储在该变量中,然后使用该变量获取其值。
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
Dim obj As New VisitorExitsign
obj.ShowDialog()
Dim vs As String = obj.txtvisitoridExit.Text
End sub