如何从 vb.net 中的子表单访问父表单属性

Posted

技术标签:

【中文标题】如何从 vb.net 中的子表单访问父表单属性【英文标题】:How to access parent form properties from a child form in vb.net 【发布时间】:2022-01-16 19:28:10 【问题描述】:

我遇到了与this 中描述的几乎相同的问题,但使用的是 VB.NET。有一个 Form1 作为启动窗口自动打开,所以我找不到用于访问它的实例。从 Form1 中打开了一个 Form2。我尝试使用关键字“Me”传递 Form1 的实例:

Private Sub Button1_click(...) Handles Button1.Click
 Dim childform as new Form2(Me)
 childform.show()
End Sub

在 Form2 中我有:

Public Sub New(parentform As System.Windows.Forms.Form)
 InitializeComponents()
 MessageBox.Show(parentform.Button1.Text)
End Sub

编译时出现错误:“Button1 不是 Form 的成员”。 那么如何将Form1实例正确传递给Form2呢?

另外,我想从 Form2 更改 Form1 的 Button1 的一些属性。 Button1 在 Private Sub 中声明,但如果我正确传递实例,我是否仍可以从 Form2 访问它?如果没有,我可以在 Form1 中声明一个子,例如

Public Shared Sub ChangeText(newtext As Sting)
 Me.Button1.Text=newtext
End Sub

这样就可以了?

【问题讨论】:

错误信息Button1 is not a member of Form非常准确地反映了问题。 Button1 不是Form 的成员...但它是Form1 的成员。无论哪种方式,应该首选带有ChangeText 方法的变体,因为它更干净。 (在您的情况下,它可能不起作用,因为它被声明为 Shared,这意味着不能使用 Me 【参考方案1】:

我不能 100% 确定您要达到的目标,但是,您可以在表单之间传递数据。因此,例如,您可以执行以下操作:

Public Class Form1
   Private Sub Button1_click(...) Handles Button1.Click
      Dim newForm2 as New Form2()
      newForm2.stringText = ""
      If newForm2.ShowDialog() = DialogResult.OK Then
         Button1.Text = newForm2.stringText
      End If
   End Sub
End Class

在 Form2 中你有

Public Class Form2
   Dim stringText as string

   Private Sub changeStringText()
      'your method to change your data
      Me.DialogResult = DialogResult.OK 'this will close form2
   End Sub
   
End Class

我希望这是你需要的,如果没有,请告诉我

【讨论】:

【参考方案2】:

感谢您的回答和评论。所以我为 parentform 声明了错误的类,意味着在 Form2 中它需要是“parentform as Form1”:

Public Sub New(parentform As Form1)
 InitializeComponents()
 MessageBox.Show(parentform.Button1.Text)
End Sub

是的,我需要跳过 ChangeText 中的“共享”:

Public Sub ChangeText(newtext As Sting)
 Me.Button1.Text=newtext
End Sub

这种方式对我有用。

【讨论】:

以上是关于如何从 vb.net 中的子表单访问父表单属性的主要内容,如果未能解决你的问题,请参考以下文章

如何从位于访问中的另一个子窗体中的组合框中过滤子窗体?

如何从 Angular 6 中的父组件访问子组件中的表单?

Symfony 表单 - 在 CollectionType 中的子条目类型中访问实体

VB.NET 视觉继承:Friend VS Protected

访问子表单可见性

Xamarin 表单绑定 - 访问父属性