我正在尝试将TxpListBox中的所有选定项目分配给TStringList。
我最初的想法是做类似
的事情Function AssignListBoxToList(ComponentName : TxpListBox) : Boolean;
var
slComponentValue : TStringList;
begin
slComponentValue := TStringList.Create;
slComponentValue.Add(ComponentName.Items);
end;
但它抛出以下异常Incompatible types: 'String' and 'TString'
。
有没有办法创建TStrings的TStringList,或者在我的TxpListBox中使用String而不是TString是安全的,和/或我错过了什么。
TxpListBox是一个TListBox,具有修改后的外观,以适应Windows XP设计美学。
答案 0 :(得分:1)
看起来TxpComboBox.Items
可能是TStrings
后代(与标准TComboBox.Items
一样)。如果是这种情况,这样的事情应该有效:
slComponentValue := TStringList.Create;
slComponentValue.Add(ComponentName.Items[ComponentName.ItemIndex]);
但是,您的功能不会按原样运行,因为它不会返回slComponentValue
。
从函数返回一个对象通常不是一个好主意(没有特定的理由),因为它不清楚释放它的责任在哪里。我更喜欢通过让一个过程接受一个已经创建的对象实例来更清楚:
procedure AssignComboBoxToList(ComponentName : TxpComboBox;
ListToFill: TStrings) : Boolean;
begin
Assert(Assigned(ListToFill));
ListToFill.Add(ComponentName.Items[ComponentName.ItemIndex);
end;
然后您可以像这样使用它:
slComponentValue := TStringList.Create;
try
AssignComboBoxToList(YourComboBox, slComponentValue);
if slComponentValue.Count > 0 then
// Do whatever with the slComponentValue list
finally
slComponentValue.Free;
end;
但是,由于您只处理单个字符串,因此使用单个字符串可能更容易;那里不存在真正的TStringList:
strResult := YourComboBox.Items[YourComboBox.ItemIndex];
话虽如此,TComboBox
不支持多项选择; TListBox
会这样做,但是TComboBox
会显示一个下拉列表并允许选择一个项目,使您的问题有些不清楚。