TCheckListBox странное поведение, не показывает первый символ

Итак, у меня есть CheckListBox с 6 пунктами:

Items.Strings = (
    'Banana'
    'Apple'
    'Pomelo'
    'Orange'
    'Peach'
    'BlueBarry')

Если я хочу показать их, то в диалоговом окне ShowMessage будет напечатано сообщение.

'anana','pple','omelo','range','each','lueBarry'.

Процедура, которую я использую, такова.

procedure TForm1.Button1Click(Sender: TObject);
var I : Integer;
begin
     for I := 0 to CheckListBox1.Items.Count - 1 do
          ShowMessage(CheckListBox1.Items.ValueFromIndex[I]);
end;

Почему я не могу получить первый символ из моего предмета?

2 ответа

Решение

Попробуйте вставить элементы в правильном порядке, как это

procedure TForm1.Button1Click(Sender: TObject);
begin
  CheckListBox1.Items.Add('Banana');
  CheckListBox1.Items.Add('Apple');
  CheckListBox1.Items.Add('Pomelo');
  CheckListBox1.Items.Add('Orange');
  CheckListBox1.Items.Add('Peach');
  CheckListBox1.Items.Add('BlueBarry');
end;

результат будет:

затем...

procedure TForm1.Button2Click(Sender: TObject);
var I : Integer;
begin
     for I := 0 to CheckListBox1.Items.Count - 1 do
          ShowMessage(CheckListBox1.Items[I]);

end;

Вы не можете использовать ValueFromIndex для вашего porpouse.

TStrings.ValueFromIndex

Вернуть значение части строки на основе ее индекса.

декларация

public property TStrings.ValueFromIndex : string
  read GetValueFromIndex
  write SetValueFromIndex;

Описание

ValueFromIndex возвращает часть значения строки на основе строкового индекса. Часть значения - это все символы в строке после символа NameValueSeparator или все символы, если символ NameValueSeparator отсутствует.

TStrings.NameValueSeparator

Значение символа, используемого для разделения имени, пары значений

декларация

public property TStrings.NameValueSeparator : Char
  read FNameValueSeparator
  write SetNameValueSeparator;

Описание

NameValueSeparator - это символ, используемый для разделения пары имя-значение. По умолчанию это знак равенства (=), в результате чего получаются пары имя = значение.

Для пар имя: значение можно задать двоеточие.

взгляни на источник vcl:O

function TStrings.GetValueFromIndex(Index: Integer): string;
begin
  if Index >= 0 then
    Result := Copy(Get(Index), Length(Names[Index]) + 2, MaxInt) else
    Result := '';
end;
Другие вопросы по тегам