Обновление ListBox'a
От: Wile  
Дата: 26.11.02 14:55
Оценка:
Создаю ListBox

наполняю его элементами:

lbMy.Items.Add(new Element());
lbMy.Items.Add(new Element());
lbMy.Items.Add(new Element());

...............

Все здорово — все элементы на форме у меня видны

теперь меняю содержимое одного из элементов:

lbMy.SelectedItem.SomeChange()


Как обновить содержимое ListBox'а на форме (не перерисовать его, а известить об изменении данных им отображаемых) ???
Re: Обновление ListBox'a
От: Alex Zasypkin США  
Дата: 26.11.02 15:52
Оценка:
Здравствуйте, 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() Вам не подойдут? Их, кстати, при "массированном" заполнении (если указанный кусок наполнения близок к реальному) тоже неплохо бы использовать — отрисовка протормаживать не будет.
Re[2]: Обновление ListBox'a
От: Wile  
Дата: 26.11.02 17:05
Оценка:
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
Re: Обновление ListBox'a
От: Newbie  
Дата: 26.11.02 18:46
Оценка:
Здравствуйте, Wile, Вы писали:

W>
W>lbMy.SelectedItem.SomeChange()

lbMy.Items[lbMy.SelectedIndex] = (CElement)lbMy.SelectedItem;

W>


MCP.NET
Re[2]: Обновление ListBox'a
От: Wile  
Дата: 26.11.02 18:59
Оценка:
Здравствуйте, Newbie, Вы писали:

N>Здравствуйте, Wile, Вы писали:


W>>
W>>lbMy.SelectedItem.SomeChange()

N>lbMy.Items[lbMy.SelectedIndex] = (CElement)lbMy.SelectedItem;

W>>


N>


Здорово, заработало!!!

Но не могли бы Вы пояснить, где логика в такой конструкции!?
И какими принципами Вы руководствовались, когда ее выдумывали?
Re[3]: Обновление ListBox'a
От: Newbie  
Дата: 26.11.02 19:51
Оценка:
Здравствуйте, Wile, Вы писали:

W>Но не могли бы Вы пояснить, где логика в такой конструкции!?

W>И какими принципами Вы руководствовались, когда ее выдумывали?

imho, listbox вычисляет визуальное представление (ToString()) только в момент присвоения объекта и кэширует эту строку (все равно внутри живет win32 listbox item: у него есть строка и (возможно) userdata/userobject, они независимы). Мой пример просто переприсваивает объект -> update визуальное представление -> вызывается ToString.
MCP.NET
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.