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