旧的贴子我找过了,没有找到我要的答案
我的方法是
写:
sID := FieldByName('ID').AsString;
sName := FieldByName('name').AsString;
AComboBox.Items.AddObject(sName,TObject(sID));
读:
string(cbxName.Items.Objects[cbxName.ItemIndex])
但读的返回值是'name',并不是我写的sID的值期望您的精彩回答!
我的方法是
写:
sID := FieldByName('ID').AsString;
sName := FieldByName('name').AsString;
AComboBox.Items.AddObject(sName,TObject(sID));
读:
string(cbxName.Items.Objects[cbxName.ItemIndex])
但读的返回值是'name',并不是我写的sID的值期望您的精彩回答!
T=class
public
sID:stirng;
end;var
o:T;
...
o :=T.Create;
o.sID := FieldByName('ID').AsString
...
aComboBox.Items.AddObject(sName,o);
...
//o不需要释放
读:
T(aComboBox.Items.Objects[aComboBox.ItemIndex]).sID
http://expert.csdn.net/Expert/topic/1196/1196971.xml?temp=.5505182
我原来用的就是一个记录来保存这些信息,感觉addobject方法很好,而且当ID是整形时也没问题,头疼!
高手支招!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
提示“Invalid typecast”
上面语句怎么写?
应该这样写string(pointer(cbxName.Items.Objects[cbxName.ItemIndex]))
同时感谢各位的帮忙
sID:string;
...
sID := 'ID';
AComboBox.Items.AddObject('Name',TObject(sID));
string(cbxName.Items.Objects[cbxName.ItemIndex])
是可以用的,但是,delphi 会默认地释放cbxName.Items.Objects[],当Objects[]是以下类型时都没什么问题 LString,WString,Variant,Array,Record,Interface(Object),DynArray(参见system.pas) 当Objects是Record时,
代码是这样的 .AddObject(...,@R) AddObject(...,R)编译时通不过的,实际上Objects[...]是一个地址,所以当R是局部变量时就会出现问题。当在R释放之前访问Objects[...]是没有问题的。(读 var R:^TR; R := Pointer( .Objects[...]);)
同时在释放R后,将R置nil,否则同样可能有问题。如还有其他的问题,可一联系我: MSN :[email protected]
也就是说TObject是一个指针类型,如果没有创建则不能被外部引用,除非是整形。我做过试验好像只有整形可以,字符性也不可以