将TxpComboBox中的选定项分配给变量

时间:2013-12-03 03:42:02

标签: delphi delphi-7

我正在尝试将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设计美学。

1 个答案:

答案 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会显示一个下拉列表并允许选择一个项目,使您的问题有些不清楚。