powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ну не могу совладать с Combobox
5 сообщений из 5, страница 1 из 1
Ну не могу совладать с Combobox
    #32253137
Dmitry_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу понять, уже голову сломал:
надо сделать 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
Ну не могу совладать с Combobox
    #32253188
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем ты своим экземплярам класса вызываешь Free?! Они ведь при этом уничтожаются и указатели, которые ты в ComboBox передал начинат указывать на неопределённую область памяти. Отсюда и Access Violation. И строчка твоя со стрелкой берёт данные из области памяти, которая к тому времени уже под другие данные распределена.

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

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

и т.д.

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

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

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


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