Dialogbox调用本身会导致复选框变为空白vb.net

Dialogbox调用本身会导致复选框变为空白vb.net,vb.net,dialog,Vb.net,Dialog,我正在把桌面纸牌游戏转换成电脑游戏。当有人攻击具有闪避/阻挡/解除武装(如果通过武器攻击)的人时,防御者有机会避免受到攻击的伤害。这部分很好用 如果防守队员受到“旋转反攻”或“回旋踢”的攻击,那么攻击将反弹到防守队员旁边的球员身上。被攻击球员被弹跳到的球员应该是原防守球员选择的球员(必须是他们旁边的球员)。这一部分也适用 我的问题是,如果下一个防守球员有一张“道奇”牌,那么他们应该被赋予同样的选择,将攻击反弹给他们旁边的球员 我实现这一点的方法是使用一个用例来瞄准新的对应玩家,如果他们库存中的道

我正在把桌面纸牌游戏转换成电脑游戏。当有人攻击具有闪避/阻挡/解除武装(如果通过武器攻击)的人时,防御者有机会避免受到攻击的伤害。这部分很好用

如果防守队员受到“旋转反攻”或“回旋踢”的攻击,那么攻击将反弹到防守队员旁边的球员身上。被攻击球员被弹跳到的球员应该是原防守球员选择的球员(必须是他们旁边的球员)。这一部分也适用

我的问题是,如果下一个防守球员有一张“道奇”牌,那么他们应该被赋予同样的选择,将攻击反弹给他们旁边的球员

我实现这一点的方法是使用一个用例来瞄准新的对应玩家,如果他们库存中的道奇牌>0,那么我使用call函数来调用load函数,重新开始这个过程。但在加载后,复选框将完全消失

我添加了几个标签,以帮助找到代码可能出错的地方。我知道加载程序是有效的。在“calculateload程序”中的某个地方似乎正在这样做

我已经列出了dodgeblockdisarm对话框的全部代码。 加载函数的一半多一点

