按行/索引从备忘录中复制文本

问题描述

我想知道是否有办法从备忘录的特定行中复制文本。例如,我想将备忘录第 3 行的内容存储到一个字符串中,然后对该字符串进行一些操作并将其复制到另一个备忘录/编辑中。

我已经尝试了一些变体,但都不起作用:

str_temp = Memo1->Lines[2].Text;
Memo2->Lines->Append(str_temp);

当我从 Lines[0] 询问时,它只是将备忘录中的所有内容复制到字符串中:

str_temp = Memo1->Lines[0].Text;
Memo2->Lines->Append(str_temp);

解决方法

Lines 属性是一个指向 TStrings 对象的指针。因此,Memo1->Lines[2].Text 与对每个指针算术进行 (*(Memo1->Lines+2)).Text 相同,这在语法上是有效的,但在逻辑上是错误的,因为它最终会访问无效的内存。而 Memo1->Lines[0].Text 与执行 (*(Memo1->Lines)).Text(又名 Memo1->Lines->Text)相同,它既合法又有效,但不是您想要的结果。

TStrings 有一个 Strings[] 属性,这是您需要使用的属性,例如:

String str_temp = Memo1->Lines->Strings[2];

或者,TStrings 有一个在内部使用 operator[]Strings[],例如:

String str_temp = (*(Memo1->Lines))[2];