【问题标题】:VB.NET Set text value of a textbos of another formVB.NET设置另一个表单文本框的文本值
【发布时间】:2020-08-26 09:45:26
【问题描述】:

我需要的是当从 form1 打开 form2 时单击一个按钮,然后在 form2 上单击另一个按钮并设置 form1 的文本框的值。

如果我将应用程序的类型设置为 windows 窗体应用程序,一切正常,但如果我设置为类库,我有错误引用非共享成员需要对象引用。

如果我引用 Dim frm = New form2 它会打开第二个 form2 而我不想要它。

如何解决这个问题?

谢谢。

代码如下:

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.ShowDialog()
End Sub
End Class


Public Class Form2
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Form1.TextBox1.Text = "aaaa"
    Me.Close()

End Sub
End Class

【问题讨论】:

    标签: vb.net shared


    【解决方案1】:

    当您构建 vb.net winforms 项目时,项目中会生成一些额外的代码。比如Form类的静态实例,所以可以通过类名Form1.ShowDialog()访问实例方法。

    这样做是为了让 VB6 程序员更容易地从 VB 迁移到 VB.NET。

    当您将项目更改为库项目时,不再生成此代码,Form1 只是一个类,您不能直接访问实例方法,而是需要“手动”实例化一个实例。

    不要使用这个“隐藏的”共享实例,而是手动创建表单实例。您可以将 form1 的实例传递给 form2 的构造函数并从那里更新 form1。

    因为您使用的是ShowDialog,所以我建议您让 Form2 不依赖于 Form1,而不是直接更新 Form1 文本框(您希望避免将 Form 控件公开),作为对话框的结果返回值。

    Public Class Form2
      Public Property ResultValue As String
    
      Private Sub Button1_Click(s As Object, e As EventArgs) Handles Button1.Click
        ResultValue = "Value from Form 2";
        DialogResult = DialogResult.OK; ' This suppose to close the form
      End Sub
    End Class
    
    Public Class Form1
      Private Sub Button1_Click(s As Object, e As EventArgs) Handles Button1.Click
        Using form As New Form2()
          Dim result As DialogResult = form.ShowDialog()
          If result = DialogResult.OK Then
            TextBox1.Text = form.ResultValue
          End If
        End Using
      End Sub
    End Class
    

    【讨论】:

      【解决方案2】:

      将以下内容添加到form1

      Public static sub changeTitle(myTextBox as Object,title as string)
      myTextBox.Text=title
      End sub
      

      在form2中调用上述函数

      Form1.changeTitle(Form1.TextBox1, "new title")
      

      【讨论】:

      • 它也可以,但是如果我有多个文本框,我必须为所有文本框都这样做。
      • 非常简单。编辑了答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多