另一種解決方案是使用TComboBox而非TDBLookupComboBox。使用TDictionary定義一個簡單的內存查找。
type
TMyForm = class(TForm)
MyComboBox: TComboBox;
MyDataset: TSimpleDataSet;
procedure MyComboBoxChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
ComboLookup: TDictionary<string, Char>;
end;
implementation
{$R *.dfm}
procedure TMyForm.FormCreate(Sender: TObject);
var
Key: string;
begin
ComboLookup := TDictionary<string, Char>.Create;
ComboLookup.Add('Drivers License', 'A');
ComboLookup.Add('Passport', 'B');
ComboLookup.Add('Library Card', 'C');
for Key in ComboLookup.Keys do
begin
MyComboBox.Items.Add(Key);
end;
end;
procedure TMyForm.MyComboBoxChange(Sender: TObject);
begin
// This may be wrong didn't bother to look
//up the correct way to change a field's value in code.
MyDataset.Fields.FieldByName('IDCard').AsString := ComboLookup[MyComboBox.Text];
end;
你可以使用TComboBox.Items.AddObject,而不是一個單獨的查找表,但你必須創建一個包裝類爲char存儲爲TObject的或使用chr將其轉換爲整數,然後將其丟TObject但上述更簡單,在我看來。
這不是我要求的,但它是一個很好的解決方案。我唯一的問題是TDictionary doesn Delphi Win32似乎不可用,我懷疑你是在建議使用.Net類,最後我爲自己創建了一個小型的字典類,這讓我可以使用這個解決方案。並沒有增加我的程序的內存使用量,也沒有要求我向我的安裝程序添加任何東西,這使得這種解決方案更適合我。 – 2010-10-21 16:13:43