Select 带按钮的 MessageBox 案例 Yes/No
Select case with a MessageBox with buttons Yes/No
我试图在登录表单期间引导用户。
如果用户单击 Yes
并且输入了昵称,则下一个表单将启动并关闭当前表单。
如果他们 select Yes
没有输入昵称,则会出现一条消息,通知用户名丢失并且不会显示其他表单。
如果他们 select No
,则 MessageBox 应该关闭。
这是我想出的代码:
Public Sub BttPlay_Click(sender As Object, e As EventArgs) Handles BttPlay.Click
Select Case MsgBox("The game is going to start, are you ready?", MessageBoxButtons.YesNo) And TxtUsername.Text = ""
Case DialogResult.Yes And TxtUsername.Text <> ""
nivel1.Show()
Me.Close()
Case DialogResult.Yes And TxtUsername.Text = ""
MsgBox("You must write your username", MessageBoxButtons.OK)
Case DialogResult.No
Me.Show()
End Select
Me.Refresh()
End Sub
问题是无论是否已输入昵称,它都会显示输入昵称的消息。我做错了什么?
如果用户没有输入姓名,程序将无法继续进行,因此请先检查此条件,然后通知 return 如果不满足此条件。
然后询问用户是否要开始新游戏(可能是多余的,因为用户已经输入了名称并按下了按钮)。
如果用户回答 No
,那么您将得到 DialogResult.No
结果,即 Return
,这里没有其他事情可做。
否则,显示 nivel1
表单并 最终 关闭当前表单(见页脚注释):
Public Sub BttPlay_Click(sender As Object, e As EventArgs) Handles BttPlay.Click
If TxtUsername.TextLength = 0 Then
MessageBox.Show("Please, name", "Name")
Return
End If
If MessageBox.Show("Start?", "New Game", MessageBoxButtons.YesNo) = DialogResult.No Then Return
nivel1.Show()
Me.Close()
End Sub
如果你因为某些原因需要使用Select Case
,你可以使用MessageBox的结果作为选择器。由于您可能只对阳性结果感兴趣,因此您可以先检查该情况,然后将其余的留给 Case Else
(因为只有两种可能的情况):
Public Sub BttPlay_Click(sender As Object, e As EventArgs) Handles BttPlay.Click
If txtDescription.TextLength = 0 Then
MessageBox.Show("Please, name", "Name")
Return
End If
Select Case MessageBox.Show("Start?", "New Game", MessageBoxButtons.YesNo)
Case DialogResult.Yes
nivel1.Show()
Me.Close()
Case Else
' NOP - It will just exit this method
' Me.Show() is not required, since Me is already shown
End Select
End Sub
请注意,如果 Me
是起始表单,Me.Close()
将结束程序。
您可能不想在此处关闭程序,因此请确保 Project->Properties->Application
中的 Shutdown mode
选项设置为 When last Form closes
。
您可以使用 Me.Hide()
作为替代。
既然你正在学习语言,我建议从一开始就设置 Option Strict On
。它将帮助您避免在编写一堆代码后难以发现的错误。
Visual Studio,调试器和 Intellisense 都将帮助找出代码中的问题,并建议如何修复它。
如果您设置此选项 On
(连同所有其他相关选项),
使用 Visual Studio 常规选项对话框。
在 TOOLS
菜单中,查看: Options->Projects and Solutions->VB Defaults
并将所有设置为 On
。
根本问题是 Select Case
仅适用于评估单个变量的条件。如果你想考虑另一个变量的条件,那么你不能使用 Select Case
并且必须退回到 If
-Then
/ ElseIf
-Then
/ Else
.
为了让您的代码按照编写的方式工作(搁置 Jimi 建议的重新设计),您可以这样做:
Dim response = MessageBox.Show(...)
If response = MessageBoxResult.Yes AndAlso TxtUserName.Text <> "" Then
'...
ElseIf response = MessageBoxResult.Yes AndAlso TxtUserName.Text = "" Then
'...
ElseIf response = MessageBoxResult.No Then
'...
End If
我试图在登录表单期间引导用户。
如果用户单击 Yes
并且输入了昵称,则下一个表单将启动并关闭当前表单。
如果他们 select Yes
没有输入昵称,则会出现一条消息,通知用户名丢失并且不会显示其他表单。
如果他们 select No
,则 MessageBox 应该关闭。
这是我想出的代码:
Public Sub BttPlay_Click(sender As Object, e As EventArgs) Handles BttPlay.Click
Select Case MsgBox("The game is going to start, are you ready?", MessageBoxButtons.YesNo) And TxtUsername.Text = ""
Case DialogResult.Yes And TxtUsername.Text <> ""
nivel1.Show()
Me.Close()
Case DialogResult.Yes And TxtUsername.Text = ""
MsgBox("You must write your username", MessageBoxButtons.OK)
Case DialogResult.No
Me.Show()
End Select
Me.Refresh()
End Sub
问题是无论是否已输入昵称,它都会显示输入昵称的消息。我做错了什么?
如果用户没有输入姓名,程序将无法继续进行,因此请先检查此条件,然后通知 return 如果不满足此条件。
然后询问用户是否要开始新游戏(可能是多余的,因为用户已经输入了名称并按下了按钮)。
如果用户回答 No
,那么您将得到 DialogResult.No
结果,即 Return
,这里没有其他事情可做。
否则,显示 nivel1
表单并 最终 关闭当前表单(见页脚注释):
Public Sub BttPlay_Click(sender As Object, e As EventArgs) Handles BttPlay.Click
If TxtUsername.TextLength = 0 Then
MessageBox.Show("Please, name", "Name")
Return
End If
If MessageBox.Show("Start?", "New Game", MessageBoxButtons.YesNo) = DialogResult.No Then Return
nivel1.Show()
Me.Close()
End Sub
如果你因为某些原因需要使用Select Case
,你可以使用MessageBox的结果作为选择器。由于您可能只对阳性结果感兴趣,因此您可以先检查该情况,然后将其余的留给 Case Else
(因为只有两种可能的情况):
Public Sub BttPlay_Click(sender As Object, e As EventArgs) Handles BttPlay.Click
If txtDescription.TextLength = 0 Then
MessageBox.Show("Please, name", "Name")
Return
End If
Select Case MessageBox.Show("Start?", "New Game", MessageBoxButtons.YesNo)
Case DialogResult.Yes
nivel1.Show()
Me.Close()
Case Else
' NOP - It will just exit this method
' Me.Show() is not required, since Me is already shown
End Select
End Sub
请注意,如果 Me
是起始表单,Me.Close()
将结束程序。
您可能不想在此处关闭程序,因此请确保 Project->Properties->Application
中的 Shutdown mode
选项设置为 When last Form closes
。
您可以使用 Me.Hide()
作为替代。
既然你正在学习语言,我建议从一开始就设置 Option Strict On
。它将帮助您避免在编写一堆代码后难以发现的错误。
Visual Studio,调试器和 Intellisense 都将帮助找出代码中的问题,并建议如何修复它。
如果您设置此选项 On
(连同所有其他相关选项),
使用 Visual Studio 常规选项对话框。
在 TOOLS
菜单中,查看: Options->Projects and Solutions->VB Defaults
并将所有设置为 On
。
根本问题是 Select Case
仅适用于评估单个变量的条件。如果你想考虑另一个变量的条件,那么你不能使用 Select Case
并且必须退回到 If
-Then
/ ElseIf
-Then
/ Else
.
为了让您的代码按照编写的方式工作(搁置 Jimi 建议的重新设计),您可以这样做:
Dim response = MessageBox.Show(...)
If response = MessageBoxResult.Yes AndAlso TxtUserName.Text <> "" Then
'...
ElseIf response = MessageBoxResult.Yes AndAlso TxtUserName.Text = "" Then
'...
ElseIf response = MessageBoxResult.No Then
'...
End If