表单1的Visual Basic文本框1到表单2的textbox1

时间:2015-04-11 07:51:32

标签: .net vb.net winforms textbox

如何将表单1的textbox1的文本内容放到form2的textbox1中?

例如,我想在form1.textbox1中输入一个名称,然后我希望它也出现在form2.textbox1中,但是不允许用户编辑form2.textbox1中显示的名称

如果您推荐其他方法,我将不胜感激。

我认为可行的第一件事是form2.textbox1.text = form1.textbox1.text,但它没有显示form2的textbox1到form2的textbox1的内容。

这是我的简单程序的屏幕截图。 http://imgur.com/a/QPEzt 在form1中,我有一个文本框和一个按钮。 用户将在文本框中输入文本,然后如果他单击按钮,程序将转到form2。在form2中,我有一个文本框。 form2中的文本框将显示用户在form1中输入的文本。

5 个答案:

答案 0 :(得分:0)

订阅TextChanged活动以轻松"克隆"它的文字。

Form1.vb:

Public Class Form1

Private Sub TextBox_Form1_TextChanged(sender As Object, e As EventArgs) _
Handles TextBox_Form1.TextChanged

    Form2.TextBox_Form2.Text = DirectCast(sender, TextBox).Text

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click

    Form2.Show()

End Sub

End Class

Form2.vb:

Public Class Form2

Private Sub Form2_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load

    Me.TextBox_form2.ReadOnly = True

End Sub

End Class

答案 1 :(得分:0)

我建议使用不同的方法。第二种形式(更具体地说是Form2类的实例)应该由它自己的控件负责。它不应该允许外部Forms实例更改其内部行为。 (用纯OOP的说法,这就是封装概念)

Form2实例唯一需要知道的是它应该监视哪个外部TextBox控件并显示此外部控件中发生的更改

所以你可以写这样的东西

在Form1类中单击按钮

Public Sub button1_click(sender as Object, e as EventArgs)
    Dim f2 = new Form2(textBoxOnForm1)
    f2.Show()
End Sub

在这里,您使用Form2的特定构造函数传递对Form1托管的文本框控件的引用。这样,任何想要重用Form2类提供的功能的客户端代码都需要传递相应的文本框。

在Form2类中添加一个新的特定构造函数,该构造函数接收Form1想要创建Form2实例时传递的TextBox

public class Form2 : Inherits Form

    Sub New(ByVal textBoxOnForm1 as TextBox)

        ' Always required before acting on controls
        InitializeComponent()

        AddHandler textBoxOnForm1.TextChanged, AddressOf text_Changed
        textBoxOnForm2.Text = textBoxOnForm1.Text
    End Sub

现在,Form2类构造函数引用了外部TextBox来监视(无论它来自何处)并添加接收TextBox传递的TextChanged事件的事件处理程序(再次,你不介意这个TextBox控件的位置)位于)

Sub text_Changed(sender as Object, e as EventArgs)
    Dim tFromForm1 = DirectCast(sender, TextBox)
    Me.textBoxOnForm2.Text = tFromForm1.Text
End Sub

事件处理程序只是使用外部控件的文本更新内部文本框。现在,如果你想为textChanged事件实现不同的行为,你只需要在类Form2中工作

答案 2 :(得分:0)

表格2上的

Public Sub SetTextbox1Value(ByVal Value As String)
    TextBox1.Text = Value
End Sub
表格1上的

如果是自动实例:

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    Form2.textboxInForm2.Text = TextBox1.Text
End Sub

如果您定义了实例:

Private _form2 As New Form2
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    _form2.SetTextbox1Value(TextBox1.Text)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    _form2.Show()
End Sub

请注意,添加了一个用于调用表单2的按钮

表单2中的方法可能是必要的,但我不确定您如何实例化您的表单。

答案 3 :(得分:0)

您可能尝试在Text初始化(显示)之前或TextBox被释放(关闭)之后设置Form2的{​​{1}}。 确保两个表单都已打开并尝试使用

Form1

答案 4 :(得分:0)

如果要在一种形式中向另一种形式的文本框显示某些值,请执行此操作。

将frm报告设为新的frm登录 frmReport.textbox1.text =(您要打印的值) frmReport.show()

在此代码中,frmReport只是一个新的veriable,您可以定义任何名称 frmLogin是我的表单名称,我想在frmLogin表单文本框中显示该值。 然后必须显示日期,例如frmReport.show(),否则将不会在文本框中显示