C# — Как вывести математическую формулу в TetxBoxRichTextBox C#


Содержание

Глава 5. Вывод текстовой информации

Параграф 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 присутствуют два нечитаемых символа — это \r и \n — перевод строки и возврат каретки. К сожалению, из за этого, придется при редактировани текста учитывать наличие этих символов. У свойства Lines нет методов Add и Delete для строк, что также создает дополнительные трудности при редактировании текста.

Перед началом манипулирования с текстом определим статическую переменную 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:

Результат видим на Рис.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г.

Общие сведения о RichTextBox RichTextBox Overview

RichTextBox Элемент управления позволяет отображать или редактировать содержимое нефиксированного формата, включая абзацы, изображения, таблицы и т. д. The RichTextBox control enables you to display or edit flow content including paragraphs, images, tables, and more. В этом разделе описывается TextBox класс и приводятся примеры его использования Язык XAML Extensible Application Markup Language (XAML) в и C#. This topic introduces the TextBox >Язык XAML Extensible Application Markup Language (XAML) and C#.

TextBox или RichTextBox? TextBox or RichTextBox?

И, TextBox и позволяют пользователям редактировать текст, однако эти два элемента управления используются в различных сценариях. RichTextBox Both RichTextBox and TextBox allow users to edit text, however, the two controls are used in different scenarios. RichTextBox Является лучшим выбором, когда необходимо, чтобы пользователь изменяю форматированный текст, изображения, таблицы или другое насыщенное содержимое. A RichTextBox is a better choice when it is necessary for the user to edit formatted text, images, tables, or other rich content. Например, изменение документа, статьи или блога, для которого требуется форматирование, изображения и т RichTextBox. д., лучше всего выполнять с помощью. For example, editing a document, article, or blog that requires formatting, images, etc is best accomplished using a RichTextBox. А требует меньше системных ресурсов, RichTextBox а и идеально подходит, когда требуется редактировать только обычный текст (т. е. использование в формах). TextBox A TextBox requires less system resources then a RichTextBox and it is ideal when only plain text needs to be edited (i.e. usage in forms). Дополнительные сведения о см. в TextBoxразделе Обзор текстового поля . See TextBox Overview for more information on TextBox. В следующей таблице перечислены основные возможности TextBox и. RichTextBox The table below summarizes the main features of TextBox and RichTextBox.

Элемент управления Control Проверка орфографии в режиме реального времени Real-time Spellchecking Контекстное меню Context Menu Команды форматирования, ToggleBold например (Ctrl + B) Formatting commands like ToggleBold (Ctr+B) FlowDocumentсодержимое, например изображения, абзацы, таблицы и т. д. FlowDocument content like images, paragraphs, tables, etc.
TextBox Да Yes Да Yes Нет No Нет. No.
RichTextBox Да Yes Да Yes Да Yes Да Yes

Хотя TextBox не поддерживает такие команды форматирования, как ToggleBold (Ctrl + B), многие основные команды поддерживаются обоими элементами управления, MoveToLineEndтакими как. Although TextBox does not support formatting related commands like ToggleBold (Ctr+B), many basic commands are supported by both controls such as MoveToLineEnd.

Функции из приведенной выше таблицы будут подробно рассматриваться далее. The features from the table above are covered in more detail later.

Создание элемента управления RichTextBox Creating a RichTextBox

В приведенном ниже коде показано, как RichTextBox создать объект, который пользователь может редактировать с содержимым в. The code below shows how to create a RichTextBox that a user can edit rich content in.

В частности, содержимое, измененное RichTextBox в, является нефиксированным содержимым. Specifically, the content edited in a RichTextBox is flow content. Содержимое нефиксированного формата может включать множество типов элементов, в том числе форматированный текст, изображения, списки и таблицы. Flow content can contain many types of elements including formatted text, images, lists, and tables. См. более подробные сведения о потоковых документах в разделе Общие сведения о потоковых документах. See Flow Document Overview for in depth information on flow documents. Чтобы вместить содержимое нефиксированного формата, RichTextBox объект FlowDocument размещается в объекте, который, в свою очередь, содержит редактируемое содержимое. In order to contain flow content, a RichTextBox hosts a FlowDocument object which in turn contains the editable content. Чтобы продемонстрировать содержимое нефиксированного RichTextBoxформата в, в следующем коде показано, как RichTextBox создать объект с абзацем и полужирным текстом. To demonstrate flow content in a RichTextBox, the following code shows how to create a RichTextBox with a paragraph and some bolded text.

