【问题标题】:How to get the value of a textbox in vb.net?如何在 vb.net 中获取文本框的值?
【发布时间】:2020-04-09 14:28:51
【问题描述】:

我将一个 VB WinForms 6.0 项目升级到 WinForms 2019 (VB.NET)。我需要将文本框的值从一个表单(类)中获取到另一个表单(类)中,但什么也得不到。

在 VB6 中,我曾经可以这样调用我的文本:

MsgBox Form1.MyBox.Text

在 VB 2019 中,我注意到“表单”现在是类。我什至尝试实例化包含文本框的对象,但仍然没有返回任何内容。

Private MyForm1 As New MyForm // Produces an exception error
...
MsgBox(MyForm1.MyBox.Text) //Returns nothing

谁能告诉我这是怎么做到的?

编辑

修复异常错误后,我已将其添加到需要从其他表单(类)获取值的表单中,但我的 MsgBox 什么也没产生(null,空字符串)。

Dim Foo As New frmNonSerialize
MsgBox(Foo.txtWorkOrderNo.Text) //Nothing, empty, nada...

【问题讨论】:

  • 在属性下,对于文本框,将修饰符更改为“公共”,然后再次尝试您最初所做的。现在我认为它是私有的,不能从该类的实例外部看到
  • @JimmySmith,谢谢。我刚看到你的评论。我查看了属性,修改器已经设置为公共。谢谢你,吉米

标签: vb.net


【解决方案1】:

您可以在 VB.Net 中以两种不同的方式完成此操作。 Button1 代码使用现在称为默认实例的东西。您可以像在 VB6 中那样引用它。第二种方式(Button2)确实是.Net方式。

请注意,为了进一步与在 Button2 中创建的表单进行通信,您必须具有对该表单的引用。您不能简单地调用 `Form2.TextBox1.Text|因为你没有使用默认实例。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Form2.TextBox1.Text = "Hello World"
    Form2.Show()
    Me.Hide()
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    'Create and instance of the Form2 class
    Dim frm As New Form2
    'Set a property of a member of the Form2 class
    frm.TextBox1.Text = "Hello World"
    'Call a method of the Form2 class
    frm.Show()
    Me.Hide()
End Sub

在您编辑的代码中...

Dim Foo As New frmNonSerialize
MsgBox(Foo.txtWorkOrderNo.Text)

您已经创建了frmNonSerialize 类的全新实例。当然,它在文本框中没有任何内容(除非您在设计时设置文本)。它甚至从未向用户显示过。类是饼干切割器,实例是饼干。你可以用一个饼干刀制作几个饼干。然后每个 cookie 独立运行。

【讨论】:

    【解决方案2】:

    如果New MyForm 抛出异常,则MyForm1 处于无效状态。由于MyForm1 不是处于有效状态,因此您不能真正依赖它。

    MyForm1.MyBox.Text 应该可以正常工作。但是当你说New MyForm 抛出异常时,我认为这至少是你遇到麻烦的主要原因,如果不是唯一的话。所以修复异常,您将至少部分解决Text 属性的问题。

    至于如何修复异常,这真的取决于情况。如有必要,您可以为此发布另一个问题,但请先尝试确保该问题不是重复问题或其他问题。

    【讨论】:

    • 感谢 Panzercrisis 的回答。这是我能从异常中得到的:- $exception {"Exception of type 'System.StackOverflowException' was thrown."} System.StackOverflowException
    • Panzercrisis,这里是另一个例外,可以帮助您了解我做错了什么:Data {System.Collections.ListDictionaryInternal} System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
    • @Nan 不确定ListDictionaryInternal,否则这听起来像是无限递归。我认为New MyForm 在内部(直接或间接)调用New MyForm,或者它正在创建的其他东西正在这样做。此时,New MyForm 在自身内部调用New MyForm,在自身内部调用New MyForm,以此类推,直到程序内存不足;或者另一个New <SomeClass> 正在做同样的事情。正如New MyForm 或New <SomeClass> 所做的那样,它可能是间接的,并且在两者之间通过其他方法。
    • 啊!!!感谢您让我走上正确的道路!好的,我看到递归发生在哪里。所以,我已经删除了递归,但是如何从不同的类中回显文本框值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2017-08-04
    相关资源
    最近更新 更多