【问题标题】:textbox value not getting another form button click event in winforms文本框值没有在winforms中获得另一个表单按钮单击事件
【发布时间】:2014-07-17 10:00:55
【问题描述】:

我正在开发 Windows 表单应用程序,我有两个表单。 1 是visitorinfo 2 是vistorexitsign。

在访问者信息中,我有保存按钮,在单击保存按钮时,我想从 vistirexitsign 表单中获取文本框值。

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

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。没有得到文本值。

我的代码有什么问题?

【问题讨论】:

  • 你需要了解如何在两个表单之间传递值

标签: vb.net winforms


【解决方案1】:

您在每次点击事件中创建新实例。

Dim obj As New VisitorExitsign

所以这些值是在新对象中设置的,而不是在现有对象中。

所以实际上你必须引用 VisitorExitsign 的现有对象。

编辑:

例如:

您正在使用某种方法创建表单 VisitorExitsign。

因此,无论何时创建,都将其引用存储在某个全局变量中。

VisitorExitsign obj = new VisitorExitsign

在您创建表单的地方

然后在点击事件中使用 obj 并分配文本。

【讨论】:

  • 如何引用现有对象?
  • @user3252014 在您创建表单的代码中获取它的引用......仅此而已。
  • 先生,您可以看到我正在按钮单击事件中创建表单引用
  • Dim obj As VisitorExitsign,我这样声明,我尝试校准 txtbox 值,但仍然没有得到\
  • @user3252014 您正在点击事件中创建新的 VisitorExitsign,而您必须引用现有的...
【解决方案2】:

当您引用My.Forms.VisitorExitSign.txtvisitoridExit.Text 时,您指的是表单本身,而不是表单的实例,如果这有意义的话。因此,您正在尝试访问 默认表单,而不是用户已输入文本的表单。

你可能想做的是改变

Dim Visitorid As String = My.Forms.VisitorExitsign.txtvisitoridExit.Text`

进入

Dim Visitorid As String = obj.txtvisitoridExit.Text

这样做是确保VisitoridVisitorExitSign实例 中获取它的值。

【讨论】:

  • 可能是因为保存时您正在创建VisitorExitSign 实例而不是现有实例? (新的将不会出现,直到您对其执行 Show()ShowDialog() 987654330@ 表单,然后当您创建并显示它时,将其存储在该变量中,然后使用该变量获取它的值。
【解决方案3】:

这样试试

   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()

Button_Click 事件

   Dim vs As String = CType(me.Tag, VisitorExitsign).txtvisitoridExit.Text

【讨论】:

  • 是的。但是 OP 想要退出对象,并且 OP 告诉时间 2 个表单正在运行,所以我像这样尝试@NiravKamani
  • 所以我可以检查 wethar VisitorExitsign 是否打开?如果打开,则从该页面获取价值..
  • 这是有效的。但是循环浏览所有页面我的应用程序变慢了
  • ok 哪个表单首先显示在您的代码中 显示您的表单显示代码@user3252014
  • 先生,我将这两种形式称为togethar。
【解决方案4】:

希望这会奏效

  • 创建一个module

    Module modTextValue
     Public _textVal As String
    End Module 
    
  • 然后转到txtvisitoridexitLostFocus 表单上的事件vistirexitsign

    Private Sub txtvisitoridexit_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
       _textVal = txtvisitoridexit.Text
    End Sub
    
  • btnSave'click

     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
    

【讨论】:

  • 我必须在哪里创建模块?
  • 我正在获取该文本框值,现在我的问题是在获取该值之后我正在以 vistorexit 符号形式调用我的函数之一,但那时该文本框值变为空
【解决方案5】:

试试这个: 在按钮保存更新您的代码:

  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

当你关闭 VisitorExitsign 时,变量 vs 会取 obj.txtvisitoridExit 的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多