Public Class DodgeBlockDisarmDialog
    Dim Number As Integer
    Dim Rnd As Random
    Public DiscardWeapon As Boolean
    Public PlayerTemp As Integer
    Public MultipleExecutionBoolean As Boolean = False



    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
        Dim String1 As String = ""
        Dim String2 As String = ""
        Dim IDBuster, SelectPlayer, PlayerCardsInteger, Number As Integer
        Dim CardsA As Integer = LunchMoneyMainForm.T * 5
        Dim CardsB As Integer = 5 * LunchMoneyMainForm.T + 4

        Dim CheckBoxArray() As CheckBox = {AvoidCheckBox, AvoidCheckBox2, AvoidCheckBox3, AvoidCheckBox4, AvoidCheckBox5}

        For PlayerCardsInteger = CardsA To CardsB
            Dim TextConverInteger As Integer = PlayerCardsInteger Mod 5

            'Choose player and select specific cards
            Select Case LunchMoneyMainForm.T
                Case 0
                    SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger
                    IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
                Case 1
                    SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger2
                    IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
                Case 2
                    SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger3
                    IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
                Case 3
                    SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger4
                    IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
                Case 4
                    SelectPlayer = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger5
                    IDBuster = LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).ID
            End Select
            If CheckBoxArray(TextConverInteger).Checked = True AndAlso (IDBuster = 14 Or IDBuster = 17 Or (IDBuster = 16 And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
                                                                                                           LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11))) Then
                'Set NoHPLoss to 0

                LunchMoneyMainForm.NoHPLoss = 0
                'Subtract cards from defender's deck
                Select Case LunchMoneyMainForm.T
                    Case 0
                        LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger -= 1
                    Case 1
                        LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger2 -= 1
                    Case 2
                        LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger3 -= 1
                    Case 3
                        LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger4 -= 1
                    Case 4
                        LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.NumberArray(PlayerCardsInteger)).QuantityInteger5 -= 1
                End Select

                Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.DeckGroup Where r.QuantityInteger > 0 Select r

                If temp IsNot Nothing AndAlso temp.Count > 0 Then
                    Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)

                    LunchMoneyMainForm.DeckGroup(Number).QuantityInteger -= 1
                    'Select the Player depending value of T
                    Select Case LunchMoneyMainForm.T
                        Case 0
                            LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger += 1
                        Case 1
                            LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger2 += 1
                        Case 2
                            LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger3 += 1
                        Case 3
                            LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger4 += 1
                        Case 4
                            LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger5 += 1
                    End Select

                    LunchMoneyMainForm.CardTypeArray(PlayerCardsInteger) = LunchMoneyMainForm.Player1HandGroup(Number).CardType
                    CheckBoxArray(TextConverInteger).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
                    LunchMoneyMainForm.NumberArray(PlayerCardsInteger) = Number
                End If

                If CheckBoxArray(TextConverInteger).Checked = True And IDBuster = 17 And LunchMoneyMainForm.CounterTrueFalse = True Then
                    Select Case LunchMoneyMainForm.T
                        Case 0
                            AtkPlayerDialog.Player1.Enabled = False
                            AtkPlayerDialog.Player2.Enabled = True
                            AtkPlayerDialog.Player3.Enabled = False
                            AtkPlayerDialog.Player4.Enabled = False
                            AtkPlayerDialog.Player5.Enabled = True
                            String1 = "Player 2"
                            String2 = "Player 5"
                        Case 1
                            AtkPlayerDialog.Player1.Enabled = True
                            AtkPlayerDialog.Player2.Enabled = False
                            AtkPlayerDialog.Player3.Enabled = True
                            AtkPlayerDialog.Player4.Enabled = False
                            AtkPlayerDialog.Player5.Enabled = False
                            String1 = "Player 1"
                            String2 = "Player 3"
                        Case 2
                            AtkPlayerDialog.Player1.Enabled = False
                            AtkPlayerDialog.Player2.Enabled = True
                            AtkPlayerDialog.Player3.Enabled = False
                            AtkPlayerDialog.Player4.Enabled = True
                            AtkPlayerDialog.Player5.Enabled = False
                            String1 = "Player 2"
                            String2 = "Player 4"
                        Case 3
                            AtkPlayerDialog.Player1.Enabled = False
                            AtkPlayerDialog.Player2.Enabled = False
                            AtkPlayerDialog.Player3.Enabled = True
                            AtkPlayerDialog.Player4.Enabled = False
                            AtkPlayerDialog.Player5.Enabled = True
                            String1 = "Player 3"
                            String2 = "Player 5"
                        Case 4
                            AtkPlayerDialog.Player1.Enabled = True
                            AtkPlayerDialog.Player2.Enabled = False
                            AtkPlayerDialog.Player3.Enabled = False
                            AtkPlayerDialog.Player4.Enabled = True
                            AtkPlayerDialog.Player5.Enabled = False
                            String1 = "Player 1"
                            String2 = "Player 4"
                    End Select
                    AtkPlayerDialog.RoundFistLabel.Text = "Attack " & String1 & " or " & String2 & "!"
                    AtkPlayerDialog.ShowDialog()

                    LunchMoneyMainForm.N = AtkPlayerDialog.DialogResult


                    'if attacked player has a dodge or block card, then open dodge/block dialog
                    Select Case (LunchMoneyMainForm.N)
                        Case 1
                            If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger > 0 Then
                                MultipleExecutionBoolean = True
                                OK_Button.Visible = False
                                Call DodgeBlockDialog_Load(sender, e)
                                testerslabel.Text = "1"
                            End If
                        Case 2
                            If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger2 > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger2 > 0 Then
                                MultipleExecutionBoolean = True
                                Call DodgeBlockDialog_Load(sender, e)
                                testerslabel.Text = "2"
                            End If
                        Case 3
                            If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger3 > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger3 > 0 Then
                                MultipleExecutionBoolean = True
                                Call DodgeBlockDialog_Load(sender, e)
                                testerslabel.Text = "3"
                            End If
                        Case 4
                            If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger4 > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger4 > 0 Then
                                MultipleExecutionBoolean = True
                                Call DodgeBlockDialog_Load(sender, e)
                                testerslabel.Text = "4"
                            End If
                        Case 5
                            If LunchMoneyMainForm.Player1HandGroup(14).QuantityInteger5 > 0 Or LunchMoneyMainForm.Player1HandGroup(17).QuantityInteger5 > 0 Then
                                MultipleExecutionBoolean = True
                                Call DodgeBlockDialog_Load(sender, e)
                                testerslabel.Text = "5"
                            End If
                    End Select




                    LunchMoneyMainForm.Player1HandGroup(LunchMoneyMainForm.N).HitPoints -= LunchMoneyMainForm.TempDamageStorage
                    LunchMoneyMainForm.TempDamageStorage = 0

                    AtkPlayerDialog.RoundFistLabel.Visible = False

                    LunchMoneyMainForm.HitPoints1.Text = LunchMoneyMainForm.Player1HandGroup(1).HitPoints.ToString
                    LunchMoneyMainForm.HitPoints2.Text = LunchMoneyMainForm.Player1HandGroup(2).HitPoints.ToString
                    LunchMoneyMainForm.HitPoints3.Text = LunchMoneyMainForm.Player1HandGroup(3).HitPoints.ToString
                    LunchMoneyMainForm.HitPoints4.Text = LunchMoneyMainForm.Player1HandGroup(4).HitPoints.ToString
                    LunchMoneyMainForm.HitPoints5.Text = LunchMoneyMainForm.Player1HandGroup(5).HitPoints.ToString


                    LunchMoneyMainForm.CounterTrueFalse = False
                End If
                If LunchMoneyMainForm.IDbuster = 8 OrElse LunchMoneyMainForm.IDbuster = 9 OrElse LunchMoneyMainForm.IDbuster = 10 OrElse LunchMoneyMainForm.IDbuster = 11 Then
                    DiscardWeapon = True
                End If
            End If
            CheckBoxArray(TextConverInteger).Checked = False
        Next PlayerCardsInteger


        LunchMoneyMainForm.T = PlayerTemp

        If MultipleExecutionBoolean = False Then
            Me.DialogResult = System.Windows.Forms.DialogResult.OK
        End If
    End Sub

    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        LunchMoneyMainForm.T = PlayerTemp
    End Sub

    Private Sub DodgeBlockDialog_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        OK_Button.Enabled = False
        Dim CheckBoxArray() As CheckBox = {AvoidCheckBox, AvoidCheckBox2, AvoidCheckBox3, AvoidCheckBox4, AvoidCheckBox5}

        'show player number on load
        PlayerLabel.Text = "Player " & LunchMoneyMainForm.N

        'store attackers value of T so the defender can retaliate
        If MultipleExecutionBoolean = False Then
            PlayerTemp = LunchMoneyMainForm.T
            LunchMoneyMainForm.T = (LunchMoneyMainForm.N - 1)
        Else
            LunchMoneyMainForm.T = (LunchMoneyMainForm.N - 1)
            TLabel.Text = LunchMoneyMainForm.T.ToString
        End If

        Call CalculateLoad()
    End Sub
    Private Sub CalculateLoad()
        Dim roll As Integer
        Dim CheckBoxArray() As CheckBox = {AvoidCheckBox, AvoidCheckBox2, AvoidCheckBox3, AvoidCheckBox4, AvoidCheckBox5}
        'Player1
        If LunchMoneyMainForm.T = 0 Then
            For roll = 0 To 4
                Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger > 0 Select r
                If temp IsNot Nothing AndAlso temp.Count > 0 Then
                    Dim rolls As Integer = roll Mod 5
                    LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger -= 1
                    LunchMoneyMainForm.NumberArray(roll) = Number
                    CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
                End If
            Next roll
            For roll = 0 To 4
                Number = LunchMoneyMainForm.NumberArray(roll)
                LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger += 1

            Next


        End If
        'player2
        If LunchMoneyMainForm.T = 1 Then
            For roll = 5 To 9
                Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger2 > 0 Select r
                If temp IsNot Nothing AndAlso temp.Count > 0 Then
                    Dim rolls As Integer = roll Mod 5
                    Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
                    LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger2 -= 1
                    LunchMoneyMainForm.NumberArray(roll) = Number
                    CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
                End If
            Next roll
            For roll = 5 To 9
                Number = LunchMoneyMainForm.NumberArray(roll)
                LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger2 += 1

            Next

        End If
        'player3
        If LunchMoneyMainForm.T = 2 Then
            For roll = 10 To 14
                Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger3 > 0 Select r
                If temp IsNot Nothing AndAlso temp.Count > 0 Then
                    Dim rolls As Integer = roll Mod 5
                    Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
                    LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger3 -= 1
                    LunchMoneyMainForm.NumberArray(roll) = Number
                    CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
                End If
            Next roll
            For roll = 10 To 14
                Number = LunchMoneyMainForm.NumberArray(roll)
                LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger += 1

            Next

        End If

        'player4
        If LunchMoneyMainForm.T = 3 Then
            For roll = 15 To 19
                Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger4 > 0 Select r
                If temp IsNot Nothing AndAlso temp.Count > 0 Then
                    Dim rolls As Integer = roll Mod 5
                    Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
                    LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger4 -= 1
                    LunchMoneyMainForm.NumberArray(roll) = Number
                    CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
                End If
            Next roll
            For roll = 15 To 19
                Number = LunchMoneyMainForm.NumberArray(roll)
                LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger4 += 1

            Next

        End If
        'player5
        If LunchMoneyMainForm.T = 4 Then
            For roll = 20 To 24
                Dim temp As IEnumerable(Of LunchMoneyGame.LunchMoneyMainForm.Group) = From r In LunchMoneyMainForm.Player1HandGroup Where r.QuantityInteger5 > 0 Select r
                If temp IsNot Nothing AndAlso temp.Count > 0 Then
                    Dim rolls As Integer = roll Mod 5
                    Number = (temp(LunchMoneyMainForm.Rnd.Next(0, temp.Count)).ID)
                    LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger5 -= 1
                    LunchMoneyMainForm.NumberArray(roll) = Number
                    CheckBoxArray(rolls).Text = LunchMoneyMainForm.Player1HandGroup(Number).CardNameString
                End If
            Next roll
            For roll = 20 To 24
                Number = LunchMoneyMainForm.NumberArray(roll)
                LunchMoneyMainForm.Player1HandGroup(Number).QuantityInteger5 += 1

            Next

        End If

        'Make checkboxes visible if Dodge or Block, or Disarm(if weapon) card are in the inventory


        If CheckBoxArray(0).Text = "Dodge" Or CheckBoxArray(0).Text = "Block" Or (CheckBoxArray(0).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
                                                                                                                                     LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
            CheckBoxArray(0).Visible = True
        End If
        If CheckBoxArray(1).Text = "Dodge" Or CheckBoxArray(1).Text = "Block" Or (CheckBoxArray(1).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
                                                                                                                                     LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
            CheckBoxArray(1).Visible = True
        End If
        If CheckBoxArray(2).Text = "Dodge" Or CheckBoxArray(2).Text = "Block" Or (CheckBoxArray(2).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
                                                                                                                                     LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
            CheckBoxArray(2).Visible = True
        End If
        If CheckBoxArray(3).Text = "Dodge" Or CheckBoxArray(3).Text = "Block" Or (CheckBoxArray(3).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
                                                                                                                                     LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
            CheckBoxArray(3).Visible = True
        End If
        If CheckBoxArray(4).Text = "Dodge" Or CheckBoxArray(4).Text = "Block" Or (CheckBoxArray(4).Text = "Disarm" And (LunchMoneyMainForm.IDbuster = 8 Or LunchMoneyMainForm.IDbuster = 9 Or _
                                                                                                                                     LunchMoneyMainForm.IDbuster = 10 Or LunchMoneyMainForm.IDbuster = 11)) Then
            CheckBoxArray(4).Visible = True
        End If
    End Sub

当然。您在事件线程内处理代码,并且在事件线程中调用相同的函数。首先,您不应该像现在这样直接调用load方法,其次,开始使用后台线程。

一般来说,我是新手。后台线程有什么好的解释吗?我会给您一个简短的介绍只有一个线程管理所有UI事件,其中包括渲染。加载方法作为系统事件引发,因此,如果您在该方法中执行任何长操作,整个UI将处于无响应状态。在您的程序中,您可以这样做,并且当您调用加载方法时,您还有一个不带guard子句的循环函数在同一个方法中。至于线程,请查看以下简单的提供程序: