gpt4 book ai didi

delphi - 如何在 Delphi 7 中创建具有两列(一列隐藏)的组合框?

转载 作者:行者123 更新时间:2023-12-03 14:50:06 26 4
gpt4 key购买 nike

如何创建一个具有两列的 TComboBox,其中一列隐藏,以便它可以保留 id 值以及其中的实际项目?那么如何以编程方式获取该 id 值?

最佳答案

这里不需要两列。

您可以利用 TComboBox.Items (与 Delphi 中的许多其他内容一样,例如 TStringListTMemo.Lines),和 TListBox.Items)源自 TStrings,它同时具有 StringsObjects 属性。 Objects 存储任何 TObject 大小的内容,TObject 是一个指针。

这意味着您可以存储整数值,只需在添加时将其类型转换为 TObject,并在检索时将其类型转换回 Integer

这样的事情应该有效:

procedure TForm1.FormCreate(Snder: TObject);
var
i: Integer;
sItem: String;
begin
for i := 0 to 9 do
begin
sItem := Format('Item %d', [i]);
ComboBox1.Items.AddObject(sItem, TObject(i));
end;
end;

要检索值:

procedure TForm1.ComboBox1Click(Sender: TObject);
var
Idx: Integer;
Value: Integer;
begin
Idx := ComboBox1.ItemIndex;
if Idx <> -1 then
begin
Value := Integer(ComboBox1.Items.Objects[Idx]);
// Do something with value you retrieved
end;
end;

请注意,由于 Objects 属性实际上是为了存储对象,因此这为您提供了很大的灵 active 。下面是一个示例(故意非常简单),将客户的联系信息存储在关联的对象实例中,并在选择列表框中的项目时将其显示在标签中。

unit Unit1;

interface

uses
Windows, Messages, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

type
TCustomer=class
private
FContact: string;
FPhone: string;
public
constructor CreateCustomer(const AContact, APhone: string);
property Contact: string read FContact write FContact;
property Phone: string read FPhone write FPhone;
end;

TForm1 = class(TForm)
ListBox1: TListBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
lblContact: TLabel;
lblPhone: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TCustomer }

constructor TCustomer.CreateCustomer(const AContact, APhone: string);
begin
inherited Create;
FContact := AContact;
FPhone := APhone;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: Integer;
begin
for i := 0 to ListBox1.Items.Count - 1 do
ListBox1.Items.Objects[i].Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
lblContact.Caption := '';
lblPhone.Caption := '';

// Create some customers. Of course in the real world you'd load this
// from some persistent source instead of hard-coding them here.
ListBox1.Items.AddObject('N Company', TCustomer.CreateCustomer('Nancy', '555-3333'));
ListBox1.Items.AddObject('B Company', TCustomer.CreateCustomer('Brad', '555-1212'));
ListBox1.Items.AddObject('A Company', TCustomer.CreateCustomer('Angie', '555-2345'));
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
Cust: TCustomer;
begin
if ListBox1.ItemIndex <> -1 then
begin
Cust := TCustomer(ListBox1.Items.Objects[ListBox1.ItemIndex]);
lblContact.Caption := Cust.Contact;
lblPhone.Caption := Cust.Phone;
end;
end;

end.

关于delphi - 如何在 Delphi 7 中创建具有两列(一列隐藏)的组合框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16006577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com