我一直明白DisplayMember和 ValueMember 只应该在使用其 DataSource 属性对 ComboBox 进行数据绑定时使用。
但是在我维护的一些代码中,我注意到使用 ComboBoxDisplayMember
属性确实可以在没有数据绑定的情况下工作。设置属性确定组合框中显示的内容。设置ValueMember
似乎不起作用(它没有设置SelectedValue
)。
我的问题是:使用这种行为是否安全?或者在即将发布的 .NET 版本中是否存在这种行为可能发生变化的风险?
我知道您通常会覆盖该ToString
方法。在实际代码中,MyType 类并不像我的示例中那样简单。我不确定重写它的ToString
方法是否安全。
显示此行为的小样本。
using System;
using System.Windows.Forms;
internal class Program {
public class MyType {
public string MyText { get; set; }
public string MyValue { get; set; }
}
public class MyForm : Form {
private readonly ComboBox _myComboBox;
public MyForm() {
_myComboBox = new ComboBox {DisplayMember = "MyText", ValueMember = "MyValue"};
_myComboBox.Items.Add(new MyType {MyText = "First item", MyValue = "1"});
_myComboBox.Items.Add(new MyType {MyText = "Second item", MyValue = "2"});
_myComboBox.SelectedIndexChanged += _myComboBox_SelectedIndexChanged;
Controls.Add(_myComboBox);
}
private void _myComboBox_SelectedIndexChanged(object sender, EventArgs e) {
var cb = (ComboBox) sender;
System.Diagnostics.Debug.WriteLine(
"Index: {0}, SelectedValue: {1}", cb.SelectedIndex, cb.SelectedValue);
}
}
private static void Main() {
Application.Run(new MyForm());
}
}