Vb.net 文本框值未在winforms中获取另一个窗体按钮单击事件

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

我正在使用windows窗体应用程序,我有两个窗体。1是visitorinfo 2是VisitorExitSign

在visitorinfo中,我有“保存”按钮,在点击“保存”按钮时,我想从vistirexitsign表单中获取textboxvalue

这两个表单同时运行,我在访客信息表单的保存按钮中给出了如下代码:

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