使用带有按钮 Yes/No

时间:2021-03-17 01:57:00

标签: .net vb.net winforms messagebox

我正在尝试在登录表单中引导用户。
如果用户点击 Yes 并输入了昵称,则下一个表单将启动,当前表单将关闭。

如果他们在未输入昵称的情况下选择 Yes,则会出现一条消息,告知用户名丢失且不显示其他表单。

如果他们选择 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

问题在于,无论是否已输入昵称,它都会显示输入昵称的消息。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果用户没有输入姓名,程序将无法继续,请先检查此条件,如果不满足此条件,则通知并返回。

然后询问用户是否要开始新游戏(可能是多余的,因为用户已经输入了名称并按下了按钮)。
如果用户回答 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() 将结束程序。
可能不想在此处关闭程序,因此请确保将 Shutdown mode 中的 Project->Properties->Application 选项设置为 When last Form closes
您可以使用 Me.Hide() 作为替代。


由于您正在学习语言,我建议从一开始就设置 Option Strict On。它将帮助您避免编写大量代码后难以发现的错误。
Visual Studio、调试器和 Intellisense 都将帮助找出代码的问题,并建议如何修复它。

您可以设置此选项 On(以及其他相关选项), 使用 Visual Studio 常规选项对话框。
TOOLS 菜单中,请参阅:Options->Projects and Solutions->VB Defaults 并将所有设置为 On

答案 1 :(得分:1)

根本问题是 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
相关问题