MessageBox显示两次而不是一次

时间:2017-05-02 13:37:33

标签: vb.net infragistics messagebox

我的表单上有一个UltraComboBox控件,它使用以下代码。

Private Sub cmbType_ValueChanged(sender as Object, e as EventArgs) Handles cmbType.ValueChanged
  If cmbType.Value <> "" Then
       If cmbType.Value = "Custom Template" Then
           Dim da As New OleDbDataAdapter("SELECT * FROM [System Settings]", con)
           Dim ds As New DataSet
           Da.Fill(ds)

           If ds.Tables(0).Rows(0).Item("enableTemplate") = False Then
               MessageBox.Show("Custom Templates have not been enabled at system level.", "Cannot Add Custom Template", MessageBoxButtons.OK, MessageBoxIcon.Information)
               cmbType.Value = ""
           End If
       ElseIf cmbType.Value = "Default Template"
           ' ...
       End If
  End If
End Sub

我得到的问题是,关闭MessageBox后,它将值设置为“”,然后迭代代码,然后,由于某种原因,再次执行,但值返回“自定义”模板“,所以MessageBox第二次显示。

代码有问题,或者有更简单的方法吗?

修改

以下没有影响它,所以我假设我没有正确解释@ Steve的建议。

If ds.Tables(0).Rows(0).Item("enableTemplate") = False Then
    MessageBox.Show("Custom Templates have not been enabled at system level.", "Cannot Add Custom Templates", MessageBoxButtons.OK, MessageBoxIcon.Information)
    RemoveHandler cmbType.ValueChanged, AddressOf cmbType_ValueChanged
    cmbType.Value = ""
    AddHandler cmbType.ValueChanged, AddressOf cmbType_ValueChanged
End If

编辑2

根据@ HansPasssant的建议:

If ds.Tables(0).Rows(0).Item("enableTemplate") = False Then
    Me.BeginInvoke(Sub() MessageBox.Show("Custom Templates have not been enabled at system level.", "Cannot Add Custom Templates", MessageBoxButtons.OK, MessageBoxIcon.Information))
    RemoveHandler cmbType.ValueChanged, AddressOf cmbType_ValueChanged
    cmbType.Value = ""
    AddHandler cmbType.ValueChanged, AddressOf cmbType_ValueChanged
End If

这仍然会显示MessageBox两次。

2 个答案:

答案 0 :(得分:0)

如果是UltraCombo中的错误,就像是这样,你有两个选择:

1)使用常规ComboBox做同样的事情 - 尽管如此,它看起来会有所不同,因此最终用户可能对此并不满意。

2)或者,如果DropDownList中没有大量项目,您可以在RadioButtons中使用GroupBox来执行相同的操作。

然后,如果自定义模板RadioButton.Checked = True,运行相同的检查并输出MessageBox

如果没有升级控件,你可以做的很多,所以我猜这些是你唯一的选择。

答案 1 :(得分:0)

在ValueChanged事件中设置组合的值时,您将强制再次触发此事件。当您处于事件中间时,这可能会导致您的情况出现奇怪的结果。您可以做的是通过设置其值,在设置其值之前通过其EventManager转换UltraCombo的事件:

UltraCombo.EventManager.AllEventsEnabled = false

然后,在设置值后,将所有启用的事件设置为true