Как вывести в textbox

Параграф 1. Вывод текстовой информации в контрол Label

Для вывода текстовой информации наиболее часто применяются контролы Label и TextBox, которые мы уже использовали в параграфе "Простейший Windows Application проект". Контрол TLabel предназначен для вывода однострочной текстовой информаци и имеет стандартный набор свойств и методов, большинство из которых прозрачны или описаны в предыдущих параграфах.

Отметим, что в контрол можно помещать не только текст, но, чего нет в Delphi и Borland C++ Builder, и рисунки, аналогично, как это мы делалали для кнопок — он имеет такойже набор свойств(Image, ImageAlign, ImageList).

Интересным является свойство UseMnemonic, позволяющее определить, как будет интерпретироваться символ амперсанда (&), размещенный в свойстве Text. Если установлено значение True, то амперсанд из текста удаляется, а символ, перед которым он расположен, подчеркивается. Эта возможность применяется для определения клавиш быстрого доступа для выбора именно контрола Label — пользователь может комбинацией клавиш + устанавливать фокус на контрол, а затем, используя клавишу Tab, на контрол, следующий по таб номеру за контролом Label. Например, если в форме расположено несколько контролов, среди которых имеется текстовое поле, в которое необходимо перейти нажатием клавиши быстрого доступа, то достаточно установить свойства Tabindex метки и текстового поля так, чтобы для метки это значение было на единицу меньшее, чем у текстового поля. Теперь, в программе, Вы можете выбрать клавишами быстрого доступа метку и, далее, нажать клавишу Tab — будет выбрано текстовое поле для ввода информации.

Вывод текста в контрол не вызывает трудностей, для этого контрол имеет свойство Text:

Параграф 2. Вывод текстовой информации в контрол TextBox

2.1. Основные свойства TextBox

Контрол TextBox мы пока использовали для ввода и вывода однострочного текста, однако он болле предназначен именно для ввода и вывода многострочного текста. Для этого у него есть свойство Multiline, которое должно быть установлено в True.

Cвойства AcceptsTab и AcceptsReturn определяют действие при нажатии клавиш Tab и Enter, при False (по умолчанию) и при нажатии Tab или Enter осуществляется переход фокуса к следующему по TabIndex контролу, при True — клавиши выполняют основное свое назначение — вставка разрыва табуляции и перевод строки соответственно.

Cвойство AutoSize определяет, нужно ли автоматически изменять размеры конрола, чтобы в нем можно было разместить его содержимое.

Свойство CharacterCasing определяет регистр в котором будут отображаться техт в контроле.

Свойство HideSelection целесообразно установить в False — в противном случае выделенный программно текст не будет отображаться.

Свойство Locked определяет может ли пользователь изменять свойства TextBox программно.

Свойство ScrollBars показывает положение полос прокрутки — при Both полоса прокрутки появляется при выходе текста за соответствующую границу.

Свойство PasswordChar (работает только при Multiline=false) не дает возможности просматривать вводимые символы, заменяя их на привычные для ввода пароля звездочки или другой символ, указанный в этом поле.

Свойство WordWrap при True разрешает перенос текста на новую строку при ширене строки текста более ширины окна.

2.2. Программный вывод текста в TextBox

Создадим проект решения для вывода текстовой информации с контролом TrxtBox, показанный на Рис.1.

Рис.1. Проект решения для вывода текстовой информации

Создание кнопочной панели, меню и панели статуса уже рассмотрены в предыдущих параграфах раздела, поэтому здесь приводятся лиш коды обработчиков событий для кнопок. У кнопок установлено свойство Tag соответственно в 1, 2 и 3 и события MouseHover и MouseLeave для всех кнопок замкнуты на toolStripButton1_MouseHover и toolStripButton1_MouseLeave. Для вывода подсказок использован контрол toolStrip, а для вывода подсказок в панель статуса StatusStrip и соответствующий код (все тонкости описаны в предыдущих параграфах).

Прежде чем выводить текст программно, нажмем кнопочку с тремя точками в свойстве Lines (вызов String Coleection Editor) и выведем несколько строк текста с клавиатуры. После нажатия кнопочки OK видим, что текст появился в окне контрола и в свойстве Text. Это говорит о том, что текст можно выводить как в свойство Text, так и использовать свойство Lines (String[] Array). Обратим внимание, что в свойстве Text присутствуют два нечитаемых символа — это
и
— перевод строки и возврат каретки. К сожалению, из за этого, придется при редактировани текста учитывать наличие этих символов. У свойства Lines нет методов Add и Delete для строк, что также создает дополнительные трудности при редактировании текста.

Читайте также:  Как открыть swf файл в браузере

