1

我一直明白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());
    }
}
4

0 回答 0