Таким образом, у меня есть точки, которые я добавляю к ListBox (x;y)
, и по какой-то причине функция, которую я использую вместо удаления элемента, который я заменяю, «сохраняет его» (без отображения при использовании точек останова и просмотра структур lb.items / local элементы) и в следующий раз, когда я добавляю или заменяю значение, значение которого равно x
, равному элементу, который застрял в части, я проверяю, добавлено ли это значение или если вы добавляете другое значение, элемент, который должен был быть заменен показывает вверх.
int index = _lbMaskPoints.SelectedIndex;
string sel = _lbMaskPoints.SelectedItem.ToString();
string[] values = sel.Split(new string[] { DELIMITER }, StringSplitOptions.RemoveEmptyEntries);
double currentF = Convert.ToDouble(values[0], CultureInfo.InvariantCulture);
double fVal= Convert.ToDouble(_tbPointFreq.Text.Trim().Replace(',', '.'), CultureInfo.InvariantCulture);
double newValue = Convert.ToDouble(_tbPointLevel.Text.Trim().Replace(',', '.'), CultureInfo.InvariantCulture);
// Console.WriteLine("newValue : " + newValue);
if (currentF != fVal)
{
// freq changed
// check if frequency already exists in dictionary
if (_maskPoints.ContainsKey(fVal))
{
fVal = double.NaN;
}
if (double.IsNaN(fVal))
{
// do nothing
return;
}
// remove old value from dictionary
_maskPoints.Remove(currentF);
// add new
_maskPoints.Add(fVal, newValue);
// rearrange list so new value would be in right spot
List<double> fList = new List<double>(_maskPoints.Keys);
fList.Sort();
_lbMaskPoints.Items.RemoveAt(index);
int newIndex = fList.IndexOf(fVal);
if (newIndex > _lbMaskPoints.Items.Count)
{
_lbMaskPoints.Items.Add(maskPointItem(fVal, newValue));
}
else
{
_lbMaskPoints.Items.Insert(newIndex, maskPointItem(fVal, newValue));
}
_lbMaskPoints.SelectedItems.Clear();
_lbMaskPoints.SelectedIndex = newIndex;
}