引用非共享成员需要 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.
我有 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.