Свойство TextBox.Lines, подпись читается и пишется, но я получаю только чтение и никаких полезных ошибок - PullRequest
2 голосов
/ 10 октября 2011

В своем стремлении плавно обновлять TextBox символы программным способом я столкнулся со свойством TextBox.Lines. От его подписи

[LocalizableAttribute(true)] 
public:
property array<String^>^ Lines {
    array<String^>^ get ();
    void set (array<String^>^ value);
}

кажется, что он предлагает доступ для чтения и записи, однако, когда я обновляю одну строку, я не вижу обновления, применяемого ни в отладчике, ни на экране. Почему MicroSoft публикует вводящие в заблуждение заголовки, когда он может просто пропустить средство доступа set из объявления свойства?

Запись MSDN http://msdn.microsoft.com/en-US/library/system.windows.forms.textboxbase.lines%28v=VS.80%29.aspx предлагает несколько запутанных советов:

NoteNote

По умолчанию коллекция строк является доступной только для чтения копией строк в TextBox. Чтобы получить доступную для записи коллекцию строк, используйте код, подобный следующему: textBox1.Lines = new string[] { "abcd" };

Но это вовсе не получение каких-либо строк, а их установка. Имеет ли этот фрагмент кода дополнительное значение для обновления отдельных строк? Если так, что я пропускаю? EDIT Джон, вот как я думал, что обновил

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();

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

В основном, когда вы читаете свойство, оно делает копию.Если вы измените возвращенный массив, это ничего не сделает само по себе , но вы всегда можете установить значение обратно.Например (C #):

string[] lines = textBox.Lines;
lines[5] = "Updated!";
textBox.Lines = lines;

Здесь важно то, что вы пишете в свойство.Помните, что свойство - это просто пара геттер / сеттер;он вызывает setter , который изменяет строки в текстовом поле.

1 голос
/ 10 октября 2011

Думайте об этом так; посмотри внимательнее на подпись ... что это за свойство? массив строк. Этот массив предназначен для чтения / записи.

Но, как отмечает Джон, когда вы читаете его, вы получаете его копию, поэтому установка одной строки, как вы делаете, в основном не имеет никакого эффекта. Вам нужно установить весь массив после изменения копии.

...