Есть два ListBox
.Двойной щелчок по элементу lbSubject
добавляет этот элемент ко второму lbSelectedSubject
.При условии, что этого элемента еще нет в lbSelectedSubject
.Проверка на наличие элементов проходит через List<int>
, к которому добавляется ValueMember
.
List<int> selectedValueSubject;
private void Form_Load(object sender, EventArgs e)
{
selectedValueSubject = new List<int>();
lbSelectedSubject.DisplayMember = "Title";
lbSelectedSubject.ValueMember = "Id";
lbSubject.DataSource = bindingSubjectDefault;
lbSubject.DisplayMember = "Title";
lbSubject.ValueMember = "Id";
}
private void LbSubject_MouseDoubleClick(object sender, MouseEventArgs e)
{
int index = lbSubject.IndexFromPoint(e.Location);
if (index != ListBox.NoMatches)
{
int id = (int)lbSubject.SelectedValue;
if (IsNotConstrain(id, selectedValueSubject.ToArray()))
{
selectedValueSubject.Add(id);
lbSelectedSubject.Items.Add(lbSubject.Items[index]);
}
}
}
private void LbSelectedSubject_MouseDoubleClick(object sender, MouseEventArgs e)
{
int index = lbSelectedSubject.IndexFromPoint(e.Location);
if (index != ListBox.NoMatches)
{
selectedValueSubject.Remove((int)lbSelectedSubject.SelectedValue);
lbSelectedSubject.Items.RemoveAt(index);
}
}
private bool IsNotConstrain(int id, int[] keys)
{
bool result = true;
foreach(int key in keys)
{
if (key == id)
{
result = false;
break;
}
}
return result;
}
Добавление является правильным.В том смысле, что человек создает и отображает Title
.Проблема в обратном процессе.Удалить из lbSelectedSubject
.Строка в LbSelectedSubject_MouseDoubleClick
вызывает исключение:
lbSelectedSubject.SelectedValue
System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."System.Windows.Forms.ListControl.SelectedValue.get вернул null.
Этот lbSelectedSubject.Items
содержит правильный элемент и настройки для Display
и Value
.SelectedItem
также обычно, не ноль.
Этот же элемент в списке lbSubject
содержит правильное значение Value
, а не null
.
Почему после добавления в lbSelectedSubject
через строку
lbSelectedSubject.Items.Add(lbSubject.Items[index]);
Получается, что SelectedValue не работает?При прочих равных условиях lbSubject
.
ОБНОВЛЕНИЕ Не дублируется.