Перед началом манипулирования с текстом определим статическую переменную viNom в декларационной части кода:

Следующие коды обработчиков событий нажатия для кнопок показывают возможности редактирования многострочного текста. Раскоментируйте интересующий Вас способ.

Нажимаем F5 и можем добавлять и удалять строки в TextBox.

Рис.2. Демонстрация добавления и удаления строк

Удалять строки можно и так (ровно как добавлять и вставлять):

Параграф 3. Ввод/Вывод текстовой информации в контрол TextBox из/в файл(а)

3.1. Классы для работы с текстовыми файлами

Для работы с текстовыми файлами удобно использовать потоки и класс потоков, наследника класса Stream — Класс FileStream.

Класс FileStream используется для чтения и записи файлов. Его можно использовать для чтения и записи байтов, символов, строк и других типов данных. Класс FileStream поддерживает синхронное и асинхронное открытие файлов, синхронные операции чтения и записи (методы Read и Write), а также асинхронные операции чтения и записи (методы BeginRead и BeginWrite). Асинхронные операции завершаются вызовом методов EndRead и EndWrite соответственно. Режим по умолчанию — синхронный. Для проверки режима используемтсясвойство класса IsAsync. Для асинхронных операций необходим объект WaitHandle. Метод Seek используется для произвольного доступа к файлам. Свойство Position позволяет нам узнать или установить текущую позицию в потоке. Методы Lock и Unlock служат для предотвращения доступа ко всему файлу или к его части, а также для отмены ранее установленного запрета доступа. Свойство Length возвращает длину потока в байтах, а метод SetLength служит для задания длины потока. Методы ReadByte и WriteByte используются для чтения и записи одного байта. Для других примитивных типов необходимы классы BinaryReader и BinaryWriter соответственно.

Удобно использовать для работы с текстовыми файлами в дополнение к классу FileStream классы TextReader, TextWriter StreamReader, StreamWriter, StringReader и StringWriter.

Класс TextReader используется для чтения последовательности символов из ассоциированного потока. Этот класс служит основой для двух других классов: StreamReader и StringReader.

Класс TextReader содержит следующие методы:

Peek() — возвращает следующий символ из потока, но не перемещает указатель текущей позиции;

Read() или Read(Char(), Integer, Integer) — метод применяется для чтения указанного числа символов из потока;

ReadBlock(Char(), Integer, Integer) — метод считывает указанное число символов в буфер;

ReadLine() — считывает строку символов из потока;

ReadToEnd() — считывает все символы с текущей позиции до конца потока как одну строку.

Класс TextWriter служит для записи последовательности символов в поток.

Класс StreamReader применяется для чтения последовательности символов из файла или другого потока. Его можно использовать для чтения текстового файла построчно и как одну строку.

Класс StringReader позволяет выполнить чтение символов из строк. StreamReader и StringReader для чтения строки из текстового файла и чтения символов из этой строки как из потока:

Класс StreamWriter применяется для вывода последовательности символов в той или иной кодировке. По умолчанию используется экземпляр класса UTF8Encoding для записи символов в кодировке Unicode UTF-8. Существует несколько перегруженных конструкторов, позволяющих указать поток, кодировку по умолчанию, задать кодировку, размер буфера и тип операции: требуется перезаписать существующий файл или информация должна быть к нему добавлена. Свойство Flush служит для указания, следует ли записывать содержимое буфера в поток после каждого вызова методов Write и WriteLine.

Класс StringWriter используется для записи строки, которая хранится в классе StringBuilder, реализованном в пространстве имен System.Text.

3.2. Ввод/Вывод текстовой информации

Покажем возможные способы использования перечисленных классов для ввода и вывода информации в TextBox.

Используем для реализации проект решения из предыдущего параграфа. Для чего уберем имеющийся код из обработчиков toolStripButton1_Click и toolStripButton2_Click. При желании можем изменить тексты подсказок и картинки для button1 и button2 и заглавие проекта.

В обработчики нажатия кнопок toolStripButton2_Click и toolStripButton2_Click запишем следующий код:

Проверим в заголовке наличие кода using System.IO; :

После выполнения программы введенный в контрол TextBox текст будет записан в файл по нажатию toolStripButton1_Click и добавлен к введенному из файла по нажатию toolStripButton2_Click.

Следующий код (изменим обработчик для кнопки 2) позволяет вывести текст по линиям. На этом принципе может быть также основан вывод конкретной строки текста.

Читайте также:  Как написать хэштег в инстаграм

Когда необходимо чтение всего текста, то код можно упростить.

Изменим теперь обработчик для кнопки 1

Теперь при запуске прграммы мы можем ввести какой либо текст в TextBox и, далее, после нажатия последовательно кнопок 1 и 2 его вывести c заголовком ("My Strings!!"). Этот код показывает как можно добавлять строки в текстовый файл.

