2013-12-03 2 views
0

Я пытаюсь назначить все выбранные элементы в TxpListBox в TStringList.Присвоение выбранным элементам в TxpComboBox переменной

Моя первая мысль была сделать что-то вроде

Function AssignListBoxToList(ComponentName : TxpListBox) : Boolean; 
var 
    slComponentValue : TStringList; 
begin  
    slComponentValue := TStringList.Create; 
    slComponentValue.Add(ComponentName.Items); 
end; 

Но он бросает следующее исключение Incompatible types: 'String' and 'TString'.

Есть ли способ создать TStringList из TStrings или безопасно использовать String вместо TString в моем TxpListBox и/или я что-то упускаю.

TxpListBox - это TListBox с модифицированным внешним видом, который соответствует эстетике дизайна Windows XP.

+0

Поскольку TxpComboBox не является частью стандартного Delphi VCL, это может помочь, если вы упомянули, что именно это такое, и дали более подробную информацию. –

+0

Извините, я забыл об этом. Это часть модуля xpStyles. Это, по сути, просто ComboBox, который выглядит как из интерфейса XP. –

+0

AddStrings или Assign –

ответ

1

Похоже, TxpComboBox.Items может быть TStrings descendent (как стандарт 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 neededhere:

strResult := YourComboBox.Items[YourComboBox.ItemIndex]; 

С этим сказанным, TComboBox не поддерживает множественный выбор; TListBox делает, но TComboBox отображает выпадающий список и позволяет выбрать один элемент, что делает ваш вопрос несколько неясным.

+0

Ну, я чувствую себя идиотом. Я понял, что выбрал неправильный компонент, это из TListBox. Это исправило это, спасибо. –

Смежные вопросы