我正在尝试取消选择(空白)我的windows窗体应用程序中的一些组合框。在我的应用程序中,我有一个Reset方法,它将每个组合的SelectedIndex设置为-1。我所有的组合框都是数据绑定的,也就是说,每个组合框都是使用数据源填充的。
我注意到,有时我的Reset方法会起作用,即取消选择当前选中的项目并清空组合框。但是,其他时候,它会在我尝试将其设置为-1之后直接选择第一项(SelectedIndex = 0)。从用户的角度来看,这看起来像是一个bug,因为它并不总是“清除”表单。
根据MSDN的说法:
要取消选择当前选定的项目,请将SelectedIndex设置为-1。如果ComboBox项目是数据绑定项目,则不能将该项目的SelectedIndex设置为-1。
有没有人知道这附近有什么工作?
非常感谢
发布于 2014-12-01 19:22:38
使用void和property的组合
comboBox.ResetText();
//to reset selected value
comboBox.SelectedIndex = -1;
发布于 2017-08-31 04:47:05
不知道是否还有人对此感兴趣,因为现在已经过去5年了,但我找到了一个非常简单的解决方法。完全不直观(我只是通过查看参考源代码才发现的),但实现起来很简单:
ComboBox1.FormattingEnabled = True;
是的,这就是所有的事情!
如果你很好奇,你可以仔细阅读source code,看看是怎么回事。@CuppM指出的bug的根本原因似乎是试图在数据源中设置位置:
if (!FormattingEnabled || SelectedIndex != -1) {
this.DataManager.Position = this.SelectedIndex;
}
我猜它应该是'&&‘而不是条件中的'||’,因为不管FormattingEnabled属性如何,代码可能不应该将位置设置为无效值。
在任何情况下,它都允许一个简单的变通方法。而且,由于'Format‘属性为空时的默认行为是no-op,因此您不必更改任何其他内容。它就是这样的。:-)
(我应该指出的是,我只在.NET 4.7中尝试过这一点,所以我不能说它是否适用于以前版本的.NET框架。)
发布于 2012-05-03 07:52:07
您可以尝试将所选值或项设置为null
(VB中为Nothing
)
我不记得抛出异常的行为了。但是,我确实记得我曾经在组合框中插入一个名为-1,(None)的值,在组合框被绑定数据后,通常通过数据绑定事件将其插入。我建议获取列表中的数据并将新值插入到此列表中。现在将组合绑定到列表。
https://stackoverflow.com/questions/10427172
复制相似问题