Я заполнил объект TStringList, как показано ниже:
var
infoObject: TStringObject;
dataObject: TStringList
_query.First;
for i := 0 to _query.RecordCount-1 do
begin
infoObject := TStringObject.Create;
infoObject.stringsData.Add(_query.Fields[0].AsString);
dataObject.AddObject(_query.Fields[1].AsString, infoObject);
_query.Next;
end;
а затем используйте его для заполнения comboBox следующим образом:
combo1.Items.Clear;
combo1.Items.AddStrings(dataObject);
Теперь я хочу установить элемент comboBox itemIndex с равным строковым значением из БД. Я знаю, что в обычном сценарии, когда у меня есть текст, который отображается в поле со списком, использование IndexOf поможет мне так:
combo1.ItemIndex := combo1.Items.IndexOf('[text of item]');
но я хочу установить его со значением, существующим в объекте, а не в тексте. Я вижу метод IndexOfObject, но он не может работать как IndexOf или я не знаю, как его использовать. Я пишу эти строки, но они не работают:
itemObject := TStringObject.Create;
itemObject.stringsData.Add('[value of item]');
combo1.ItemIndex := combo1.Items.IndexOfObject(itemObject);
Кто-нибудь может помочь? Следует упомянуть, что я использую Delphi 2007 и Raize Componenet ComboBox.
itemObject
(созданный в вашем последнем блоке кода) не будет существовать в Objects. Первый (созданный в цикле в вашем первом блоке кода) будет иметь другой адрес памяти, и поэтомуIndexOfObject
вернет -1. Похоже, вы пытаетесь найти тот, который соответствует определенному текстовому значению, но я не уверен, так ли это. - person Ken White   schedule 23.07.2015