文本框.Lines属性,签名是读写,但我得到只读,没有有用的错误
本文关键字:只读 有用 错误 属性 Lines 读写 文本 | 更新日期: 2023-09-27 18:10:58
在我以编程方式顺利更新TextBox
字符的过程中,我偶然发现了TextBox。行属性。从它的签名
[LocalizableAttribute(true)]
public:
property array<String^>^ Lines {
array<String^>^ get ();
void set (array<String^>^ value);
}
似乎提供读写访问,但是当我更新单行时,我没有看到更新在调试器内或屏幕上应用。当微软可以简单地从属性声明中省略set访问器时,为什么要发布误导性的头文件?
MSDN条目http://msdn.microsoft.com/en-US/library/system.windows.forms.textboxbase.lines%28v=VS.80%29.aspx提供了一些令人困惑的建议:
NoteNote
默认情况下,行集合是文本框中行的只读副本。要获得可写的行集合,使用类似于下面的代码:
textBox1.Lines = new string[] { "abcd" }
;
但这根本没有得到任何行,而是设置它们。该代码片段在允许更新单个行方面有进一步的意义吗?如果是这样,我错过了什么?编辑Jon,我觉得我是这样更新的
for ( int counter = 0; counter < lineStrideInBytes - NEWLINECHARCNT; counter++ )
{
int srcI = LineBeingWrittenI * (lineStrideInBytes) + counter;
replacedLine->Append(TextBoxStr[srcI]);
}
replacedLine->AppendLine(); //NEWLINECHARS
replacedLine[col] = chr; //Updated char
textBox1->Lines[LineBeingWrittenI] = replacedLine->ToString();
基本上当你读取属性时,它会复制。如果你改变返回的数组,它本身不会做任何事情但是你总是可以把值设置回来。例如(c#):
string[] lines = textBox.Lines;
lines[5] = "Updated!";
textBox.Lines = lines;
这里重要的是你在向属性中写入。记住,属性就是一个getter/setter对;它调用setter来改变文本框中的行
这样想;仔细看一下签名……这个性质是什么?字符串数组。数组是读/写的。
但是正如Jon所指出的,当你阅读它时,你得到的是它的一个副本,所以设置一行基本上没有效果。您需要在更改副本后设置整个数组。