【问题标题】:ListBox cancel selectedValueChanged eventListBox 取消 selectedValueChanged 事件
【发布时间】:2014-01-05 22:23:11
【问题描述】:

我有一个问题,我似乎找不到答案。好的,我在表单上有一个数据集、dgv 和一个列表框。数据集有几个表,对于一些表,主键是通过列表框 selectedValueChanged 事件选择和设置的。用户单击列表框中的名称,并将项 selectedValue 分配给项变量。

item = Me.ListBoxItem.SelectedValue
Me.itemID = index

如果 dgv 中的更改尚未提交到数据库,我还有一个布尔 dsIsEditing 设置为 false。如果 dsIsEditing = true,我想要做的是阻止用户选择列表中的另一个项目。

我知道有一个带有 cancelEventArgs 参数的 ListBox 验证事件,但我不知道如何实现它。我得到的最接近的是从 ListBoxItem selectedValueChanged 事件中实现以下代码:

    If dsIsEditing = True Then
        Dim result As MsgBoxResult
        Dim clearMsg As String
        clearMsg = "You have unsave changes. Are you sure you " & _
                   "want to proceede? Any unsave changes will be lost."

        result = MessageBox.Show(clearMsg, "Switching Order Selection", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2)
        If result = MsgBoxResult.No Then
            RemoveHandler ListBoxItem.SelectedValueChanged, AddressOfListBoxItem_SelectedValueChanged
            Me.ListBoxItem.SelectedValue = Me.itemID
            AddHandler ListBoxItem.SelectedValueChanged, AddressOf ListBoxItem_SelectedValueChanged
            Exit Sub
        End If
    End If

代码执行我想要的,但是假设当前项目是项目 H,如果我单击项目 B,它将在 ListBox 中显示为选中状态,然后如果我选择不继续,它将恢复原状到项目 H。我在这里头疼:) 是找到正确的代码,以便如果从消息框中选择否,则项目 B 永远不会显示为列表框中的选定项。预先感谢您的回复。

【问题讨论】:

    标签: vb.net listbox


    【解决方案1】:

    在设计用户界面交互时,我发现阻止用户做某事而不是告诉他们它不正确然后尝试撤消他们所做的事情是一种更好的用户体验。

    在您的情况下,我会在 dsIsEditing 标志设置为 true 后立即禁用 ListBox,然后启用取消(或撤消)编辑按钮。

    “取消编辑”按钮会询问用户您在上面遇到的相同问题并执行任何必要的操作。

    成功保存更改后,重新启用列表框并禁用“取消编辑”按钮。

    如果由于某种原因这不起作用,您可以:

    1. 寻找支持类似 SelectedValueChanging 事件的第三方控件,该事件允许您在值更改之前取消操作。

    2. 子类化 ListBox 控件并尝试通过覆盖 OnSelectedValueChanged 方法自行实现此功能,尽管我不是 100% 相信这会解决您的特定问题。 Here is an example 用于 ComboBox; ListBox 的实现应该几乎相同。

    【讨论】:

    • 感谢您的回复。根据您禁用 ListBox 控件的建议,我想我是在正确的轨道上。我还有一个 DateTimePicker 控件,一旦 dsIsEditing=True,我将其设置为禁用。我应该考虑对 ListBox 做同样的事情。还要感谢您提供代码示例的链接。保重。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2011-05-07
    相关资源
    最近更新 更多