自定义组合框的数据绑定问题

时间:2012-03-09 15:03:27

标签: c# winforms

我创建了一个自定义只读组合框,大部分都可以使用。但是,当我从外部源下载数据并设置数据绑定时,会出现一些非常奇怪的行为。请看下面的代码:

cboGender.DataSource = Animal.SpecificGenders;
cboGender.DataBindings.Clear();
cboGender.DataBindings.Add("text", animal, "Gender");

((ReadOnlyComboBox)cboGender).Readonly = true;

当上面一行命中时,它会调用此属性:

public bool Readonly 
    { 
        get
        {
            return readOnly;
        }

        set
        {
            textBox.Text = this.Text;
            ShowControl();
            readOnly = value;
        }
    }

现在,我的问题是,当我将ReadOnly设置为false时,这样可以正常工作。上面的setter中的'this.Text'显示了绑定到它的值。但是当我将Reaonly设置为true时,'this.Text'显示一个空字符串。这是我唯一的区别。 this.Text指的是标准的Combobox Text属性。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

基础ComboBox有一个DropDownStyle属性,可以设置为DropDownList,它实际上使ComboBox只读。也许你可以这样做,而不是实现自己的ReadOnly属性。

如果没有,我怀疑你的问题存在于ShowControl()方法中。即使您首先设置textBox.Text属性,ShowControl()方法中的某些内容也会阻止控件更新。实际上,从这个属性中设置另一个属性对我来说似乎不太合适。

您已经在使用DataBinding,因此设置Text属性应该已经在别处处理了。