На рисунке ниже показано, как будет выглядеть этот пример. The following illustration shows how this sample renders.

Элементы, Paragraph такие Bold как и, определяют, RichTextBox как отображается содержимое внутри. Elements like Paragraph and Bold determine how the content inside a RichTextBox appears. Когда пользователь редактирует RichTextBox содержимое, он изменяет содержимое нефиксированного формата. As a user edits RichTextBox content, they change this flow content. Дополнительные сведения о возможностях подвижного содержимого и способах работы с ним см. в разделе Общие сведения о потоковых документах. To learn more about the features of flow content and how to work with it, see Flow Document Overview.

Содержимое нефиксированного RichTextBox формата внутри не работает точно так же, как и содержимое потока, содержащееся в других элементах управления. Flow content inside a RichTextBox does not behave exactly like flow content contained in other controls. Например, отсутствуют столбцы в RichTextBox и, следовательно, автоматическое изменение размера не выполняется. For example, there are no columns in a RichTextBox and hence no automatic resizing behavior. Кроме того, встроенные функции, такие как поиск, режим просмотра, Навигация по страницам и масштаб, RichTextBoxнедоступны в. Also, built in features like search, viewing mode, page navigation, and zoom are not available within a RichTextBox.

Проверка орфографии в режиме реального времени Real-time Spell Checking

Проверку орфографии в режиме реального времени можно включить в TextBox или RichTextBox. You can enable real-time spell checking in a TextBox or RichTextBox. При включенной проверке орфографии все слова с ошибками подчеркиваются красной линией (см. рисунок ниже). When spellchecking is turned on, a red line appears underneath any misspelled words (see picture below).

Контекстное меню Context Menu

По умолчанию TextBox и, RichTextBox и имеют контекстное меню, отображаемое, когда пользователь щелкает правой кнопкой мыши внутри элемента управления. By default, both TextBox and RichTextBox have a context menu that appears when a user right-clicks inside the control. Контекстное меню дает пользователю возможность вырезания, копирования и вставки (см. рисунок ниже). The context menu allows the user to cut, copy, or paste (see illustration below).

Можно создать собственное пользовательское контекстное меню, чтобы переопределить меню по умолчанию. You can create your own custom context menu to override the default one. Дополнительные сведения см. в разделе Расположение пользовательского контекстного меню в RichTextBox. See Position a Custom Context Menu in a RichTextBox for more information.

Команды редактирования Editing Commands

Команды редактирования позволяют пользователям форматировать содержимое, доступное для RichTextBoxредактирования, в. Editing commands enable users to format editable content inside a RichTextBox. Помимо основных команд RichTextBox редактирования включает команды форматирования, которые TextBox не поддерживаются. Besides basic editing commands, RichTextBox includes formatting commands that TextBox does not support. Например, при редактировании в RichTextBoxпользователь может нажать сочетание клавиш CTRL + B, чтобы включить форматирование текста полужирным шрифтом. For example, when editing in a RichTextBox, a user could press Ctr+B to toggle bold text formatting. Полный EditingCommands список доступных команд см. в разделе. See EditingCommands for a complete list of commands available. Помимо использования сочетания клавиш, можно подключать команды к другим элементам управления, таким как кнопки. In addition to using keyboard shortcuts, you can hook commands up to other controls like buttons. В следующем примере показано, как создать простую панель инструментов, содержащую кнопки, с помощью которых пользователь может изменять форматирование текста. The following example shows how to create a simple tool bar containing buttons that the user can use to change text formatting.

На следующем рисунке показано, как будет выглядеть этот пример. The following illustration shows how this sample displays.

Определение изменения содержимого Detect when Content Changes

