Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ну не могу совладать с Combobox / 5 сообщений из 5, страница 1 из 1
01.09.2003, 20:00
    #32253137
Dmitry_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну не могу совладать с Combobox
Не могу понять, уже голову сломал:
надо сделать combobox, вывести в него значения, причем нужно сделать виртуальную таблицу с двумя столбцами, а отображать только один

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
TMyClass=Class(TObject)
     id:integer;
     str:string;
end;


...
//заполнение combobox
   myClass_var:=TMyClass.Create;
   myClass_var.id:= 1 ;
   myClass_var.str:='пример1';
   myCombo.Items.AddObject(myClass_var.str.myClass_var);
   myClass_var.free;
   myClass_var:=TMyClass.Create;
   myClass_var.id:= 2 ;
   myClass_var.str:='пример2';
   myCombo.Items.AddObject(myClass_var.str.myClass_var);
   myclass_var.free;
...
//хочу установить значение: в цикле прохожу по всем значениям и ищу совпадение
   intA:= 1 ; //искомое значение id

   for A:= 0  to myCombo.items.count- 1  do
         begin
              if TMyClass(myCombo.items.objects[A]).ID=intA    //< ------ 
 
                    begin
                       myCombo.itemindex:=intA; 
                       break;
                    end;
         end;
...



в строке указанной стрелкой значение ID=12 (!!!!), а при обращении к .STR - ACCESS Violation

почему,а?
...
Рейтинг: 0 / 0
01.09.2003, 23:22
    #32253188
Дмитрий Мыльников
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну не могу совладать с Combobox
А зачем ты своим экземплярам класса вызываешь Free?! Они ведь при этом уничтожаются и указатели, которые ты в ComboBox передал начинат указывать на неопределённую область памяти. Отсюда и Access Violation. И строчка твоя со стрелкой берёт данные из области памяти, которая к тому времени уже под другие данные распределена.

Удалять объекты нужно в тот момент, когда будешь отчищать список ComboBox, вызывая ему метод ComboBox.Items.Clear
В документации, кстати, говорится, что он сам якобы их будет удалять, вызывая им Free. Но у меня этого не наблюдается и приходится самому ручками всё делать.
...
Рейтинг: 0 / 0
02.09.2003, 09:43
    #32253287
Dmitry_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну не могу совладать с Combobox
Спасибо, все работает.
...
Рейтинг: 0 / 0
04.09.2003, 08:50
    #32255388
LAlex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну не могу совладать с Combobox
а зачем все так сложно?

myCombo.Items.AddObject('пример1',TObject(1));
myCombo.Items.AddObject('пример2',TObject(2));

и т.д.

никаких классов, никакой динамической памяти...
...
Рейтинг: 0 / 0
04.09.2003, 09:25
    #32255415
Дмитрий Мыльников
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну не могу совладать с Combobox
Ну это частный случай. А если там не только целое число, а ещё куча полей?

Кстати, в приведённом примере с преобразованием целого числа в TObject нужно не забыть при считывании сделать обратную оперцию

integer(myCombo.items.objects[A])
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ну не могу совладать с Combobox / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]