C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Динамическое связывание..., Как сделать?
Newbie
Отправлено: 01.04.2004, 17:44


Не зарегистрирован







Всем доброго времени суток!!!
Интересует такая вещь. У меня на форме есть ListBox. Так же есть указатель на TStrings:
CODE

TStrings *MyList = new TStringList();


Можно ли сделать так, чтобы я работал с MyList (добавлял, удалял, редактировал строки), а в ListBox-е сразу же отображались все изменения сделанные в MyList ??? Я так подозреваю что нужно подвязать ListBox1->Items к MyList, т.е. нужно сделать так чтобы ListBox1->Items указывал на MyList. А как тогда сразу же обновлять ListBox1? Метод какой-то есть? а?

Поделитесь кодом люди добрые, а то я еще пока в синтаксисе не силен.
Заранее благодарен.
Asher
Отправлено: 01.04.2004, 18:07


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Поступи проще biggrin.gif
вместо MyList пользуйся TListBox->Items
Newbie
Отправлено: 01.04.2004, 18:12


Не зарегистрирован







Если бы можно было проще я бы не спрашивал smile.gif
Дык задача требует этого. Так все-таки можно ли такое организовать? и как?
Gedeon
Отправлено: 02.04.2004, 10:14


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Newbie @ 01/04/2004, 19:14)
Если бы можно было проще я бы не спрашивал smile.gif
Дык задача требует этого. Так все-таки можно ли такое организовать? и как?

Простите, но я все таки не понимаю что это за задача то такая? Зачем работать с MyList и тут же в listbox отображать все изменения в нем. Если уж очень хочется иметь копию listbox то проще изменения делать в нем а потом присваивать его строки MyList. wink.gif
Daan
Отправлено: 02.04.2004, 13:25


Дежурный стрелочник

Группа: Участник
Сообщений: 62



Ну надо человеку так ну что можно поделать, кроме как ответить!!!
У те есть
TStrings *MyList;
А так же
TListBox *l;
ну вот и делаешь в

CODE

__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
MyList  = l->Items;
}



И изменяя в MyMail ты тем самым изменяешь моментально изменяешь в l.
(если не считать что MyString->Itens и l это одно и тоже!!!!)

Или же имея q = new TStringList();
делаеш l->Items->Assign(q) после каждого изменения
Asher
Отправлено: 02.04.2004, 13:40


Мастер участка

Группа: Модератор
Сообщений: 550



Так то он так...
Но когда он грохнет форму с ListBox'ом как он это выше писал, то все. Финиш.
Если форма одна, то можно вместо Tstring сделать ListBox, а потом через ListBox->Parent располагать его на форме в нужном месте.
Если в Owner'ах у него будет Application, то жить будет сам по себе.
Визуальность конечно идет лесом, и нарушается принцип раздельного хранения и представления данных.
Самое красивое в модели VCL решение, ИМХО biggrin.gif , сделать наследника от TListBox и ему инициализационным параметром подсовывать наш TString. Нехай им пользуется, а не своего заводит.
Хотя надо смотреть как там конкретно реализованно.

А проще всего тебе Daan написал: делаешь l->Items->Assign(q) после каждого изменения biggrin.gif
Неэффективно, зато надежно.

Вернуться в Вопросы программирования в C++Builder