Обычно событие следует использовать для обнаружения изменений текста TextBox в или RichTextBox , а не KeyDown в том виде, в котором они могут ожидать. TextChanged Usually the TextChanged event should be used to detect whenever the text in a TextBox or RichTextBox changes rather then KeyDown as you might expect. Пример см. в разделе Определение изменения текста в TextBox. See Detect When Text in a TextBox Has Changed for an example.


Сохранение, загрузка и печать содержимого RichTextBox Save, Load, and Print RichTextBox Content

В следующем примере показано, как сохранить содержимое RichTextBox в файл, загрузить содержимое обратно RichTextBoxв и распечатать содержимое. The following example shows how to save content of a RichTextBox to a file, load that content back into the RichTextBox, and print the contents. Ниже для примера приведена разметка. Below is the markup for the example.

Ниже для примера приведен код. Below is the code behind for the example.

Как в textbox отображать данные построчно?

выводит в боксе сразу 1000 чисел после выполнения, а это не совсем удобно, так как хочется, чтобы отображал каждую итерацию. То есть хочется добиться результата, как через консоль.
И заодно сопутствующий вопрос. Почему метод .AppendText работает значительно быстрее .Text , то есть логичнее использовать его или там есть какие-то ограничения?

2 ответа 2

По первому вопросу: нужно установить свойство WordWrap в true .

По второму: конкатенация строк очень медленная (посмотрите на таблицу в разделе Results) операция. Для этого лучше использовать, например, StringBuilder (что скорее все и делает AppendText ), т.е. добавить в него все, что надо, а потом уже сделать присваивание свойству Text Вашего TextBox’a .

UPDATE

Про фоновое выполнение-то совсем забыл написать! Воспользуйтесь классом Task, да и вообще про TPL будет не лишним почитать. Получится что-то такое

Элемент управления RichTextBox

Читайте также:

  1. I. Понятие органа государственного управления (исполнительной власти)
  2. I.Формы государственного управления
  3. II Система регулирования и управления ВЭД на региональном уровне.
  4. III) Методы управления
  5. III.1. Последовательная структура управления
  6. III.2. Условная структура управления
  7. IV Предприятие – основной элемент хозяйственной системы
  8. Mov AX, ES:[BX][SI] загрузить в АХ 5-й элемент массива w.
  9. VIII. Виды контрактов и механизмы управления трансакциями
  10. X. Социально-этический элемент Послания.
  11. X.Элементы квантовой механики.
  12. Автократический стиль управления

Exit Sub

ErrHandler

Exit Sub

‘Пользователь нажал кнопку Cancel

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

Элемент управления RichTextBox открывает и сохраняет файлы как в формате RTF, так и в обычном текстовом формате ASCII. Совместно с операторами файлового ввода-вывода Visual Basic для непосредственного чтения и записи файлов можно использовать методы LoadFile и SaveFile или свойства SelRTF и TextRTF элемента управления.

Через коллекцию OLEObjects элемент управления RichTextBox поддерживает внедрение объектов. Каждый объект, вставленный в элемент управления, будет представлен объектом OLEObject. Это позволяет создавать составные документы, которые содержат другие документы или объекты. Например, можно создать документ, который содержит внедренную электронную таблицу или диаграмму Microsoft Excel, или документ Microsoft Word или рисунок. Чтобы вставить объект в элемент управления RichTextBox, нужно просто перенести файл (например, из проводника Windows) или выделить часть файла, открытого в другом приложении (например, Microsoft Word), и положить содержимое непосредственно на элемент управления. Элемент управления RichTextBox поддерживает как технологию “drag and drop” , так и взаимодействие с буфером обмена.

Для добавления элемента RichTextBox на панель управления необходимо выбрать меню Project, команду Components. В списке Controls выделить MicrosoftRichTextBox флажком.

Элемент управления RichTextBox поддерживает почти все свойства, события и методы, присущие стандартному элементу управления TextBox, такие как MaxLength, MultiLine, ScrollBars, SelLength, SelStart и SelText. Для элемента управления RichTextBox не устанавливается ограничение длины текста в 64К, как для стандартного TextBox.

