Delphi TCheckListBox异常行为,未显示第一个字符

Delphi TCheckListBox异常行为,未显示第一个字符,delphi,tchecklistbox,Delphi,Tchecklistbox,因此,我有一个包含6项的复选框: Items.Strings = ( 'Banana' 'Apple' 'Pomelo' 'Orange' 'Peach' 'BlueBarry') 如果要将它们显示在ShowMessage对话框中,则会打印消息 'anana','pple','omelo','range','each','lueBarry'. 我使用的程序是这样的 procedure TForm1.Button1Click(Sender: TO

因此,我有一个包含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;

为什么我不能从我的项目中获取第一个字符

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

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;

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

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

tString.ValueFromIndex

根据字符串的索引返回字符串的值部分

声明

public property TStrings.ValueFromIndex : string
  read GetValueFromIndex
  write SetValueFromIndex;
public property TStrings.NameValueSeparator : Char
  read FNameValueSeparator
  write SetNameValueSeparator;
描述

ValueFromIndex根据字符串索引返回字符串的值部分。值部分是字符串中NameValueSeparator字符之后的所有字符,如果NameValueSeparator字符不存在,则为所有字符

TStrings.NameValueSeparator
用于分隔名称、值对的字符的值

声明

public property TStrings.ValueFromIndex : string
  read GetValueFromIndex
  write SetValueFromIndex;
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;

不能将ValueFromIndex用于porpouse

tString.ValueFromIndex

根据字符串的索引返回字符串的值部分

声明

public property TStrings.ValueFromIndex : string
  read GetValueFromIndex
  write SetValueFromIndex;
public property TStrings.NameValueSeparator : Char
  read FNameValueSeparator
  write SetNameValueSeparator;
描述

ValueFromIndex根据字符串索引返回字符串的值部分。值部分是字符串中NameValueSeparator字符之后的所有字符,如果NameValueSeparator字符不存在,则为所有字符

TStrings.NameValueSeparator
用于分隔名称、值对的字符的值

声明

public property TStrings.ValueFromIndex : string
  read GetValueFromIndex
  write SetValueFromIndex;
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;


确定字符串是如上所示的方式吗
.ValueFromIndex
应该从
Name=value
列表返回一个值。项目可以通过
CheckListBox1.Items[I]
访问。是的,我确定。我想从每个项目中检索文本。还有别的办法吗?在ValueFromIndex?旁边,如我的第一条评论
CheckListBox1.Items[I]
中所示。但是
.ValueFromIndex
应该返回空字符串以及列表中显示的内容。确定字符串的方式如上所示吗
.ValueFromIndex
应该从
Name=value
列表返回一个值。项目可以通过
CheckListBox1.Items[I]
访问。是的,我确定。我想从每个项目中检索文本。还有别的办法吗?在ValueFromIndex?旁边,如我的第一条评论
CheckListBox1.Items[I]
中所示。但是
.ValueFromIndex
应该返回空字符串以及列表中显示的内容。我这样做了,我在程序中插入了数据集中的项,但是属性“ValueOfIndex[]”由于某种原因没有返回第一个字符。是的,我尝试了项[I]并可以工作。谢谢,但为什么ValueOfIndex会有这种奇怪的行为呢?这真的应该是一个答案,而不是两个。在这里,您将演示如何使用
Items
属性(实际上并未提及),并在另一个答案中解释为什么
ValueFromIndex
对于预期任务是错误的属性。最好明确地说,
是需要的,在这里演示,然后解释原始代码的错误,就像在另一个答案中所做的那样。这将是一个很好的答案,而不是两个一般的答案。(手动填充列表的图片和代码与任何一个答案都不相关。)我认为两个答案比一个答案更清楚,在这种情况下,我认为只有一个答案太长。当有人在搜索一个解决方案时,最好的办法是找到一个简短的解决方案,使理解变得简单快捷,用户可以在其中复制、粘贴然后尝试该解决方案。。。随附的图片显示,所有项目都是完整的,没有被截断,因此解决方案运行良好。。。无论如何,我无法理解您评论的原因。我这样做了,我在程序中插入了数据集中的项,但由于某种原因属性“ValueOfIndex[]”没有返回第一个字符。是的,我尝试使用项[I]并有效。谢谢,但为什么ValueOfIndex会有这种奇怪的行为呢?这真的应该是一个答案,而不是两个。在这里,您将演示如何使用
Items
属性(实际上并未提及),并在另一个答案中解释为什么
ValueFromIndex
对于预期任务是错误的属性。最好明确地说,
是需要的,在这里演示,然后解释原始代码的错误,就像在另一个答案中所做的那样。这将是一个很好的答案,而不是两个一般的答案。(手动填充列表的图片和代码与任何一个答案都不相关。)我认为两个答案比一个答案更清楚,在这种情况下,我认为只有一个答案太长。当有人在搜索一个解决方案时,最好的办法是找到一个简短的解决方案,使理解变得简单快捷,用户可以在其中复制、粘贴然后尝试该解决方案。。。随附的图片显示,所有项目都是完整的,没有被截断,因此解决方案运行良好。。。无论如何,我无法理解你评论的原因。VCL源代码无疑有缺陷,但这是一个可以原谅的错误。我的意思是,它不处理列表不包含名称/值对的情况。那又怎样?那又怎样??因此,不能对公开的端口使用ValueFromIndex。没有别的了,但是。。。但是但是.ValueFromIndex属性的用途是其他。童车的行为是