Вставить символ в начале текущей строки (vb.net) - PullRequest
2 голосов
/ 09 февраля 2010

В настоящее время у меня есть код:

textbox1.text = textbox1.text.insert(textbox1.getfirstcharIndexFromCurrentLine(),";")

Но это означает, что необходимо перезагрузить все текстовое поле, что при больших файлах заметно медленнее.

Какие есть альтернативы?

Ответы [ 3 ]

2 голосов
/ 10 февраля 2010
Dim currcaretpos = TextBox1.SelectionStart
Dim currsellength = TextBox1.SelectionLength
TextBox1.SelectionStart = TextBox1.GetFirstCharIndexOfCurrentLine
TextBox1.SelectionLength = 0
TextBox1.SelectedText = ";"
TextBox1.SelectionStart = currcaretpos + 1
TextBox1.SelectionLength = currsellength
2 голосов
/ 09 февраля 2010

Вы можете проверить, быстрее ли вставляется текст:

textbox1.SelectionStart = textbox1.GetFirstCharIndexOfCurrentLine();
textbox1.SelectionLength = 0;
textbox1.Paste(";");

Edit:
Поскольку текстовое поле, в конце концов, не текстовое поле, а richtextbox, метод Paste работает по-другому. Вы можете поместить текст в буфер обмена и вставить его или использовать вместо этого свойство SelectedText:

textbox1.SelectedText = ";";
0 голосов
/ 10 февраля 2010

Конкатенация длинных строк мучительно медленная. Использование richTextBox вместо TextBox сделает пользовательский интерфейс намного быстрее для больших строк, но это мало поможет с программными изменениями текста.

Вот один из способов ускорить изменение больших строк в текстовом поле, но, к сожалению, это немного грязно.

  1. Вместо того, чтобы читать файл как одну строку, читайте его как массив строк:

    ss = System.IO.File.ReadAllLines(filename)
    
  2. Назначьте только строку, примерно в три раза превышающую высоту текстового поля для текстового поля, объединяя строки, прочитанные на первом шаге, и добавляя crlf.

  3. Вручную выполните прокрутку, добавляя или удаляя из строки «текстового буфера» по мере необходимости.

  4. Отражение изменений, внесенных пользователем в текстовом поле буфера и исходных строк (сс).

Это довольно громоздко, но это ускорит обработку текстового поля 8-мегабайтного файла / строки, например, в несколько сотен раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...