【问题标题】:vb.net ComboBox Text Changing When Leftvb.net ComboBox 左侧文本更改
【发布时间】:2019-03-24 11:03:19
【问题描述】:

我的 ComboBoxes 有问题,如果我输入它以获取一个值,然后将文本更改为列表中的第一个项目并键入第一个字母。

我有:

  • AutoCompleteMode 设置为 SuggestAppend
  • AutoCompleteSource 设置为 ListItems
  • DropDownStyle 设置为 DropDownList

我在 ComboBox 所在的 Form 的 Load 事件中添加 ComboBox 的项目。

例如下面是来自 Load 事件的代码,我在其中填充了我设置如下的 ComboBox。

   `Me.ComboBox1.Text = ""
    Me.ComboBox1.Items.Add("a")
    Me.ComboBox1.Items.Add("aaa")
    Me.ComboBox1.Items.Add("combo")
    Me.ComboBox1.Items.Add("combobox")
    Me.ComboBox1.Items.Add("combobox test")
    Me.ComboBox1.Items.Add("common")
    Me.ComboBox1.Items.Add("common dialog")` 

运行代码后,如果我选择 ComboBox1 并键入 common - 在 ComboBox1 中选择 common,但如果我离开 ComboBox1,则 Text 将恢复为组合。

这有点奇怪,好像我在它抛出的常见 ComboBox1_Leave 事件过程中使用以下代码:

MsgBox(ComboBox1.Text)

我还尝试将 Text 的值分配给 ComboBox1_KeyUp 事件过程中的字符串,然后将其分配给 ComboBox1_Leave 事件过程中的 ComboBox1.Text ,但这没有任何作用。

如果我在将字符串值分配给 ComboBox1.Text 之前放置了上面的 MsgBox 代码,那么 Text 值会恢复为 Common 但这不是一个实际的解决方案。

我还注意到,如果我在按 Tab 之前按 Enter 键,它会保留正确的值,但我再次认为这不是一个特别实用的解决方案。

有谁知道这里发生了什么以及我该如何解决它?

【问题讨论】:

    标签: vb.net combobox


    【解决方案1】:

    绝对有必要将 DropDownStyle 设置为 DropDownList?

    因为如果你设置DropDownStyle to DropDown,当你按下Tab键或者失去焦点时,选择的值将被保留。

    如果绝对有必要这样做,你可以试试这个。

    Public Class Form2
    
      Dim selectedTextForCombo As String = ""
    
      Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.ComboBox1.Text = ""
        Me.ComboBox1.Items.Add("a")
        Me.ComboBox1.Items.Add("aaa")
        Me.ComboBox1.Items.Add("combo")
        Me.ComboBox1.Items.Add("combobox")
        Me.ComboBox1.Items.Add("combobox test")
        Me.ComboBox1.Items.Add("common")
        Me.ComboBox1.Items.Add("common dialog")
      End Sub
    
      Private Sub ComboBox1_LostFocus(sender As Object, e As System.EventArgs) Handles ComboBox1.LostFocus
        ComboBox1.SelectedItem = selectedTextForCombo
        'This is just for a visualization of your issue
        'Label1.Text = selectedTextForCombo
      End Sub
    
      Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        selectedTextForCombo = ComboBox1.Text
        'This is just for a visualization of your issue
        'Label1.Text = selectedTextForCombo
      End Sub
    
    End Class
    

    警告:

    • 此示例适用于 tab 操作。
    • 如果用户写了一些不存在的东西,比如“commun” 选择的值最终将成为视觉选择的值,在这个 案例:“普通”

    【讨论】:

    • 感谢磨坊 Koken,这行得通!我没有意识到它适用于 DropDown 作为 DropDown 样式,但无论如何我需要它是我的某些 ComboBoxes 的 DropDownList,因为我需要用户从定义的列表中进行选择。
    • @jbmb2000 很高兴它对你有用。你知道,如果用户可以写来搜索选项,我不建议使用“DropDownList”。我建议您在选项列表不是很大时使用该选项,以便用户可以轻松选择一个选项而不是搜索一个。
    • 有什么特别的原因吗?我以前使用过 VBA 并且对 vb.net 来说只是相对较新,所以在理解它以及它与 VBA 之间的差异方面仍然非常基础。
    • 一点也不重,只是因为我的用户体验。
    • 很公平,我会密切关注它,看看是否有任何投诉。我不太喜欢手动输入,因为我的很多组合框都需要选择列出的条目之一 - 很多东西会根据选择从 SQL 数据库中提取数据。
    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 2011-02-26
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多