文本框.Lines属性,签名是读写,但我得到只读,没有有用的错误



在我以编程方式顺利更新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所指出的,当你阅读它时,你得到的是它的一个副本,所以设置一行基本上没有效果。您需要在更改副本后设置整个数组。

最新更新