在显示组合框之前更改组合框的选定值
问题很奇怪,我有一个组合框,它通过数据源属性正确填充项目(它绑定到一个bindingSource项目,其中包含一个displaymember和一个valuemember),这是一个简单组合框允许我通过在他们的名字而不是他们的ID之间进行选择来选择供应商。 问题是,当我更改SelectedValue,因为我想要一个选项设置为默认值时,我发现List属性是空的(我在另一个中继承了组合框类),但是当显示组合框时,它,所以也许这个问题与WHEN数据是从数据源真正加载(也许只有在显示它后才加载?)有关。我什么时候应该改变我的SelectedValue所以没有任何“表示”事件在控制在显示组合框之前更改组合框的选定值
感谢您的任何建议
更新1: 我在您的方式进行测试,但它不是这样的话(关键是很长,但即使我投它它不工作),实际上有趣的是,我有一个setter,允许我设置SelectedValue,即使不抛出异常,在下一个MessageBox Items.Count给我0作为值,这是非常奇怪的,因为当组合框显示在窗体上时,它具有我想要的所有值。这里是我的二传手的代码:
public object InputValue
{
get
{
return SelectedValue;
}
set
{
SelectedValue = ((long)value);
MessageBox.Show(this.Items.Count.ToString());
}
}
我解决了这个问题,实际上我认为Items集合是在第一个无效组合框的“周围”填充的,因此我只是将第一个无效之前提交的值作为SelectedValue存储在临时变量中,然后我只是将其设置在Invalidated事件下。
我甚至不想知道它为什么可行 - 但它确实如此。 – skolima 2012-10-25 17:14:44
你不是唯一遇到过这个问题的人,很高兴听到它不只是我。没有发生的事情与类型转换有关 - 如果您在数据源中明确地将SelectedValue
转换为确切类型,则会发现可以成功设置该值。
例如:
comboBox1.ValueMember = "Value";
comboBox1.DisplayMember = "Key";
object ds = new KeyValuePair<string, long>[] {
new KeyValuePair<string,long>("a",0),
new KeyValuePair<string,long>("b",1),
new KeyValuePair<string,long>("c",2),
new KeyValuePair<string,long>("d",3),
new KeyValuePair<string,long>("e",4)
};
comboBox1.DataSource = ds;
comboBox1.SelectedValue = 3; // this won't work
comboBox1.SelectedValue = (long)3; // this will work
无论出于何种原因,尽管“3”作为一个长期等于“3”为int的ComboBox
拒绝,除非你得到的类型正确地修正打球。
我可以理论认为,这与WinForms ComboBox
是COM版本的包装有关,并且在创建本地控件后会显示不同的行为。
我希望这有助于您的特定问题!
问题不在于,看我的问题更新,我解释得更好;顺便说一下,我注意到你也在说的问题,实际上我必须将它投入使用 – 2010-11-02 13:53:48
请参阅我对金王的评论回答:http://stackoverflow.com/questions/18343855/argh-how-do-you-correctly-update-the-selectedvalue-of-a-combobox-on-initializat – RLH 2013-08-20 20:54:57