【问题标题】:Visual Basic textbox1 of form 1 to textbox1 of form 2表单 1 的 Visual Basic textbox1 到表单 2 的 textbox1
【发布时间】:2015-04-11 07:51:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 请说明如何打开第二个表单(用户无法在文本框中输入的表单)
  • 使用按钮。表单 1 由一个文本框组成,用户可以在其中输入名称和一个显示表单 2 的按钮。在form2中它只包含一个文本框,我希望在form1中输入的用户名也将显示在form2的textbox1中
  • 您的问题的答案很简单,如果 a) 您有 Form1 和 Form2 类型的实例/引用 b) Form1 和 Form2 中的文本框不是私有的或受保护的。 ...因此,如果 form1form2 是 Form1 和 Form2 类型的实例/引用,那么 form2.textbox1.Text = form1.textbox1.Text 应该可以工作。

标签: .net vb.net winforms textbox


【解决方案1】:

订阅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

【讨论】:

  • 这仅适用于 Form2 的自动实例,不适用于 Form2 的实例化实例。在我看来,应该采取行动更新其控件的 Form2 实例而不是 Form1
【解决方案2】:

我建议使用不同的方法。第二种形式(更具体地说是 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 类中工作

【讨论】:

    【解决方案3】:

    您可能试图在Form2 初始化(显示)之前或Form1 被释放(关闭)之后设置TextBoxText确保两个表单都打开并尝试此操作

    Public Class Form2
      Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load    
        Me.TextBox1.Text = Form1.TextBox1.Text  
      End Sub    
    End Class
    

    【讨论】:

      【解决方案4】:

      在表格 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 中的方法可能是不必要的,但我不确定您如何实例化您的表格 2。

      【讨论】:

        【解决方案5】:

        如果您想在一个表单中向另一个表单文本框显示某些值,请执行此操作。

        将 frmReport 调暗为新的 frmLogin frmReport.textbox1.text=(你想打印的值是什么) frmReport.show()

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

        【讨论】:

          猜你喜欢
          • 2014-01-25
          • 1970-01-01
          • 1970-01-01
          • 2017-02-09
          • 2022-06-23
          • 1970-01-01
          • 1970-01-01
          • 2011-08-05
          • 1970-01-01
          相关资源
          最近更新 更多