VB.net Проблема с If-оператором, не выполняющимся, когда утверждение истинно - PullRequest
0 голосов
/ 10 марта 2019

Со следующими глобальными переменными:

Dim SpilleBræt(8, 8) As PictureBox
Dim Position(8, 8) As String
Dim MarkeretFelt(8, 8) As String
Dim FeltFarve As String
Dim x As Integer
Dim y As Integer
Dim AktivMarkering As Boolean = 0
Dim SpilleBrik As String

И этот код:

    Private Sub PictureBox_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim FeltValg As PictureBox = CType(sender, PictureBox)
    If AktivMarkering = 1 Then
        x = Mid(sender.name, sender.name.Length - 1, 1)
        y = Mid(sender.name, sender.name.Length, 1)

        Select Case Position(y, x)
            Case "LightTileMarked"
                Me.SpilleBræt(y, x).BackgroundImage = My.Resources.ResourceManager.GetObject(SpilleBrik & "LightTile")
            Case "DarkTileMarked"
                Me.SpilleBræt(y, x).BackgroundImage = My.Resources.ResourceManager.GetObject(SpilleBrik & "DarkTile")
            Case Else
                'fjerner markerede
                Select Case Position(y, x)
                    Case "BlackTower", "WhiteTower"
                        MsgBox("Tårn")

                    Case "BlackHorse", "WhiteHorse"
                        MsgBox("Hest")


                    Case "BlackBishop", "WhiteBishop"
                        MsgBox("Løber")

                    Case "WhiteKing", "BlackKing"
                        MsgBox("Konge")

                    Case "WhiteQueen", "BlackQueen"
                        MsgBox("Dronning")

                    Case "WhitePawn", "BlackPawn"
                        For k As Integer = y To 1 Step -1
                            If Position(k, x) = "" Then
                                If (k + x) Mod 2 = 1 Then
                                    FeltFarve = "DarkTile"
                                Else
                                    FeltFarve = "LightTile"
                                End If
                                Me.SpilleBræt(x, k).BackgroundImage = My.Resources.ResourceManager.GetObject(FeltFarve)
                            ElseIf Position(k, x) = "WhitePawn" Or Position(k, x) = "BlackPawn" Then

                                'background død brik

                            Else
                                k = 1
                            End If
                        Next
                End Select
        End Select

    Else
        'indsætter markering
        'x,y i picturebox'ens navn fx ->(SpilBrik44) hvor x=4 og y=4
        x = Mid(sender.name, sender.name.Length - 1, 1)
        y = Mid(sender.name, sender.name.Length, 1)

        Select Case Position(y, x)
            Case "BlackTower", "WhiteTower"
                MsgBox("Tårn")

            Case "BlackHorse", "WhiteHorse"
                MsgBox("Hest")


            Case "BlackBishop", "WhiteBishop"
                MsgBox("Løber")

            Case "WhiteKing", "BlackKing"
                MsgBox("Konge")

            Case "WhiteQueen", "BlackQueen"
                MsgBox("Dronning")

            Case "WhitePawn", "BlackPawn"
                For k As Integer = y To 1 Step -1
                    If Position(k, x) = "" Then
                        If (k + x) Mod 2 = 1 Then
                            FeltFarve = "DarkTileMarked"
                        Else
                            FeltFarve = "LightTileMarked"
                        End If
                        Me.SpilleBræt(x, k).BackgroundImage = My.Resources.ResourceManager.GetObject(FeltFarve)
                        MarkeretFelt(x, k) = FeltFarve
                        AktivMarkering = 1
                    ElseIf Position(k, x) = "WhitePawn" Or Position(k, x) = "BlackPawn" Then

                        'background død brik

                    Else
                        k = 1
                    End If
                Next
        End Select
    End If
End Sub

У меня проблема с первым оператором If aktivmarkering = 1, он переходит непосредственно к «Else», даже если операторы верны. При первом запуске кода активмаркеринг равен = 0, и, следовательно, он явно переходит к «Остальное», но после этого запуск АктивМаркеринг равен = 1, и сначала, если он должен быть выполнен. Я не понимаю, почему нет - кто-нибудь, кто может помочь? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...