有時候我們需要根據combobox(listbox同樣)的選擇項的值進行處理,但是在Delphi中的Combobox的item是一個TStrings類型的對象,我們無法象c#或Java中那樣從combobox的選項類中繼承,創建一個我們需要的類來完成任務。但是仔細研究Delphi的combobox對象發現了以下的解決方法:
新建一個類,存儲我們需要的數據:
TItemEx=class(TObject) caption:string;
public
StringValue:string;
end;
//使用adoquery中的值填充combobox
function FillInComBoBoxWithAdoQuery(objAdoQuery:TAdoQuery;objComBoBox:TComboBox;sql:string;captionFieldName:string;valueFIEldName:string;noAsFirst:boolean):boolean;
//當noAsFirst為true是,combobox的第一項是'無'
var
objItemEx:TItemEx;
begin
objComBoBox.Clear;
objComBoBox.ItemIndex:=-1;
if noAsFirst
then begin
objItemEx:=TItemEx.Create;
objItemEx.caption:='無';
objItemEx.StringValue:='';
objComBoBox.Items.AddObject(objItemEx.caption,objItemEx);
objComBoBox.ItemIndex:=0;
end;
objAdoQuery.Close;
objAdoQuery.SQL.Clear;
objAdoQuery.SQL.Add(sql);
objAdoQuery.Open;
objAdoQuery.First;
while not objAdoQuery.Eof do
begin
objItemEx:=TItemEx.Create;
objItemEx.caption:=objAdoQuery.FieldByName(captionFIEldName).AsString;
objItemEx.StringValue:=objAdoQuery.FieldByName(valueFIEldName).AsString;
objComBoBox.Items.AddObject(objItemEx.caption,objItemEx);
objAdoQuery.Next;
end;
objAdoQuery.close;
result:=true;
end;
//取得comboobx中被選定向的制
function GetComBoBoxSelectedStringValue(objComBoBox:TComboBox):string;
var
objItemEx:TItemEx;
begin
if (objComBoBox.ItemIndex>-1 )
then begin
objItemEx:=(objComBoBox.Items.Objects[objComBoBox.ItemIndex] as TItemEx);
result:=objItemEx.StringValue;
end
else begin
result:='';
end;
end;
listbox的解決方法與此類似。