繁体   English   中英

vb.net在表单之间传递文本框。

[英]vb.net Pass Textbox Between forms.

我有两种形式。 在Form1上,我想在加载时将文本框值传递给Form 2。 我认为这是可行的。 将加载并运行Form1,并在form1中填充数据。 我在form1中公开了文本框的属性。 然后,我尝试在form2中使用该公开属性。

Public Class form1

Public ReadOnly Property GetTextBox() As String
    Get
        Return txtbox1.Value
    End Get
End Property

在form2上

 Dim X As form1
 Me.TextBox1.Text = X.GetTextBox

VB允许您通过类的类名引用表单实例 ,因此您可以使用:

Me.TextBox1.Text = Form1.GetTextBox

但是,您不应该依赖于此,而应该将Form1的显式实例传递给Form2 ,例如在构造函数中:

' Form2
Public Sub New(ByVal f As Form1)
    Me.New()

    ' save 'f' for future reference
End Sub

有几种方法可以给这只猫蒙皮。

最简单的方法是为Form2创建第二个(或替换现有的)构造函数,该构造函数接受string作为参数。 然后,当Form1创建Form2您可以以这种方式传递参数。

Public Class Form2
    Sub New(ByVal txt As String)
        InitializeComponent()
        Me.TextBox1.Text = txt
End Sub
End Class

然后在Form1您将得到类似Dim f2 As Form2 = New Form2(myTextBox.Text)

坦白地说,其他方式基本上与此相同,除了您可以将Textbox本身作为参数传递给构造函数,甚至可以将Form1传递给Dim X As Form1 = theForm构造函数。 一般而言,如果您仅需要Textbox.Text那么您仅应在构造函数中接受string 如果您不需要全部控件或表单,则没有理由公开!

您当前的代码非常接近,但是正如Plutonix所评论的那样, Form2X属性只是Form1 另一个实例,而不是应用程序正在显示的实际实例。

执行此操作时:

Dim X As form1

您将创建对form1引用。 (大概在某个地方实例化它?或者可能依赖于VB中使用“默认”表单实例的功能 。...不这样做。请相信我,不要。)此实例与已经存在的实例。 您正在寻找的是对已经存在的实例的引用。

如果form2有一个依赖form1 ,需要对实例的引用form1则需要在构造为参考form2

Private Property Form1Instance As form1

Sub New(ByVal form1Instance As form1)
    Me.Form1Instance = form1Instance
End Sub

创建form2实例时,请提供对form1实例的引用:

Dim form2Instance As New form2(Me)
form2Instance.Show()

然后在form2您可以引用该form1现有实例:

Dim someVariable As String = Me.Form1Instance.GetTextBox()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM