1

DisplayMemberと ValueMember は、DataSource プロパティを使用して ComboBox をデータバインドする場合にのみ使用することになっていることを常に理解しています。

しかし、私が維持している一部のコードでは、ComboBox のプロパティを使用すると、データバインディングなしで機能することに気付きましDisplayMemberた。プロパティを設定すると、コンボボックスに表示される内容が決まります。ただし、設定は機能していないようです(設定されていません)。ValueMemberSelectedValue

私の質問は、この動作を使用しても安全ですか? または、.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