读书人

关于ComboBox.Items.AddObject用法解决

发布时间: 2013-03-27 11:22:42 作者: rapoo

关于ComboBox.Items.AddObject用法
之前在代码中增加了


ComboBox.Items.AddObject('一班','4');
ComboBox.Items.AddObject('二班','5');
ComboBox.Items.AddObject('三班','6');


这时ComboBox.ItemIndex对应如下:
ComboBox.ItemIndex=0,ComboBox.Text='一班'
ComboBox.ItemIndex=1,ComboBox.Text='二班'
ComboBox.ItemIndex=2,ComboBox.Text='三班'
然而数据库中存储的为'4','5','6',获取5 时,我应该如何设置ComboBox,使ComboBox.Text显示为'二班'呢? ComboBox
[解决办法]
写了个小例子, XE测试通过

定义窗体的私有变量是为了保证期在有效范围内的可用性

unit Unit13;

interface

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

type
PClz = ^TClz;
TClz = record
Name : string;
ID : integer;
end;

TForm13 = class(TForm)
cbb1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure cbb1Change(Sender: TObject);
private
{ Private declarations }
Clzs : array of TClz; //Clzs要保证在TForm13中始终有效, 所以在此定义
public
{ Public declarations }
end;

var
Form13: TForm13;

implementation

{$R *.dfm}

procedure TForm13.cbb1Change(Sender: TObject);
begin
with cbb1.Items do
begin
ShowMessage(IntToStr(PClz(Objects[IndexOf(cbb1.Text)]).ID));
end;
end;

procedure TForm13.FormCreate(Sender: TObject);
begin
SetLength(Clzs, 3);
Clzs[0].Name := '一班';
Clzs[0].ID := 4;
Clzs[1].Name := '二班';
Clzs[1].ID := 5;
Clzs[2].Name := '三班';
Clzs[2].ID := 6;

cbb1.Clear;
cbb1.Items.AddObject(Clzs[0].Name, @Clzs[0]);
cbb1.Items.AddObject(Clzs[1].Name, @Clzs[1]);
cbb1.Items.AddObject(Clzs[2].Name, @Clzs[2]);
end;

end.







[解决办法]
引用:
引用:写了个小例子, XE测试通过

定义窗体的私有变量是为了保证期在有效范围内的可用性
Delphi/Pascal code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555……

itemindex是下标, 不用设置...

你能取到ID, 就是知道cbb绑定的对象了
获得下标的方法 : cbb1.Items.IndexOfObject(对象)
设置当前项方法: cbb1.ItemIndex := cbb1.Items.IndexOfObject(对象)

如果知道ID, 不知道对象, 则遍历cbb1.items的对象, 对比ID并获得下标

读书人网 >.NET

热点推荐