Создаю ListBox
наполняю его элементами:
lbMy.Items.Add(new Element());
lbMy.Items.Add(new Element());
lbMy.Items.Add(new Element());
...............
Все здорово — все элементы на форме у меня видны
теперь меняю содержимое одного из элементов:
lbMy.SelectedItem.SomeChange()
Как обновить содержимое ListBox'а на форме (не перерисовать его, а известить об изменении данных им отображаемых) ???
Здравствуйте, Wile, Вы писали:
W>Создаю ListBox, наполняю его элементами:
W>W>lbMy.Items.Add(new Element());
W>lbMy.Items.Add(new Element());
W>lbMy.Items.Add(new Element());
W>
W>...............
W>Все здорово — все элементы на форме у меня видны
W>теперь меняю содержимое одного из элементов:
W>W>lbMy.SelectedItem.SomeChange()
W>
W>Как обновить содержимое ListBox'а на форме (не перерисовать его, а известить об изменении данных им отображаемых) ???
Методы класса ListBox BeginUpdate()/EndUpdate() Вам не подойдут? Их, кстати, при "массированном" заполнении (если указанный кусок наполнения близок к реальному) тоже неплохо бы использовать — отрисовка протормаживать не будет.
AZ>Методы класса ListBox BeginUpdate()/EndUpdate() Вам не подойдут? Их, кстати, при "массированном" заполнении (если указанный кусок наполнения близок к реальному) тоже неплохо бы использовать — отрисовка протормаживать не будет.
Нет не помогает...
Еще раз,
ситуация подробнее:
Class CElement
{
// Экземплярами этого класса я хочу заполнять ЛистБокс MyListBox
public string sFirst;
public string sSecond;
public void CElement(){}
public override string ToString()
{
// Эту строку я увижу в соответствующей этому элементу
// строке листбокса
return sFirst + " - " + sSecond;
}
}
Далее в коде формы:
CElement el = new CElement();
el.sFirst = "Elki";
el.sSecond = "Palki";
// MyListBox - листбокс, который я с успехом расположил на форме...
// и который желаю заполнить экземплярами CElement
MyListBox.Items.Add(el1)
// На этом этапе на форме в листбоксе появляется строка:
// Elki - Palki
// Далее меняю содержимое элемента
el.sFirst = "Vse";
el.sSecond = "Horosho";
// На форме я вижу все теже
// Elki - Palki
Что мне сделать?
// Я хочу что б было
// Vse - Horosho
Здравствуйте, Wile, Вы писали:
W>W>lbMy.SelectedItem.SomeChange()
lbMy.Items[lbMy.SelectedIndex] = (CElement)lbMy.SelectedItem;
W>
Здравствуйте, Newbie, Вы писали:
N>Здравствуйте, Wile, Вы писали:
W>>W>>lbMy.SelectedItem.SomeChange()
N>lbMy.Items[lbMy.SelectedIndex] = (CElement)lbMy.SelectedItem;
W>>
N>
Здорово, заработало!!!
Но не могли бы Вы пояснить, где логика в такой конструкции!?
И какими принципами Вы руководствовались, когда ее выдумывали?
Здравствуйте, Wile, Вы писали:
W>Но не могли бы Вы пояснить, где логика в такой конструкции!?
W>И какими принципами Вы руководствовались, когда ее выдумывали?
imho, listbox вычисляет визуальное представление (ToString()) только в момент присвоения объекта и кэширует эту строку (все равно внутри живет win32 listbox item: у него есть строка и (возможно) userdata/userobject, они независимы). Мой пример просто переприсваивает объект -> update визуальное представление -> вызывается ToString.