2

问题很奇怪,我有一个组合框,它通过 DataSource 属性正确填充了项目(它绑定到一个 bindingSource 项目,其中包含一个显示成员和一个值成员),这是一个简单的组合框,它允许我通过在他们的名字而不是他们的身份证。问题是,当我更改 SelectedValue 因为我想将一个选项设置为默认选项时,我发现 List 属性为空(我在另一个中继承了组合框类),但是当显示组合框时,我里面有项目,所以问题可能与何时真正从数据源加载数据有关(也许它仅在显示后才加载?)。我什么时候应该更改我的 SelectedValue?控件中没有任何“显示”事件

感谢您的任何建议

更新 1: 我以您的方式进行了测试,但事实并非如此(密钥很长,但即使我施放它也不起作用),事实上有趣的是我有一个允许我设置 SelectedValue 的设置器,甚至如果不抛出异常,则在下一个 MessageBox 中 Items.Count 给我 0 作为值,这很奇怪,因为当组合框显示在表单上时,它具有我想要的所有值。这是我的二传手的代码:

    public object InputValue
    {
        get
        {
            return SelectedValue;
        }
        set
        { 
            SelectedValue = ((long)value);
            MessageBox.Show(this.Items.Count.ToString());
        }
    }
4

3 回答 3

1

你不是唯一遇到这个问题的人,很高兴听到不仅仅是我。没有发生的事情与类型转换有关 - 如果您明确地将您的类型转换为数据源中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

无论出于何种原因,即使作为 long 的 '3' 等于作为 int 的 '3',ComboBox除非你得到完全正确的类型,否则拒绝打球。

我可以推测这与 WinFormsComboBox是 COM 版本的包装器这一事实有关,并且在创建本机控件后会表现出不同的行为。

我希望这对您的特定问题有所帮助!

于 2010-11-02T06:17:16.020 回答
1

我解决了这个问题,事实上,因为我认为 Items 集合是“围绕”组合框的第一次失效填充的,所以我只是将在第一次失效之前提交的值作为 SelectedValue 存储在一个临时变量中,然后我只是将它设置在无效的事件。

于 2010-11-28T16:05:20.627 回答
0

我有这个问题,我将 BindingSource.Current 属性与绑定源的 CurrentChanged() 事件一起使用,它可以正常工作

于 2018-08-24T08:27:16.543 回答