Свойства элемента управления RichTextBox

Элемент управления RichTextBox обладает как некоторыми свойствами элемента управления TextBox, так и присущими только ему свойствами.

AutoVerbMenu – устанавливает значение, указывающее, будут ли выбранные слова показаны во всплывающем меню при нажатии правой кнопки мыши: (значения True / False ).

Для изменения атрибутов шрифта выделенного текста используются свойства SelFontName, SelFontSize, SelFontColor. Эти свойства воздействуют только на выбранный текст или, если текст не выбран, на текст, который располагается после текущей позиции курсора.

Для создания абзацных отступов используются свойства:

SelIndent— абзацный отступ (в ед. измерения, заданной свойством ScaleMode контейнера, например, формы);

SelHangingIndent—висячийотступ;

SelBullet –определяет стиль абзаца в виде списка (True / False);

BulletIndent—отступ в списке.

DisableNoScroll – устанавливает значение, указывающее, доступны ли полосы прокрутки: (Truе /False).

FileName – определяет имя файла, загруженного в RichTextBox .

RightMargin – правый край (чтобы текст не “уходил” за правый край окна, следует установить значение этого свойства немного меньшим, чем значение свойства Width твипсов на 500).

HideSelection – определяет, останется ли выделенным абзац, если элемент потерял фокус: (True, False).

MaxLength – определяет максимальное количество символов, которые может содержать элемент управления RichTextBox

ScrollBars – устанавливает значение, определяющее, имеет ли элемент управления горизонтальную либо вертикальную полосы прокрутки:

0-rtfNone- не имеет полос прокрутки

1-rtfHorizontal- только горизонтальная

2-rtfVertical- только вертикальная

3-rtfBoth- и горизонтальная, и вертикальная

Text – текст, расположенный в элементе управления.

События элемента управления RichTextBox


Change – изменение в элементе RichTextBox.

Click, DblСlick – одинарный/двойной щелчок кнопки мыши.

DragDrop – перетащить и оставить.

DragOver – перетащить с помощью мыши.

GotFocus, LostFocus – приобрести/потерять фокус (активность).

KeyDown, KeyUp – нажатие/отпускание клавиши.

KeyPress – какая клавиша нажата.

MouseDown, MouseUp – нажатие/отпускание клавиши мыши.

MouseMove – перемещение указателя мыши.

Методы элемента управления RichTextBox

Drag – начинает, заканчивает или отменяет операцию по перемещению объекта.

Find – проводит поиск в тексте элемента RichTextBox заданной строки.

LoadFile – загружает файл с расширением .RTF или .TXT в элемент RichTextBox. Формат метода:

ОбъектRTB. LoadFile(путь, тип файла)

Move – передвигает объект в заданные координаты.

Refresh – ускоренная перекраска элемента управления. Формат метода: ОбъектRTB.Refresh

SaveFile – сохраняет содержание элемета RichTextBox в файл.

Формат метода: ОбъектRTB.SaveFile(путь, тип файла)

SelPrint– посылает отформатированный в RichTextBox текст на печать. Формат метода: ОбъектRTB.SelPrint ()

SetFocus– перемещает фокус на определенный объект.

Для элемента управления RichTextBox с помощью методов LoadFile и SaveFile можно легко открывать или сохранять файлы RTF. Чтобы получить доступ к файлам, рекомендуется использовать элемент управления CommonDialog.

Пример. В форме имеется элемент управления RichTextBox под именем rtfData и элемент управления CommonDialog под именем dlgOpenFile. В процедуре для имени открываемого файла объявляется переменная типа String, открывается окно диалога ShowOpen и переменной присваивается имя выбранного файла.

Private Sub OpenFile()

Дата добавления: 2014-12-10 ; Просмотров: 1847 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Математика и математические операции на языке C# (sharp)

