引用非共享成员需要 showing/hiding 表单的对象引用

Reference to a non-shared member requires an object reference for showing/hiding forms

我有 3 个表单,form2 包含一些我想在 form3 的数据网格视图中显示的信息,我在网上搜索了如何操作,所以不是很精通或完全理解这些变化和或者我写的代码,只要它有效。现在的问题是来自其他表单 1 和 2 的按钮应该隐藏和/或显示其他表单,但有错误,这是一个项目,非常感谢您的帮助,谢谢。

form1(错误 1,粗体)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
gin.Click
    Dim nun As String = "apple"
    Dim pw As Single = 7

    
    Dim name As String
    
    Dim wd As Double
   

    name = name.Text
    wd = word.Text
   
    If (name = nun And wd = pw) Then
        Me.Hide()
        **try**.Show() ' error here
    Else
        
        MsgBox("Denied", vbOKOnly + MsgBoxStyle.Critical, "TRY AGAIN")       End If

End Sub

form2(数据网格视图代码)

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
    Save.Click

    view.dgvView.CurrentRow.Cells(1).Value = Id.Text
    view.dgvView.CurrentRow.Cells(2).Value = fruit.Text
    view.dgvView.CurrentRow.Cells(3).Value = veggie.Text
    view.dgvView.CurrentRow.Cells(4).Value = pasta.Text
    view.dgvView.CurrentRow.Cells(5).Value = drink.Text
End Sub

表3(其中错误2,粗体部分和上面的代码是我看不懂的代码)

Public Class sky
    Private Sub dgvView_CellContentClick(ByVal sender As System.Object, ByVal e As 
    System.Windows.Forms.DataGridViewCellEventArgs) Handles sky.CellContentClick
        If e.ColumnIndex = 1 Then
            Dim entry As New sky(Me)
            entry.ShowInTaskbar = False
            entry.ShowDialog()
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles blue.Click
        Me.Close()
        **sky**.Show()

    End Sub
End Class

frmEntry 不是一个变量,它是一个类型(一个 class 名称)。您可以使用 Dim entry As New frmEntry(Me) 创建的变量 entry 来访问表单对象。但是由于这个变量是一个局部变量,它只能在声明它的 Sub 内部访问。在 class 级别(在 Sub 之外)声明它,以便其他 Sub 可以访问它。

Public Class frmView
    Dim entry As frmEntry ' <===== declare here

    Private Sub FirstSub()
        entry = New frmEntry(Me)  ' <==== Create and assign here
        entry.ShowInTaskbar = False
        entry.Show()
    End Sub

    Private Sub SecondSub()
        entry.Close() ' <=== Reference it from somewhere else
    End Sub
End Class

请注意,class(因此也是表单)是引用类型。除了像 Integer 这样的值类型,引用类型的变量不存储分配给它的对象,而是对该对象的引用。查看区别:

Dim a, b As Integer
Dim f1, f2 As frmTest

a = 5
b = a
b = 10
' Now a = 5 and b = 10

f1 = new frmTest()
f1.Text = "Test 1"
f2 = f1
f2.Text = "Test 2"
' Now f1.Text = "Test 2" and f2.Text = "Test 2" because there is only one Form
' object referenced by the two variables.