我创建了一个自定义只读组合框,大部分都可以使用。但是,当我从外部源下载数据并设置数据绑定时,会出现一些非常奇怪的行为。请看下面的代码:
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属性。
有人有什么想法吗?
答案 0 :(得分:0)
基础ComboBox有一个DropDownStyle属性,可以设置为DropDownList,它实际上使ComboBox只读。也许你可以这样做,而不是实现自己的ReadOnly属性。
如果没有,我怀疑你的问题存在于ShowControl()方法中。即使您首先设置textBox.Text属性,ShowControl()方法中的某些内容也会阻止控件更新。实际上,从这个属性中设置另一个属性对我来说似乎不太合适。
您已经在使用DataBinding,因此设置Text属性应该已经在别处处理了。