Всё программирование, в целом, построено на математике. Не было бы математики, то не было бы и программирования. Сама суть программирования заключается в том, чтобы максимально упростить математическую задачу и очень быстро её решить. У современных компьютеров весьма мощное «железо», чем у компьютеров десять лет назад. Если, буквально, полвека назад великие умы мечтали и грезили об одном гигабайте памяти, то в наше время исчисление памяти идёт в терабайтах. Если на обычных пользовательских (наших с вами) компьютерах жёсткий диск стоит в среднем на 1 терабайт памяти, то в научной среде память исчисляется в десятках, а то и сотнях, терабайт. Вычислительные мощности позволяют строить и проектировать подобия искусственного интеллекта способного решать конкретные задачи, а также моделировать реалистичные 3D модели любой сложности. Ещё лет десять и графику в компьютерных играх можно будет сравнивать с высококачественными фотографиями профессиональных фотографов.

Классические операции

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

Всего четыре оператора, а комбинаций и схем проворачиваемых с ними — ни счесть!

Также, помимо основных, существуют дополнительные математические операторы конкретно языка C#. Например, нахождение остатка от деления (%). На этом дополнительные операторы заканчиваются. Да, он всего один.

Реализация с типом int

Рассмотрим на примере как нужно считать и выведем сразу каждый результат на экран.

Помогите с C#. Для тех, кто знает это будет просто

Доброго времени суток. Только начали изучать C#. Задали сделать форму авторизации. И прикол в том, что если пароль будет введен не верно более трех раз, то нужно закрыть форму и я не знаю как это сделать. Прошу любой помощи.

Вот, что у меня есть:
namespace passForm
<
public partial class PasswordForm : Form
<
public PasswordForm()
<
InitializeComponent();
>

private void button1_Click(object sender, EventArgs e)
<
if (textBox1.Text == «user» && textBox2.Text == «pass»)
<
Form1 f = new Form1();

>
else
<
MessageBox.Show(«Неправильный пароль»);
textBox1.Clear();
>
>

private void PasswordForm_Load(object sender, EventArgs e)
<

C# — Как вывести математическую формулу в TetxBox/RichTextBox C#?

Для ввода и редактирования текста предназначены текстовые поля — элемент 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 , которое срабатывает при изменении текста в элементе. Например, поместим на форму кроме текстового поля метку и сделаем так, чтобы при изменении текста в текстовом поле также менялся текст на метке:

Глава 5. Вывод текстовой информации

Параграф 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 присутствуют два нечитаемых символа — это \r и \n — перевод строки и возврат каретки. К сожалению, из за этого, придется при редактировани текста учитывать наличие этих символов. У свойства Lines нет методов Add и Delete для строк, что также создает дополнительные трудности при редактировании текста.

Перед началом манипулирования с текстом определим статическую переменную 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:

Результат видим на Рис.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г.

C# — Как вывести математическую формулу в TetxBox/RichTextBox C#?

Элемент управления RichTextBox дает возможность пользователю вводить и редактировать текст при обеспечении более широких возможностей форматирования, чем обычный элемент управления TextBox

Элемент управления RichTextBox обеспечивает ряд свойств, которые можно использовать для форматирования любой части текста в элементе управления. Чтобы изменить форматирование текста, он должен быть сначала выделен. Используя эти свойства, можно делать текст полужирным или курсивным, изменять его цвет и создавать верхние и нижние индексы. Можно также корректировать форматирование абзаца, устанавливая левые и правые отступы, а также выступы.


Возможности использования
  • Как «безграничный» text box, позволяющий приложению читать чрезвычайно большие текстовые файлы.
  • Как полнофункциональный текстовый редактор в любом приложении.
