首页 > 解决方案 > 错误:对非共享成员的引用需要对象引用

问题描述

我正在制作的游戏是 connect 4 ,我打电话的形式在这里:

Public Class Form1
    Public players(1) As IPlayer
    Public playerturn As IPlayer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        buttons()
        init()
    End Sub
    Public Sub init()
        playerturn = players(0)
        Board1.Init()
        currentaturn.Text = String.Format("{0}'s turn", playerturn.name)
    End Sub
    Sub buttons()
        For i As Integer = 0 To 7
            Dim btn As New Button()
            btn.Text = "drop"
            btn.BackColor = Color.Pink
            btn.Size = New Size(40, 40)
            btn.Location = New Point(i * 48, 0)
            btn.Tag = i

            AddHandler btn.Click, AddressOf clickbutton
            Panel1.Controls.Add(btn)
        Next
    End Sub
    Sub clickbutton(ByVal sender As Object, ByVal e As EventArgs)
        Dim clickedbutton As Button = CType(sender, Button)
        Dim clickedcolumn As Integer = clickedbutton.Tag
        If (Board1.addpiecetocolumn(clickedcolumn, Color.Red) = False) Then

        Else
        End If

    End Sub


    Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LDBTN.Click

    End Sub

    Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles currentaturn.Click

    End Sub

    Private Sub RESETBTN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RESETBTN.Click
        loginsys.Show()
        Me.close

    End Sub
End Class

和我打电话给的表格:

Public Class board
    Public board(8, 8) As panelbox
    Public columns As Integer = 7
    Public rows As Integer = 7
    Public Sub New()
        InitializeComponent()
        Init()

    End Sub

    Public Sub Init()
        Me.Controls.Clear()
        For i As Integer = 0 To columns - 1
            For j As Integer = 0 To rows - 1
                board(i, j) = New panelbox()
                board(i, j).Size = New Size(50, 50)
                board(i, j).Location = New Point((i * 45), (j * 45))
                board(i, j).BackColor = Color.DodgerBlue
                Me.Controls.Add(board(i, j))
            Next
        Next
    End Sub
    Public Function addpiecetocolumn(ByVal x As Integer, ByVal colo As Color) As Boolean
        For y As Integer = rows - 1 To 0 Step -1
            If (board(x, y).Used = False) Then
                board(x, y).Used = True
                board(x, y).BackColor = colo
                Return True
            End If
        Next
        Return False
    End Function
End Class

应该注意的是,我正在命名第二个表单板,而调用错误的部分来自第一个表单:


Public Sub init()  
    playerturn = players(0)  
    Board1.Init()
    currentaturn.Text = String.Format("{0}'s turn", playerturn.name)
End Sub

任何帮助都会很棒

标签: vb.net

解决方案


使用Public Shared Function function_name,在这种情况下,你必须这样称呼它board.function_name


推荐阅读