1

因此,我在单击按钮上有一个子按钮,它执行以下操作:

  1. 如果组合框中的文本条目 (cmbServerInstall.Text) 为空白,首先它将强制用户在继续之前进行选择。
  2. 否则,将使用组合框 (cmbServerInstall.Text) 中的文本填充字符串 (strGameServer)。
  3. 从这里开始,MessageBox 将显示一个是/否选项,询问用户是否希望继续。

这就是事情出错的地方。

我想要发生的事情

  1. 如果用户选择是,那么我想使用另一个 if/else 来确定字符串 strGameServer 中存储的内容。根据设置的内容,它将启动两个批处理文件之一(我知道文件路径目前是相同的,我计划在以后更新它)。
  2. 如果用户选择否,我希望它从组合框 cmbServerInstall 中删除选择。

目前正在发生的事情

  1. 基本上,无论 MsgBoxResult 是 Yes 还是 No,shell 命令都会启动批处理文件。

任何人都可以看看下面的代码并指出我出错的方向吗?嵌套的 IF 似乎对我越来越好。

    Dim strGameServer As String

    If cmbServerInstall.Text = "" Then
        MessageBox.Show("Please select a game server to install", "No game server selected", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
    Else
        strGameServer = cmbServerInstall.Text
        MessageBox.Show("You have chosen" + " " + strGameServer + "." + " " + "Please confirm you wish to proceed with your selection.", "Confirm game server selection", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
        If MsgBoxResult.Yes Then
            If strGameServer = "Counter-Strike: Global Offensive" Then
                Shell("C:\Users\Damon\Desktop\YorkshaLAN Server Creator\YorkshaLAN Server Setup.bat", AppWinStyle.NormalFocus)
            Else : strGameServer = "Team Fortress 2"
                Shell("C:\Users\Damon\Desktop\YorkshaLAN Server Creator\YorkshaLAN Server Setup.bat", AppWinStyle.NormalFocus)
            End If
        Else
            cmbServerInstall.Text = ""
        End If

        cmbServerInstall.Text = ""
        cmbServerInstall.Enabled = False
        btnServerGoInstall.Enabled = False
    End If
End Sub
4

2 回答 2

1

您需要从 MessageBox.Show 保存结果然后检查它,或者在一行中进行。

原代码编辑:

If cmbServerInstall.Text = "" Then
    MessageBox.Show("Please select a game server to install", "No game server selected", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
Else
    Dim strGameServer As String = cmbServerInstall.Text ' Moved init to avoid declaration without use '
    If MessageBox.Show("You have chosen" & " " & strGameServer & "." & " " & "Please confirm you wish to proceed with your selection.",
      "Confirm game server selection",
      MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) =MsgBoxResult.Yes Then
        If strGameServer = "Counter-Strike: Global Offensive" Then
            Shell("C:\Users\Damon\Desktop\YorkshaLAN Server Creator\YorkshaLAN Server Setup.bat", AppWinStyle.NormalFocus)
        Else
            strGameServer = "Team Fortress 2"
            Shell("C:\Users\Damon\Desktop\YorkshaLAN Server Creator\YorkshaLAN Server Setup.bat", AppWinStyle.NormalFocus)
        End If
    Else
        cmbServerInstall.Text = ""
    End If

    cmbServerInstall.Text = ""
    cmbServerInstall.Enabled = False
    btnServerGoInstall.Enabled = False
End If

结束子

于 2013-09-05T22:26:35.847 回答
0

您需要获取带有问题的 MessageBox 的结果并检查结果

   Dim result = MessageBox.Show("You have chosen ......")
   If result = MsgBoxResult.Yes Then
       .....

实际上,您的代码检查枚举 MsgBoxResult.Yes 并且因为它不为零,所以 if 总是被评估为 true

另外,如果我是你,我会尝试删除旧的 VB6 语法和枚举的任何用法。实际上MessageBox.Show返回一个 DialogResult 枚举而不是一个 MsgBoxResult。这只是为了 VB6 兼容性

   Dim result = MessageBox.Show("You have chosen ......")
   If result = DialogResult.Yes Then
于 2013-09-05T22:27:47.227 回答