Особенности
  • Открытие и сохранение файлов формата RTF и формата текста ASCII. Можно использовать методы элемента управления (LoadFile и SaveFile, чтобы непосредственно читать и записывть файлы, или использовать свойства элемента управления типа SelRTF и TextRTF вместе с инструкциями ввода-вывода файла Visual Basic.
  • Загрузка содержания файла .rtf в элемент управления RichTextBox перемещением файла (например, из Проводника Windows 95) или выделенной части файла, используемого в другом приложении (типа Microsoft Word), пропуская содержание непосредственно в элемент управления.
  • Настройка свойства FileName для загрузки в элемент управления содержания файла .rtf или .txt.
  • Печать всего текста или его части в элемент управления RichTextBox, используя метод SelPrint.
  • Связь элемента управления RichTextBox с элементом управления Data на поле Memo в базе данных Microsoft Access или подобном поле текста большой емкости в других базах данных (наподобие типа данных TEXT в Сервере SQL).
  • Добавление программным способом внедренных объектов — таких, как точечные рисунки, значки, пиктограммы программ — во время выполнения, используя метод Add коллекции OLEObject. И во время разработки, и во время выполнения перетащите и опустите в элемент управления любой внедренный объект, включая документы типа электронных таблиц Excel и документов Word.
Установка полос прокрутки во время разработки

По умолчанию RichTextBox не включает полосы прокрутки. Если в элемент управления загружен большой файл, во время выполнения пользователь не сможет увидеть всё, что там находится. Чтобы дать пользователю возможность пролистать его, установите свойство ScrollBars на 1 (горизонтальная), 2 (вертикальная) или 3 (обе). Это должно быть сделано во время разработки, потому что свойство ScrollBars только для чтения во время выполнения.

Открытие и сохранение файлов методами LoadFile и SaveFile

Вы можете легко открыть или сохранить файл RTF в элементе управления RichTextBox, используя методы LoadFile и SaveFile. Чтобы обеспечить имя и путь открывающегося файла, используйте элемент управления CommonDialog, как показано:

Private Sub OpenFile()
‘ Элемент управления RichTextBox назван «rtfData».
‘ CommonDialog назван «dlgOpenFile».
‘ Объявление строковой переменной для имени файла.
‘ Показ окна диалога Open File и установка
‘ переменной имени файла.
Dim strOpen As String
dlgOpenFile.ShowOpen
strOpen = dlgOpenFile.FileName
‘ Использование метода LoadFile для открытия файла .
RtfData. LoadFile strOpen
End Sub

Сохранить файл так же просто, используя метод SaveFile:

Private Sub SaveFile()
Dim strNewFile As String
dlgOpenFile.ShowSave
strNewFile = dlgOpenFile.FileName
rtfData.SaveFile strNewFile
End Sub

Примечание Если файл содержит коды RTF, которые не поддержаны элементом управления, текст не появится в RichTextBox.

Использование SelFontName, SelFontSize и SelFontColor для установки атрибутов шрифта

Чтобы изменять атрибуты шрифта текста в элементе управления RichTextBox, используются свойства SelFontName, SelFontSize и SelFontColor.

Чтобы отобразить диапазон выборов для этих свойств, часто используется элемент управления ComboBox. Впоследствии, чтобы изменить свойство, может использоватьяс событие Click элемента управления ComboBox. Следующий код сначала заполняет элемент управления) ComboBox, названный «cmbFonts» в событии Load объекта Form. Событие Click используется, чтобы изменить свойство SelFontName элемента управления RichTextBox:

Private Sub Form_Load()
Dim i As Integer
With cmbFonts
For i = 0 To Screen.Fonts.Count — 1
.AddItem Screen.Fonts(i).Text
End With
End Sub

Private Sub cmbFonts_Click()
rtfData.SelFontName = cmbFonts.Text
End Sub

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

Форматирование отступов, выступов и маркированных абзацев

Другая особенность элемента управления RichTextBox — способность создать абзацы с отступами, выступами и маркированные списки. Эти три стиля показаны на рис. 7А.25:

Рис. 7А.25 Отступы и маркированные списки (rtf_3ind.bmp)

Как со свойствами SelFontName, SelFontSize и SelFontColor, перед применением этих атрибутов пользователь должен выбрать абзац или рядн абзацев. Итак, если предположить, что пользовател выбрал только второй абзац, код для создания отступа и выступа будет следующий:

‘ Предположим, что элемент управления называется «rtfData».
rtfData.SelIndent = .5
rtfdata.SelHangingIndent = 1.5

