1

所以我有一个包含 6 个项目的 CheckListBox :

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;

为什么我无法从我的项目中获取第一个字符?

4

2 回答 2

4

尝试像这样以正确的方式插入项目

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;
于 2014-11-04T07:27:08.097 回答
2

您不能将 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 是用于分隔名称、值对的字符。默认情况下,这是等号 (=),产生 Name=Value 对。

对于 Name : Value 对,它可以设置为冒号。

看看 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;
于 2014-11-04T07:46:54.553 回答