Dialogbox调用本身会导致复选框变为空白vb.net
我正在把桌面纸牌游戏转换成电脑游戏。当有人攻击具有闪避/阻挡/解除武装(如果通过武器攻击)的人时,防御者有机会避免受到攻击的伤害。这部分很好用 如果防守队员受到“旋转反攻”或“回旋踢”的攻击,那么攻击将反弹到防守队员旁边的球员身上。被攻击球员被弹跳到的球员应该是原防守球员选择的球员(必须是他们旁边的球员)。这一部分也适用 我的问题是,如果下一个防守球员有一张“道奇”牌,那么他们应该被赋予同样的选择,将攻击反弹给他们旁边的球员 我实现这一点的方法是使用一个用例来瞄准新的对应玩家,如果他们库存中的道奇牌>0,那么我使用call函数来调用load函数,重新开始这个过程。但在加载后,复选框将完全消失 我添加了几个标签,以帮助找到代码可能出错的地方。我知道加载程序是有效的。在“calculateload程序”中的某个地方似乎正在这样做 我已经列出了dodgeblockdisarm对话框的全部代码。 加载函数的一半多一点Dialogbox调用本身会导致复选框变为空白vb.net,vb.net,dialog,Vb.net,Dialog,我正在把桌面纸牌游戏转换成电脑游戏。当有人攻击具有闪避/阻挡/解除武装(如果通过武器攻击)的人时,防御者有机会避免受到攻击的伤害。这部分很好用 如果防守队员受到“旋转反攻”或“回旋踢”的攻击,那么攻击将反弹到防守队员旁边的球员身上。被攻击球员被弹跳到的球员应该是原防守球员选择的球员(必须是他们旁边的球员)。这一部分也适用 我的问题是,如果下一个防守球员有一张“道奇”牌,那么他们应该被赋予同样的选择,将攻击反弹给他们旁边的球员 我实现这一点的方法是使用一个用例来瞄准新的对应玩家,如果他们库存中的道
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子句的循环函数在同一个方法中。至于线程,请查看以下简单的提供程序: