问题描述
我想知道是否有办法从备忘录的特定行中复制文本。例如,我想将备忘录第 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];