Обратите внимание что номер, использованный для установки SelIndent, SelHangingIndent, BulletIndent и других свойств, зависит от свойства ScaleMode контейнера элемента управления RichTextBox. Например, если контейнер RichTextBox — объект Form и вы изменяете свойство ScaleMode объекта Form от 7 (сантиметров) до 1 (twips), свойство SelIndent должно измениться от 5 (сантиметров) до 283 (twips), потому что один сантиметр = 567 twips.

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

Использование события SelChange для сообщения об изменениях атрибута

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

Private Sub rtfData_SelChange()
‘ Сбрасывает свойство Value объекта Button элемента
‘ управления Toolbar. Элемент управления Toolbar
‘ назван «tlbRTF».
‘ SelBold возвращает 0, -1 или Null. Если это Null,
‘ то свойство MixedState устанавливается в True.
Select Case rtfData.SelBold
Case 0 ‘ Не полужирный.
tlbRTF.Buttons(«bold»).Value = tbrUnpressed
Case -1 ‘ Полужирный.
tlbRTF.Buttons(«bold»).Value = tbrPressed
Case Else ‘ Смешанный стиль.
tlbRTF.Buttons(«bold»).MixedState = True
End Select
End Sub

Использование метода SelPrint для печати содержания RichTextBox

Чтобы напечатать содержание элемента управления RichTextBox, используется метод SelPrint. Этот метод требует одного аргумента — свойства hDC объекта Printer, который будет печатать содержание RichTextBox. Если пользователь выбрал какой-либо текст, напечатан будет только выбранный текст. Если никакой текст не выбран, содержание элемента управления будет напечатано полностью.

Следующий код использует элемент управления CommonDialog, чтобы отобразить окно диалога Printer, когда пользователь нажимает элемент управления CommandButton. Свойство Flags отключает нумерацию страниц, и дает возможность пользователю выбирать различные параметры в окне диалога:

Private Sub cmdPrint_Click()
‘ Элемент управления CommonDialog назван «dlgPrint».
dlgPrint.Flags = cdlPDReturnDC + cdlPDNoPageNums
If rtfData.SelLength = 0 Then
dlgPrint.Flags = dlgPrint.Flags + cdlPDAllPages
Else
dlgPrint.Flags = dlgPrint.Flags + cdlPDSelection
End If
dlgPrint.ShowPrinter
rtfData.SelPrint dlgPrint.hDC
End Sub

Отображение в элементе управления внедренных объектов

Во время выполнения пользователь может перетащить и опустить в элемент управления RichTextBox любые внедренные объекты. Есть два вида объектов, которые могут быть внедрены в элемент управления: объекты, которые отображаются как значки, и объекты, которые отображаются как данные. Как пример первого типа, следующий рисунок показывает RichTextBox со внедренным объектом файла.

Когда внедренный объект нажат, он будет вести себя, как и ожидается — запустится приложение, связанное с файлом. Когда данные в элементе управления сохранены как файл RTF (использование метода SaveFile), информация во внедренном объекте будет также сохранена.

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

Щелчок по рисунку запустит приложение Paint, разрешая пользователю редактировать его.

Добавление внедренных объектов с использованием метода Add коллекции OLEObjects

Можно программным способом добавлять в элемент управления внедренные объекты, используя метод Add коллекции OLEObjects, как показано:

Private Sub cmdAddObject_Click()
‘ Добавление в элемент управления точечного рисунка бабочки.
RichTextBox1.OLEObjects.Add , , , «bfly.bmp»
End Sub

Используя методы Add, Clear и Remove, можно динамически заполнять элемент управления внедренными объектами во время выполнения.

Компонент TextBox C#

Этот элемент управления является основным, предназначенным для ввода пользователем текстовых данных. Использовать TextBox можно в однострочном или многострочном режиме. Однако данный элемент управления имеет ограничение — до 64 килобайт текста. Если вам необходимо обрабатывать большие объемы информации, лучше использовать элемент RichTextBox.

К основным обработчикам событий данного компонента относят Key Press, который позволяет, например, ограничить тип вводимых значений в данное поле, и TextChanged, который выполняет какие-либо действия при вводе текста в область компонента TextBox.

Цукерберг рекомендует:  Удаление, замена и перемещение элементов в jQuery
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих