VB.NET - MessageBox YesNo条件语句不起作用

时间:2014-09-01 17:09:24

标签: vb.net

我有一个程序,我正在清除用户用来回答多项选择问题的组合框。如果用户单击“清除”,则会弹出一个消息框,并询问用户是否确定要清除表单。如果他们按是,它会清除所有组合框。截至目前,如果用户按下否,它仍然会清除组合框。

代码:

  Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click

    MessageBox.Show("Are you sure you want to clear your answers?", "Attention!",             MessageBoxButtons.YesNo)
    If Windows.Forms.DialogResult.Yes Then
        For Each cbo As ComboBox In Controls.OfType(Of ComboBox)()
            cbo.Items.Clear()
        Next
    End If


End Sub

2 个答案:

答案 0 :(得分:3)

您需要捕获MessageBox结果:

Dim dlgR as DialogResult

DlgR = MessageBox.Show("Are you sure you want to clear your answers?", 
            "Attention!", MessageBoxButtons.YesNo)

' then test it:
If dlgR = DialogResult.Yes Then
    For Each cbo As ComboBox In Controls.OfType(Of ComboBox)()
        cbo.Items.Clear()
    Next
End If

MessageBox是一个返回DialogResult的函数。你的代码

If Windows.Forms.DialogResult.Yes Then...

不评估用户的反应; DialogResult.Yes不是False(0),所以它总是为True并且无论它们回答什么都会导致CBO被清除。

此外,该代码在Option Strict下不合法。 VB / VS会通知您,并在Option Strict开启时提示您更改它;这样可以避免其他地方出现许多类似且更严重的错误。

答案 1 :(得分:0)

您也可以使用以下方法:

    If MsgBox("Are you sure you want to clear your answers?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
        cbo.Items.Clear()
    Else
        'false condition to be executed
    End If

注意:要清除组合框项目,您不需要使用迭代循环cbo.Items.Clear()将清除组合框的项目列表

如果您想从中删除特定项目,可以使用两种方法

  • 基于item

    cbo.Items.Remove("Item As string")

示例: cbo.Items.Remove("Apple")

  • 基于Index

    cbo.Items.RemoveAt(Index As Integer)

示例: cbo.Items.RemoveAt(2)