【问题标题】:Why is the value of combobox.Text lagging behind when it's actually changed?为什么 combobox.Text 的值在实际更改时会滞后?
【发布时间】:2012-06-15 15:48:08
【问题描述】:

真的很奇怪的问题,也许有人可以解释一下。我有一个带有组合框的 Windows 窗体。当您进行选择时,它应该更新另一个控件,所以我有

Private Sub LoadAssociatedLocations() Handles combobox_categories.SelectionChangeCommitted

        Dim test As String = combobox_categories.Text

我已经在其他 winforms 项目中毫无问题地做到了这一点,但由于某种原因,在这种情况下,当组合框发生更改时,combobox.Text 具有先前选择的值。 SelectedIndex 值是连接索引,但 Tex 始终是先前选择的索引的文本。我当然可以只使用选定的索引,但我想知道是什么导致了这种奇怪的行为。

【问题讨论】:

  • 是否涉及数据绑定?此外,您的子程序中缺少参数。
  • 可能答案在于缺少的代码.. 'Does stuff with combobox.text'
  • @LarsTech 是的,有数据绑定到数据视图。尽管我以前以这种方式使用过组合框,但没有问题。至于参数,我通常不会将它们包含在只有 Handles 中,并且我不需要来自参数的任何数据。
  • @Steve 缺少的代码并不重要。查看代码开头的combobox.Text的调试器显示了我正在谈论的问题

标签: vb.net winforms


【解决方案1】:

尝试改用SelectedItem 属性。

Private Sub LoadAssociatedLocations(ByVal sender As Object, _
                                    ByVal e As EventArgs) _
                            Handles combobox_categories.SelectionChangeCommitted
   TextBox1.Text = combobox_categories.SelectedItem.ToString
End Sub

另外,设置DropDownStyle = DropDownList 将使comboBox1.Text 正确更新。

【讨论】:

  • 不起作用,我只是得到一个 System.Data.DataRow.etc~ 字符串。我必须使用 DirectCast(combobox_categories.SelectedValue, DataRowView)(0).ToString() 来获取我想要的字符串。我仍然想知道为什么在这种形式中做完全相同的事情不起作用,而在其他形式中却起作用
  • @cost 显然,您没有发布 what 在您的 ComboBox 中,所以是的,您必须将其转换。如果要使用Text 属性,则必须使用SelectedIndex 事件或更改comboBox1.DropDownStyle = DropDownList
  • DropDownStyle = DropDownList,这就是使一种形式有效而此无效的区别。非常感谢你!我喜欢了解这些小事
  • 您将如何在 WPF 中处理这个问题?没有 DropDownStyle,我也没有看到对应的。
  • @cost 我对 WPF 不够熟悉,不知道等价物。 WPF 是另一种野兽。
【解决方案2】:

显然(至少根据您的示例)您有两个组合框。一个叫combobox,一个叫combobox_categories。你是不是用错了?

【讨论】:

  • 不,这只是放在这里时的一个错字。当我把它放在 SO 上时,我试图简化代码
猜你喜欢
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多