стандартный вариант - делать выбор из грида, привязанного к таблице, из которой грузятся данные в комбо, в каком-то модальном окне. соответственно id-ник берётся из самой таблицы без всяких танцев с бубном.
второй вариант, характерный для комбобоксов и прочих. у всех потомков TStrings кроме свойства Items есть полезное свойство Values. если сказать комбобоксу ComboBox1.Items.Add ('RecNo=100');, то:
1. ComboBox1.Items.Names [0] = 'RecNo';
2. ComboBox1.Items.Values ['RecNo'] = '100';
3. ComboBox1.Items.ValueFromIndex [0] = '100';
и т.д.
поэтому иногда в комбобоксах, листбоксах и прочих щастливых обладателях свойства Items: TStrings имеет смысл использовать добавлять значения в виде ('Name=Value'), а потом просто пеорехватывать отрисовку (для комбобокса - свойство Style ставим в csOwnerDrawFixed, а в обработчике OnDrawItem пишем свой код, выводящий на экран только значения Items.Names. но у этого подхода есть существенный недостаток: если в Names содержится знак равно, строка будет распарсена неправильно.
и третий вариант.
Но в ComboBox id не засунешь
- это не так. в TStrings можно запихивать не только строки, но и объекты (см. свойство TStrings.Objects). и это очень часто и очень широко используется, потому что указатель на объект - это longint, 8-разрядное целое, в которое можно запихать практически любой идентификатор либо ссылку на оный. и делаеться это очень просто:
- Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i := 1 to 10 do
ComboBox1.Items.AddObject(IntToStr (i), TObject (i));
end;
procedure TForm1.ComboBox1CloseUp(Sender: TObject);
begin
ShowMessage (IntToStr (integer (ComboBox1.Items.Objects [ComboBox1.ItemIndex])));
end;
при создании формы мы якобы добавляем объект, а на деле присваиваем указателю нужное нам значение, а потом - просто вытаскиваем его оттуда.