防止组合框更新文本

Posted

技术标签:

【中文标题】防止组合框更新文本【英文标题】:Preventing combobox from updating text 【发布时间】:2015-08-02 17:35:19 【问题描述】:

我希望我的组合框将其selectedindex 重置为-1 并在选择下拉列表中的最后一项时打开一个表单。我目前正在通过以下方式实现它:

Private Sub cmbPrdMnu_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbPrdMnu.SelectedIndexChanged

    If cmbPrdMnu.SelectedIndex > -1 Then
        If cmbPrdMnu.SelectedItem.Equals("new...") Then
            cmbPrdMnu.SelectedIndex = -1
            'cmbPrdMnu.Text = ""
            frmManufacturer.Show()
            'cmbPrdCat.ResumeLayout()
        End If
    End If

End Sub

我的问题是组合框实际上会在删除文本然后打开表单之前显示所选项目。请问如何防止它显示所选项目?

谢谢

【问题讨论】:

奇怪,我刚刚在 Win10 / .NET 4.5.1 上进行了测试,它运行良好。您是否尝试过使用cmbPrdMnu.Refresh() 强制更新组合框? 你好,Saragis,我刚刚升级到 .NET 4.6 并尝试了 cmbPrdMnu.Refresh(),但它并没有改变任何东西。实际上,是 cmbPrdMnu.SelectedIndex = -1 从组合框中删除了文本。我不希望客户在组合框中看到“新...”。我想我将代码放在错误的 EventHandler 中,但我似乎没有解决它。请帮忙,任何人。 嗨,好的,我误解了你原来的问题。因此,您正在尝试进行类似悬停索引更改的事件,对吗?我查看了您的 VB 类,可以通过在 OnHover 中调用 RaiseEvent Hover(Me, e)myCustomCombobox 类中解决问题。不再需要所有其他代码。此外,您需要在表单中添加一个处理 cmbPrdMnu.Hover 事件的 Sub。这应该有效。 这是签名Private Sub cmbPrdMnu_Hover(sender As Object, e As Custom.HoverEventArgs) Handles cmbPrdMnu.Hover 否,控件实际上需要是myCustomCombobox 类型,而不仅仅是Combobox。您可以在表单的 Designer 文件中更改类型。 【参考方案1】:

在我和我(任何其他不知名的专家,如果有的话)申请了几天的德尔福技术之后,我仔细检查了组合框控件并偶然发现了 SelectionChangeCommitted 事件,这为我省去了很多麻烦天。对于那些有类似问题的人,这是我的代码:

Private Sub cmbPrdMnu_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles cmbPrdMnu.SelectionChangeCommitted
    cmbPrdMnu.SelectedIndex = cmbPrdMnu.Items.Count - 1 Then 
        cmbPrdMnu.SelectedIndex = -1 
        'Do some other stuff
        'Else
        'Do an alternative stuff here
    End If    
End Sub

@Saragis:这完全消除了我对自定义 VB 类的需求。谢谢你的努力;我很感激。

【讨论】:

以上是关于防止组合框更新文本的主要内容,如果未能解决你的问题,请参考以下文章

组合框绑定不更新

自动更新文本框

根据组合框选择填充文本框

当我手动更改 SelectedValueChanged 事件中的文本时,Windows 窗体组合框文本不会更新

使用组合框更改值单位时如何更新/转换数字文本框值?基于当前单位的值标准化?

MS Access - 带有组合框和文本框的 If 语句