自动完成时的奇怪组合框行为

Jiale Xue - MSFT 41,271 信誉分 Microsoft 供应商
2024-04-10T06:27:39.23+00:00

你好

我有一个 Windows 窗体应用程序,它在主屏幕上有 2 个组合框。

它们绑定到单独的数据表,这些数据表在应用程序加载时通过 tableadapter (SQL) 填充。绑定是在加载用户控件时定义的 - 下面第一个组合的示例:

With CboFirm

   BindingSourceFirms.DataSource = FirmsDT

   .DataSource = BindingSourceFirms
   .DisplayMember = "Company Name"
   .ValueMember = "Company Code"

 End With

就数据表填充过程而言,填充方法在 BackgroundWorker 中运行,然后在 BackgroundWorker Completed 事件中运行 BindingSourceFirms.ResetBindings(False)。

数据加载方面工作正常。

这两个组合的 AutoCompleteMode 都设置为 SuggestAppend,AutoCompleteSource 设置为 ListItems。

我遇到的问题是,当应用程序加载时,用户单击第一个组合框并开始键入,自动完成功能无法立即工作。用户必须单击组合框中的箭头才能展开列表,此时所有项目都会显示出来,自动完成开始工作。

第二个组合框根据第一个组合中选择的项目进行预筛选,自动完成按预期工作。

更奇怪的是,当我在 VS 中运行它时,在调试模式下一切正常,但当应用程序在 Windows 上运行时却不行。

Note:此问题总结整理于: Odd combobox behaviour with Autocomplete

Windows 窗体
Windows 窗体
一组用于开发图形用户界面的 .NET Framework 托管库。
142 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 46,961 信誉分 Microsoft 供应商
    2024-04-10T10:02:00.1533333+00:00

    数据表填充过程而言,填充方法在 BackgroundWorker 中运行,然后我在 BackgroundWorker Completed 事件中运行 BindingSourceFirms.ResetBindings(False)。 此问题可能是由于在辅助线程中填充 DataTable 引起的。由于它会影响作为控件的 ComboBox,因此无法从辅助线程访问它。因此,您需要在 DoWork 事件处理程序中填充未绑定的 DataTable,然后将数据绑定到 RunWorkerCompleted 事件处理程序,该事件处理程序在 UI 线程上执行。 这是我的测试代码:

    Friend Class SurroundingClass  
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)  
            backgroundWorker1.RunWorkerAsync()  
            comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend  
            comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems  
        End Sub  
      
        Private Sub backgroundWorker1_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)  
            Me.table1TableAdapter.Fill(Me.dataSet1.Table1)  
        End Sub  
      
        Private Sub backgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)  
            comboBox1.DataSource = dataSet1.Table1  
            comboBox1.DisplayMember = "ID"  
            comboBox1.ValueMember = "ID"  
        End Sub  
    End Class  
    

    测试结果: >>当我在 VS 中运行它时,但在 Windows 上运行应用程序时没有。 您如何提供更多信息来重现情况,您遇到了什么错误? 诚挚的问候, Daniel Zhang60052-125.gif


    如果回复有帮助,请点击“接受答案”并点赞。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助