Каковы правила при настройке DisplayMember ComboBox в программе WinForm - PullRequest
0 голосов
/ 15 января 2019

Я изучаю WinForm, и в недавней практике я хотел реализовать такую ​​функцию: ComboBox с некоторыми другими элементами управления в форме. И DisplayMember ComboBox является «именем» каждого элемента управления, а ValueMember является их «дескриптором». Как это. Application Picture

Однако, это не сработало так хорошо, и когда я отлаживал, я обнаружил после привязки DataSource, DisplayMember показывает пустую строку. Debug

Кроме того, параметр ValueMember показывает ошибку, если я установил «Ручка».

Существуют ли правила при использовании этих двух свойств?

Код следующий.

cmbAllControls.DataSource = allControlsList;//DataSource, List<Control>.
cmbAllControls.DisplayMember = "Name";
cmbAllControls.ValueMember = "TabIndex";//TabIndex is OK, but Handle will throw error.

1 Ответ

0 голосов
/ 15 января 2019

Похоже, связано с Browseable (атрибут false) на Handle . Когда я пытаюсь выполнить приведенный ниже код, он прекрасно работает, если я удаляю атрибут, но выдает ошибку с ArgumentException «Невозможно привязать новый элемент значения».

public Form1()
{
    InitializeComponent();

    comboBox1.DataSource = new List<MyObj>()
    {
        new MyObj(){Name = "Fish",MyInt = 3,MyIntPtr = new IntPtr(5),MyIntPtr2 = new IntPtr(7)}
    };

    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "MyIntPtr";
    comboBox1.ValueMember = "MyIntPtr2";
    comboBox1.SelectedIndexChanged += (s, e) => { MessageBox.Show("Selected:" + comboBox1.SelectedValue); };
}

private class MyObj
{
    public string Name { get; set; }
    public int MyInt { get; set; }
    public IntPtr MyIntPtr { get; set; }

    [System.ComponentModel.Browsable(false)] //This attribute causes the error
    public IntPtr MyIntPtr2 { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...