Добавим в заголовок решения строку:

Изменим текст обработчика кнопки 1 для вывода чисел в текстовый файл:

Результат после последовательного нажатия кнопок 1 и 2:

Параграф 4. Вывод текстовой информации в контрол RichTextBox

4.1. Основные свойства RichTextBox

Вначале изменим предыдущее решение удалив коды обработчиков событий нажатия Button1 и Button2, удалим контрол TextBox и на его место поместим контрол RichTextBox. Рассмотрим его свойство на страничке Properties. Большинство свойст аналогичны описанным ранее для уже рассмотренных контролов. Рассмотрим те свойства, которых не было у уже использованных нами контролов.

Свойство AcceptButton позволяет закрепить кнопку, клик которой будет выполняться при нажатии Enter когда RichTextBox в фокусе (например после ввода).

WordSelection если свойство true, пользователь может, двойным щелчком на любой части слова в контроле сделать его выделенным.

BulletIndent и SelectionBullet — BulletIndent определяет отступ в пикселях текста перечислений (пунктов списка) от иконки соответствующей пункту списка при значении свойства SelectionBullet=true.

Пример из Help С#:

Рис.3. Свойства SelectionBullet и BulletIndent.

Свойство DetectUrls позволяет распозновать и выделять интернетовские ссылки и запускать браузер по этой ссылке при наличии в решении кода обработчика события LinkClicked следующего вида (Рис.4.):

Рис.4. Использование свойства DetectUrls

Свойство ZoomFactor позволяет одновременно изменять масштаб вывода текста в RichTextBox в пределах значений 0.64 — 64.0.

Свойство Ime Mode задает или возвращает состояние IME (Input Method Editor — IME — редактор способа ввода). Вместе со свойством RightToLeft определяют направление текста и способ его редактирования (свойства не актуальны для европейских языков, в том числе и для русского) — более необходимы при вводах иероглифических текстов на китайском, арабском, корейском и японском языках (при соответствующих Windows).

Значение по умолчанию NoControl.

Все остальные свойства richTextBox повторяют свойства TextBox.

4.2. Программный вывод текста в RichTextBox

В начале параграфа мы поместили контрол RichTextBox на форму.

Все свойства контрола пока оставим принятые по умолчанию. Свойства остальных контролов оставим без изменения — проект решения выглядит аналогично показанному на Рис.1. При удалении контрола требуется только удалить коды обработчиков нажатия кнопок 1 и 2.

Так как свойство Lines у RichTextBox и TextBox, то следует предположить, что ввод и вывод информации в контрол ничем не отличимы в обоих контролах — достаточно заменить имена, как показано далее в обработчиках toolStripButton1_Click и toolStripButton2_Click.

Коды обсолютно одинаковы и работают аналогично (Рис.2.). Все отличие контролов в формате текста .rtf и .txt. RichTextBox, как мы это видели при описании свойств контрола, позволяет менять шрифты, и характеристики шрифтов, отступы, использовать интернет ссылки и т.п.

Но прежде чем перейти к рассмотрению всех этих возможностей приведем еще один код (подходит и для работы с TextBox), который позволяет удалять строки несколько иначе и показывает, что с RichTextBox это, в отношении хранения информации — такойже массив как и string[]:

4.3. Использование шрифтов в RichTextBox

Изменим обработчик для кнопки 1 так, чтобы выводимые строки меняли свой шрифт при выводе очередной строки.

Результат выполнения кода представлен на Рис.4.

Рис.5. Задание параметров шрифтов для строк

Обратм внимание, что любая попытка добавить текcт обычным образом приведет у тому, что весь текст отобразится шрифтом, установленным в свойстве Font RichTextEdit.

В приведенном выше коде показно как добавить составляющую в стиль шрифта. Но соствляющие можно также и убирать. Добавим в конец предыдущего кода фрагмент:

Результат — перечеркивания в пятой строке исчезло.

4.4. Работа со строками в RichTextBox

В предыдущем решении мы получили пятистрочный текст, который хорошо подходит для показа того, как можно менять местами, добавлять и удалять строки. Будем добавлять в обработчик нажатия кнопки 1 дополнительные фрагменты, на которых и рассмотрим работу со строками.

Отметим сразу, что привычных для программистов методов, напрямую добавляющих, удаляющих или вставляющех строки в C# для RichEditBox, ровно как и для TextBox, нет. Как результат приходится работать через Clipboard. (Наличие метода Insert у свойства Text пусть никого не обольщает, его малая результативность будет показана чуть ниже).

Изменим код в обработчике toolStripButton1_Click:

Читайте также:  Как подключить мышь по bluetooth windows 10

Результат видим на Рис.6.(слева).

Если вместо строчки кода

Или вообще ее убрать, то строка 5 заместит строку 2 (Рис.6. справа).

Рис.6. Манипулирование строками в RichTextBox

Теперь о методе Insert. Рассмотрим фрагмент кода, который добавим в конец фрагмента кода, где мы экспирементировали со шрифтами:

Все хорошо (Рис.7.) — строки поменяльсь местами и вставлена строка в нулевую позицию, но все форматирование исчезло. Причина — Text и отформатированный текст не одно и тоже. Текст хранится в свойстве Lines по строчно и в свойстве текст одной строкой, а отформатированный и отображаемый текст в формате Rtf в свойстве SelectedRtf.

Рис.7. Манипулирование строками в RichTextBox

Нетрудно посмотреть причину этого — достаточно добавить перед последнем вставленным фрагментом и в конце его код:

и посмотреть результат в окне отладчика и сравнить коды (меню View/Output).

Зная формат нетрудно найти все, что было введено при форматировании и потерялось при присвоении.

Можно попробовать осуществить манипуляцию строками через посредника, например richTextBox2.

Однако и это ничего хорошего не дает — при присвоении теряются форматы всех строк кроме первой, который становится форматом всего текста.

4.5. Файловый ввод/вывод RichTextBox

Рассмотрим фрагмент кода, который, как и прежде, поместим в конец кода обработчика toolStripButton3_Click:

При запуске текст пишется из контрола в файл и читается из него в контрол благодаря наличию методов SaveFile и LoadFile. Причем формат тексты сохраняется.

Как и большинства функций C# функции SaveFile и LoadFile перегружаемые и можно напрямую указать формат текста, например:

Молчанов Владислав 15.07.2004г.

Адаптировано к VS 2005 11.11.2006г.

Для ввода и редактирования текста предназначены текстовые поля — элемент TextBox. Так же как и у элемента Label текст элемента TextBox можно установить или получить с помощью свойства Text.

По умолчанию при переносе элемента с панели инструментов создается однострочное текстовое поле. Для отображения больших объемов информации в текстовом поле нужно использовать его свойства Multiline и ScrollBars . При установке для свойства Multiline значения true, все избыточные символы, которые выходят за границы поля, будут переноситься на новую строку.

Кроме того, можно сделать прокрутку текстового поля, установив для его свойства ScrollBars одно из значений:

None : без прокруток (по умолчанию)

Horizontal : создает горизонтальную прокрутку при длине строки, превышающей ширину текстового поля

Vertical : создает вертикальную прокрутку, если строки не помещаются в текстовом поле

Both : создает вертикальную и горизонтальную прокрутку

Автозаполнение текстового поля

Элемент TextBox обладает достаточными возможностями для создания автозаполняемого поля. Для этого нам надо привязать свойство AutoCompleteCustomSource элемента TextBox к некоторой коллекции, из которой берутся данные для заполнения поля.

Итак, добавим на форму текстовое поле и пропишем в код события загрузки следующие строки:

Режим автодополнения, представленный свойством AutoCompleteMode , имеет несколько возможных значений:

None : отсутствие автодополнения

Suggest : предлагает варианты для ввода, но не дополняет

Append : дополняет введенное значение до строки из списка, но не предлагает варианты для выбора

SuggestAppend : одновременно и предлагает варианты для автодополнения, и дополняет введенное пользователем значение

Перенос по словам

Чтобы текст в элементе TextBox переносился по словам, надо установить свойство WordWrap равным true . То есть если одно слово не умещается на строке, то но переносится на следующую. Данное свойство будет работать только для многострочных текстовых полей.

Ввод пароля

Также данный элемент имеет свойства, которые позволяют сделать из него поле для ввода пароля. Так, для этого надо использовать PasswordChar и UseSystemPasswordChar .

Свойство PasswordChar по умолчанию не имеет значение, если мы установим в качестве него какой-нибудь символ, то этот символ будут отображаться при вводе любых символов в текстовое поле.

Свойство UseSystemPasswordChar имеет похожее действие. Если мы установим его значение в true , то вместо введенных символов в текстовом поле будет отображаться знак пароля, принятый в системе, например, точка.

Событие TextChanged

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

Если делать в консоли — нормально работает (код 1), а если для формы (код 2, 3) — не выводит. Что тут делать?

Для форм аналогичный метод:

и кнопка на форме:

2 ответа 2

Не пользуйтесь устаревшим API. Работайте через Task , многопоточные проблемы уйдут сами собой.

И код стал гораздо понятнее.

Если мы хотим пинговать всё одновременно, делаем так:

Adblock
detector